feat(linter): improve support for mixed linters when using IDEs (#2620)
This commit is contained in:
parent
13302f099e
commit
fef54fae4b
@ -4,6 +4,7 @@ tmp
|
|||||||
node_modules
|
node_modules
|
||||||
/package.json
|
/package.json
|
||||||
packages/workspace/src/schematics/**/files/**/*.json
|
packages/workspace/src/schematics/**/files/**/*.json
|
||||||
|
packages/workspace/src/core/dep-graph/vendor.js
|
||||||
packages/web/src/schematics/**/files/**/*.json
|
packages/web/src/schematics/**/files/**/*.json
|
||||||
packages/node/src/schematics/**/files/**/*.json
|
packages/node/src/schematics/**/files/**/*.json
|
||||||
packages/express/src/schematics/**/files/**/*.json
|
packages/express/src/schematics/**/files/**/*.json
|
||||||
|
|||||||
@ -132,7 +132,7 @@
|
|||||||
"cz-customizable": "^6.2.0",
|
"cz-customizable": "^6.2.0",
|
||||||
"document-register-element": "^1.13.1",
|
"document-register-element": "^1.13.1",
|
||||||
"dotenv": "6.2.0",
|
"dotenv": "6.2.0",
|
||||||
"eslint": "6.1.0",
|
"eslint": "6.8.0",
|
||||||
"eslint-config-prettier": "6.0.0",
|
"eslint-config-prettier": "6.0.0",
|
||||||
"eslint-plugin-import": "^2.20.1",
|
"eslint-plugin-import": "^2.20.1",
|
||||||
"eslint-plugin-jsx-a11y": "^6.2.3",
|
"eslint-plugin-jsx-a11y": "^6.2.3",
|
||||||
@ -223,7 +223,7 @@
|
|||||||
"tsconfig-paths-webpack-plugin": "^3.2.0",
|
"tsconfig-paths-webpack-plugin": "^3.2.0",
|
||||||
"tsickle": "^0.37.0",
|
"tsickle": "^0.37.0",
|
||||||
"tslib": "^1.9.3",
|
"tslib": "^1.9.3",
|
||||||
"tslint": "5.11.0",
|
"tslint": "6.0.0",
|
||||||
"typescript": "~3.7.4",
|
"typescript": "~3.7.4",
|
||||||
"url-loader": "^3.0.0",
|
"url-loader": "^3.0.0",
|
||||||
"verdaccio": "^4.4.2",
|
"verdaccio": "^4.4.2",
|
||||||
|
|||||||
@ -442,6 +442,9 @@ function updateLinting(options: NormalizedSchema): Rule {
|
|||||||
}),
|
}),
|
||||||
updateJsonInTree(`${options.appProjectRoot}/tslint.json`, json => {
|
updateJsonInTree(`${options.appProjectRoot}/tslint.json`, json => {
|
||||||
json.extends = `${offsetFromRoot(options.appProjectRoot)}tslint.json`;
|
json.extends = `${offsetFromRoot(options.appProjectRoot)}tslint.json`;
|
||||||
|
json.linterOptions = {
|
||||||
|
exclude: ['!**/*']
|
||||||
|
};
|
||||||
return json;
|
return json;
|
||||||
})
|
})
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -379,7 +379,10 @@ function updateProject(options: NormalizedSchema): Rule {
|
|||||||
updateJsonInTree(`${options.projectRoot}/tslint.json`, json => {
|
updateJsonInTree(`${options.projectRoot}/tslint.json`, json => {
|
||||||
return {
|
return {
|
||||||
...json,
|
...json,
|
||||||
extends: `${offsetFromRoot(options.projectRoot)}tslint.json`
|
extends: `${offsetFromRoot(options.projectRoot)}tslint.json`,
|
||||||
|
linterOptions: {
|
||||||
|
exclude: ['!**/*']
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
updateJsonInTree(`/nx.json`, json => {
|
updateJsonInTree(`/nx.json`, json => {
|
||||||
|
|||||||
@ -57,8 +57,13 @@
|
|||||||
},
|
},
|
||||||
"update-9-1-0": {
|
"update-9-1-0": {
|
||||||
"version": "9.1.0-beta.1",
|
"version": "9.1.0-beta.1",
|
||||||
"description": "Update prettier to 1.19.1 with support for typescript 3.7",
|
"description": "Update prettier to 1.19.1 with support for typescript 3.7; Update eslint and tslint",
|
||||||
"factory": "./src/migrations/update-9-0-0/update-9-0-0"
|
"factory": "./src/migrations/update-9-1-0/update-9-1-0"
|
||||||
|
},
|
||||||
|
"update-lint-config-9-1-0": {
|
||||||
|
"version": "9.1.0-beta.1",
|
||||||
|
"description": "Update eslint and tslint config to provide better IDE support",
|
||||||
|
"factory": "./src/migrations/update-9-1-0/update-lint-config"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"packageJsonUpdates": {
|
"packageJsonUpdates": {
|
||||||
@ -396,11 +401,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"9.0.0": {
|
"9.1.0": {
|
||||||
"version": "9.0.0-beta.1",
|
"version": "9.1.0-beta.1",
|
||||||
"packages": {
|
"packages": {
|
||||||
|
"eslint": {
|
||||||
|
"version": "6.8.0"
|
||||||
|
},
|
||||||
"prettier": {
|
"prettier": {
|
||||||
"version": "1.19.1"
|
"version": "1.19.1"
|
||||||
|
},
|
||||||
|
"tslint": {
|
||||||
|
"version": "6.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,6 @@ const updatePackages = updatePackagesInPackageJson(
|
|||||||
join(__dirname, '../../../', 'migrations.json'),
|
join(__dirname, '../../../', 'migrations.json'),
|
||||||
'9.1.0'
|
'9.1.0'
|
||||||
);
|
);
|
||||||
|
|
||||||
export default function() {
|
export default function() {
|
||||||
return chain([updatePackages]);
|
return chain([updatePackages]);
|
||||||
}
|
}
|
||||||
@ -0,0 +1,120 @@
|
|||||||
|
import { chain, Tree } from '@angular-devkit/schematics';
|
||||||
|
import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
|
||||||
|
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
|
||||||
|
import { callRule, runMigration } from '../../utils/testing';
|
||||||
|
import { updateWorkspace } from '@nrwl/workspace/src/utils/workspace';
|
||||||
|
|
||||||
|
describe('Update 9.1.0', () => {
|
||||||
|
let tree: Tree;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
tree = Tree.empty();
|
||||||
|
tree = createEmptyWorkspace(tree);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update tslint.json', async () => {
|
||||||
|
tree = await callRule(
|
||||||
|
chain([
|
||||||
|
updateWorkspace(workspace => {
|
||||||
|
workspace.projects.add({
|
||||||
|
name: 'proj1',
|
||||||
|
root: 'proj1',
|
||||||
|
architect: {
|
||||||
|
lint: {
|
||||||
|
builder: '@angular-devkit/build-angular:tslint'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
workspace.projects.add({
|
||||||
|
name: 'proj2',
|
||||||
|
root: 'proj2',
|
||||||
|
architect: {
|
||||||
|
lint: {
|
||||||
|
builder: '@angular-devkit/build-angular:tslint'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
updateJsonInTree('proj1/tslint.json', () => ({
|
||||||
|
rules: {}
|
||||||
|
})),
|
||||||
|
updateJsonInTree('proj2/tslint.json', () => ({
|
||||||
|
rules: {},
|
||||||
|
linterOptions: {
|
||||||
|
exclude: ['whatever']
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
]),
|
||||||
|
tree
|
||||||
|
);
|
||||||
|
|
||||||
|
const result = await runMigration('update-lint-config-9-1-0', {}, tree);
|
||||||
|
|
||||||
|
expect(readJsonInTree(result, 'proj1/tslint.json')).toEqual({
|
||||||
|
rules: {},
|
||||||
|
linterOptions: {
|
||||||
|
exclude: ['!**/*']
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(readJsonInTree(result, 'proj2/tslint.json')).toEqual({
|
||||||
|
rules: {},
|
||||||
|
linterOptions: {
|
||||||
|
exclude: ['!**/*', 'whatever']
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update .eslintrc', async () => {
|
||||||
|
tree = await callRule(
|
||||||
|
chain([
|
||||||
|
updateWorkspace(workspace => {
|
||||||
|
workspace.projects.add({
|
||||||
|
name: 'proj1',
|
||||||
|
root: 'proj1',
|
||||||
|
architect: {
|
||||||
|
lint: {
|
||||||
|
builder: '@nrwl/linter:lint',
|
||||||
|
options: {
|
||||||
|
config: 'proj1/.eslintrc'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
workspace.projects.add({
|
||||||
|
name: 'proj2',
|
||||||
|
root: 'proj2',
|
||||||
|
architect: {
|
||||||
|
lint: {
|
||||||
|
builder: '@nrwl/linter:lint',
|
||||||
|
options: {
|
||||||
|
config: 'proj2/.eslintrc'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
updateJsonInTree('proj1/.eslintrc', () => ({
|
||||||
|
rules: {}
|
||||||
|
})),
|
||||||
|
updateJsonInTree('proj2/.eslintrc', () => ({
|
||||||
|
rules: {},
|
||||||
|
ignorePatterns: ['whatever']
|
||||||
|
}))
|
||||||
|
]),
|
||||||
|
tree
|
||||||
|
);
|
||||||
|
|
||||||
|
const result = await runMigration('update-lint-config-9-1-0', {}, tree);
|
||||||
|
|
||||||
|
expect(readJsonInTree(result, 'proj1/.eslintrc')).toEqual({
|
||||||
|
rules: {},
|
||||||
|
ignorePatterns: ['!**/*']
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(readJsonInTree(result, 'proj2/.eslintrc')).toEqual({
|
||||||
|
rules: {},
|
||||||
|
ignorePatterns: ['!**/*', 'whatever']
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
import { SchematicContext, Tree } from '@angular-devkit/schematics';
|
||||||
|
import { readWorkspace, updateJsonInTree } from '@nrwl/workspace';
|
||||||
|
|
||||||
|
function updateLintConfigurations(host: Tree, context: SchematicContext) {
|
||||||
|
const workspaceJson = readWorkspace(host);
|
||||||
|
Object.values(workspaceJson.projects).forEach((config: any) => {
|
||||||
|
if (!config.architect || !config.architect.lint) return;
|
||||||
|
if (config.architect.lint.builder === '@nrwl/linter:lint') {
|
||||||
|
updateJson(
|
||||||
|
json => {
|
||||||
|
// Prefix it so that previously ignored files will override the whitelist.
|
||||||
|
json.ignorePatterns = ['!**/*', ...(json.ignorePatterns || [])];
|
||||||
|
return json;
|
||||||
|
},
|
||||||
|
config.architect.lint.options.config,
|
||||||
|
host,
|
||||||
|
context
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
config.architect.lint.builder === '@angular-devkit/build-angular:tslint'
|
||||||
|
) {
|
||||||
|
updateJson(
|
||||||
|
json => {
|
||||||
|
json.linterOptions = {
|
||||||
|
...json.linterOptions,
|
||||||
|
// Prefix it so that previously ignored files will override the whitelist.
|
||||||
|
exclude: [
|
||||||
|
'!**/*',
|
||||||
|
...((json.linterOptions && json.linterOptions.exclude) || [])
|
||||||
|
]
|
||||||
|
};
|
||||||
|
return json;
|
||||||
|
},
|
||||||
|
`${config.root}/tslint.json`,
|
||||||
|
host,
|
||||||
|
context
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateJson(visitor, path, host, context) {
|
||||||
|
try {
|
||||||
|
if (host.exists(path)) {
|
||||||
|
// In case tslint.json does not exist we don't want to create it.
|
||||||
|
updateJsonInTree(path, visitor)(host, context);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
context.logger.warn(`Could not update ${path}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function() {
|
||||||
|
return updateLintConfigurations;
|
||||||
|
}
|
||||||
@ -222,7 +222,10 @@ describe('lib', () => {
|
|||||||
const tslintJson = readJsonInTree(tree, 'libs/my-dir/my-lib/tslint.json');
|
const tslintJson = readJsonInTree(tree, 'libs/my-dir/my-lib/tslint.json');
|
||||||
expect(tslintJson).toEqual({
|
expect(tslintJson).toEqual({
|
||||||
extends: '../../../tslint.json',
|
extends: '../../../tslint.json',
|
||||||
rules: {}
|
rules: {},
|
||||||
|
linterOptions: {
|
||||||
|
exclude: ['!**/*']
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -44,7 +44,7 @@
|
|||||||
"@types/node": "~8.9.4",
|
"@types/node": "~8.9.4",
|
||||||
"dotenv": "6.2.0",
|
"dotenv": "6.2.0",
|
||||||
"ts-node": "~7.0.0",
|
"ts-node": "~7.0.0",
|
||||||
"tslint": "~5.11.0",
|
"tslint": "~6.0.0",
|
||||||
"eslint": "<%= eslintVersion %>",
|
"eslint": "<%= eslintVersion %>",
|
||||||
"typescript": "<%= typescriptVersion %>",
|
"typescript": "<%= typescriptVersion %>",
|
||||||
"prettier": "<%= prettierVersion %>"
|
"prettier": "<%= prettierVersion %>"
|
||||||
|
|||||||
@ -80,6 +80,10 @@ export function addLintFiles(
|
|||||||
join(projectRoot as any, `tslint.json`),
|
join(projectRoot as any, `tslint.json`),
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
extends: `${offsetFromRoot(projectRoot)}tslint.json`,
|
extends: `${offsetFromRoot(projectRoot)}tslint.json`,
|
||||||
|
// Include project files to be linted since the global one excludes all files.
|
||||||
|
linterOptions: {
|
||||||
|
exclude: ['!**/*']
|
||||||
|
},
|
||||||
rules: {}
|
rules: {}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@ -134,6 +138,8 @@ export function addLintFiles(
|
|||||||
rules: {}
|
rules: {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
// Include all project files to be linted (since they are turned off in the root eslintrc file).
|
||||||
|
configJson.ignorePatterns = ['!**/*'];
|
||||||
host.create(
|
host.create(
|
||||||
join(projectRoot as any, `.eslintrc`),
|
join(projectRoot as any, `.eslintrc`),
|
||||||
JSON.stringify(configJson)
|
JSON.stringify(configJson)
|
||||||
@ -149,6 +155,9 @@ export function addLintFiles(
|
|||||||
const globalTsLint = `
|
const globalTsLint = `
|
||||||
{
|
{
|
||||||
"rulesDirectory": ["node_modules/@nrwl/workspace/src/tslint"],
|
"rulesDirectory": ["node_modules/@nrwl/workspace/src/tslint"],
|
||||||
|
"linterOptions": {
|
||||||
|
"exclude": ["**/*"]
|
||||||
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
"arrow-return-shorthand": true,
|
"arrow-return-shorthand": true,
|
||||||
"callable-types": true,
|
"callable-types": true,
|
||||||
@ -220,6 +229,7 @@ const globalESLint = `
|
|||||||
"sourceType": "module",
|
"sourceType": "module",
|
||||||
"project": "./tsconfig.json"
|
"project": "./tsconfig.json"
|
||||||
},
|
},
|
||||||
|
"ignorePatterns": ["**/*"],
|
||||||
"plugins": ["@typescript-eslint", "@nrwl/nx"],
|
"plugins": ["@typescript-eslint", "@nrwl/nx"],
|
||||||
"extends": [
|
"extends": [
|
||||||
'eslint:recommended',
|
'eslint:recommended',
|
||||||
|
|||||||
@ -4,5 +4,5 @@ export const angularCliVersion = '9.0.1';
|
|||||||
export const typescriptVersion = '~3.7.4';
|
export const typescriptVersion = '~3.7.4';
|
||||||
export const prettierVersion = '1.19.1';
|
export const prettierVersion = '1.19.1';
|
||||||
export const typescriptESLintVersion = '2.19.2';
|
export const typescriptESLintVersion = '2.19.2';
|
||||||
export const eslintVersion = '6.1.0';
|
export const eslintVersion = '6.8.0';
|
||||||
export const eslintConfigPrettierVersion = '6.0.0';
|
export const eslintConfigPrettierVersion = '6.0.0';
|
||||||
|
|||||||
110
yarn.lock
110
yarn.lock
@ -5126,10 +5126,10 @@ acorn-globals@^4.1.0, acorn-globals@^4.3.2:
|
|||||||
acorn "^6.0.1"
|
acorn "^6.0.1"
|
||||||
acorn-walk "^6.0.1"
|
acorn-walk "^6.0.1"
|
||||||
|
|
||||||
acorn-jsx@^5.0.2:
|
acorn-jsx@^5.2.0:
|
||||||
version "5.0.2"
|
version "5.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
|
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
|
||||||
integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
|
integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
|
||||||
|
|
||||||
acorn-walk@^6.0.1:
|
acorn-walk@^6.0.1:
|
||||||
version "6.2.0"
|
version "6.2.0"
|
||||||
@ -9629,11 +9629,6 @@ diff-sequences@^25.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32"
|
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32"
|
||||||
integrity sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==
|
integrity sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==
|
||||||
|
|
||||||
diff@^3.2.0:
|
|
||||||
version "3.5.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
|
||||||
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
|
|
||||||
|
|
||||||
diff@^4.0.1:
|
diff@^4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff"
|
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff"
|
||||||
@ -10366,13 +10361,6 @@ eslint-scope@^5.0.0:
|
|||||||
esrecurse "^4.1.0"
|
esrecurse "^4.1.0"
|
||||||
estraverse "^4.1.1"
|
estraverse "^4.1.1"
|
||||||
|
|
||||||
eslint-utils@^1.3.1:
|
|
||||||
version "1.4.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
|
|
||||||
integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
|
|
||||||
dependencies:
|
|
||||||
eslint-visitor-keys "^1.0.0"
|
|
||||||
|
|
||||||
eslint-utils@^1.4.3:
|
eslint-utils@^1.4.3:
|
||||||
version "1.4.3"
|
version "1.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
|
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
|
||||||
@ -10380,15 +10368,15 @@ eslint-utils@^1.4.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.1.0"
|
||||||
|
|
||||||
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
|
eslint-visitor-keys@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
|
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
|
||||||
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
|
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
|
||||||
|
|
||||||
eslint@6.1.0:
|
eslint@6.8.0:
|
||||||
version "6.1.0"
|
version "6.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646"
|
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
|
||||||
integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==
|
integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "^7.0.0"
|
"@babel/code-frame" "^7.0.0"
|
||||||
ajv "^6.10.0"
|
ajv "^6.10.0"
|
||||||
@ -10397,19 +10385,19 @@ eslint@6.1.0:
|
|||||||
debug "^4.0.1"
|
debug "^4.0.1"
|
||||||
doctrine "^3.0.0"
|
doctrine "^3.0.0"
|
||||||
eslint-scope "^5.0.0"
|
eslint-scope "^5.0.0"
|
||||||
eslint-utils "^1.3.1"
|
eslint-utils "^1.4.3"
|
||||||
eslint-visitor-keys "^1.0.0"
|
eslint-visitor-keys "^1.1.0"
|
||||||
espree "^6.0.0"
|
espree "^6.1.2"
|
||||||
esquery "^1.0.1"
|
esquery "^1.0.1"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
file-entry-cache "^5.0.1"
|
file-entry-cache "^5.0.1"
|
||||||
functional-red-black-tree "^1.0.1"
|
functional-red-black-tree "^1.0.1"
|
||||||
glob-parent "^5.0.0"
|
glob-parent "^5.0.0"
|
||||||
globals "^11.7.0"
|
globals "^12.1.0"
|
||||||
ignore "^4.0.6"
|
ignore "^4.0.6"
|
||||||
import-fresh "^3.0.0"
|
import-fresh "^3.0.0"
|
||||||
imurmurhash "^0.1.4"
|
imurmurhash "^0.1.4"
|
||||||
inquirer "^6.4.1"
|
inquirer "^7.0.0"
|
||||||
is-glob "^4.0.0"
|
is-glob "^4.0.0"
|
||||||
js-yaml "^3.13.1"
|
js-yaml "^3.13.1"
|
||||||
json-stable-stringify-without-jsonify "^1.0.1"
|
json-stable-stringify-without-jsonify "^1.0.1"
|
||||||
@ -10418,7 +10406,7 @@ eslint@6.1.0:
|
|||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
mkdirp "^0.5.1"
|
mkdirp "^0.5.1"
|
||||||
natural-compare "^1.4.0"
|
natural-compare "^1.4.0"
|
||||||
optionator "^0.8.2"
|
optionator "^0.8.3"
|
||||||
progress "^2.0.0"
|
progress "^2.0.0"
|
||||||
regexpp "^2.0.1"
|
regexpp "^2.0.1"
|
||||||
semver "^6.1.2"
|
semver "^6.1.2"
|
||||||
@ -10428,13 +10416,13 @@ eslint@6.1.0:
|
|||||||
text-table "^0.2.0"
|
text-table "^0.2.0"
|
||||||
v8-compile-cache "^2.0.3"
|
v8-compile-cache "^2.0.3"
|
||||||
|
|
||||||
espree@^6.0.0:
|
espree@^6.1.2:
|
||||||
version "6.1.1"
|
version "6.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de"
|
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.0.tgz#349fef01a202bbab047748300deb37fa44da79d7"
|
||||||
integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==
|
integrity sha512-Xs8airJ7RQolnDIbLtRutmfvSsAe0xqMMAantCN/GMoqf81TFbeI1T7Jpd56qYu1uuh32dOG5W/X9uO+ghPXzA==
|
||||||
dependencies:
|
dependencies:
|
||||||
acorn "^7.0.0"
|
acorn "^7.1.0"
|
||||||
acorn-jsx "^5.0.2"
|
acorn-jsx "^5.2.0"
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.1.0"
|
||||||
|
|
||||||
esprima@^3.1.3:
|
esprima@^3.1.3:
|
||||||
@ -10782,7 +10770,7 @@ fast-json-stable-stringify@2.0.0, fast-json-stable-stringify@2.x, fast-json-stab
|
|||||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
||||||
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
|
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
|
||||||
|
|
||||||
fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4:
|
fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
||||||
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
||||||
@ -11647,11 +11635,18 @@ global@^4.3.2, global@^4.4.0:
|
|||||||
min-document "^2.19.0"
|
min-document "^2.19.0"
|
||||||
process "^0.11.10"
|
process "^0.11.10"
|
||||||
|
|
||||||
globals@^11.1.0, globals@^11.7.0:
|
globals@^11.1.0:
|
||||||
version "11.12.0"
|
version "11.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||||
|
|
||||||
|
globals@^12.1.0:
|
||||||
|
version "12.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13"
|
||||||
|
integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==
|
||||||
|
dependencies:
|
||||||
|
type-fest "^0.8.1"
|
||||||
|
|
||||||
globals@^9.18.0:
|
globals@^9.18.0:
|
||||||
version "9.18.0"
|
version "9.18.0"
|
||||||
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
||||||
@ -12606,7 +12601,7 @@ inquirer@7.0.0:
|
|||||||
strip-ansi "^5.1.0"
|
strip-ansi "^5.1.0"
|
||||||
through "^2.3.6"
|
through "^2.3.6"
|
||||||
|
|
||||||
inquirer@^6.3.1, inquirer@^6.4.1:
|
inquirer@^6.3.1:
|
||||||
version "6.5.2"
|
version "6.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
|
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
|
||||||
integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
|
integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
|
||||||
@ -14118,7 +14113,7 @@ js-tokens@^3.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||||
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
|
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
|
||||||
|
|
||||||
js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.0:
|
js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.9.0:
|
||||||
version "3.13.1"
|
version "3.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
||||||
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
|
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
|
||||||
@ -16653,7 +16648,7 @@ optional@0.1.4:
|
|||||||
resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3"
|
resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3"
|
||||||
integrity sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==
|
integrity sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==
|
||||||
|
|
||||||
optionator@^0.8.1, optionator@^0.8.2:
|
optionator@^0.8.1:
|
||||||
version "0.8.2"
|
version "0.8.2"
|
||||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
|
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
|
||||||
integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
|
integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
|
||||||
@ -16665,6 +16660,18 @@ optionator@^0.8.1, optionator@^0.8.2:
|
|||||||
type-check "~0.3.2"
|
type-check "~0.3.2"
|
||||||
wordwrap "~1.0.0"
|
wordwrap "~1.0.0"
|
||||||
|
|
||||||
|
optionator@^0.8.3:
|
||||||
|
version "0.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
|
||||||
|
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
|
||||||
|
dependencies:
|
||||||
|
deep-is "~0.1.3"
|
||||||
|
fast-levenshtein "~2.0.6"
|
||||||
|
levn "~0.3.0"
|
||||||
|
prelude-ls "~1.1.2"
|
||||||
|
type-check "~0.3.2"
|
||||||
|
word-wrap "~1.2.3"
|
||||||
|
|
||||||
ora@3.0.0:
|
ora@3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0"
|
resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0"
|
||||||
@ -21764,7 +21771,7 @@ tsickle@^0.37.0:
|
|||||||
mkdirp "^0.5.1"
|
mkdirp "^0.5.1"
|
||||||
source-map "^0.7.3"
|
source-map "^0.7.3"
|
||||||
|
|
||||||
tslib@1.10.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
|
tslib@1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
|
||||||
version "1.10.0"
|
version "1.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
||||||
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
||||||
@ -21774,30 +21781,31 @@ tslib@^1.10.0:
|
|||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc"
|
||||||
integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg==
|
integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg==
|
||||||
|
|
||||||
tslint@5.11.0:
|
tslint@6.0.0:
|
||||||
version "5.11.0"
|
version "6.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed"
|
resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.0.0.tgz#1c0148beac4779924216302f192cdaa153618310"
|
||||||
integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0=
|
integrity sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA==
|
||||||
dependencies:
|
dependencies:
|
||||||
babel-code-frame "^6.22.0"
|
"@babel/code-frame" "^7.0.0"
|
||||||
builtin-modules "^1.1.1"
|
builtin-modules "^1.1.1"
|
||||||
chalk "^2.3.0"
|
chalk "^2.3.0"
|
||||||
commander "^2.12.1"
|
commander "^2.12.1"
|
||||||
diff "^3.2.0"
|
diff "^4.0.1"
|
||||||
glob "^7.1.1"
|
glob "^7.1.1"
|
||||||
js-yaml "^3.7.0"
|
js-yaml "^3.13.1"
|
||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
|
mkdirp "^0.5.1"
|
||||||
resolve "^1.3.2"
|
resolve "^1.3.2"
|
||||||
semver "^5.3.0"
|
semver "^5.3.0"
|
||||||
tslib "^1.8.0"
|
tslib "^1.10.0"
|
||||||
tsutils "^2.27.2"
|
tsutils "^2.29.0"
|
||||||
|
|
||||||
tsscmp@1.0.6:
|
tsscmp@1.0.6:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
|
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
|
||||||
integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
|
integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
|
||||||
|
|
||||||
tsutils@^2.27.2:
|
tsutils@^2.29.0:
|
||||||
version "2.29.0"
|
version "2.29.0"
|
||||||
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
|
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
|
||||||
integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
|
integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
|
||||||
@ -21855,7 +21863,7 @@ type-fest@^0.6.0:
|
|||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
|
||||||
integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
|
integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
|
||||||
|
|
||||||
type-fest@^0.8.0:
|
type-fest@^0.8.0, type-fest@^0.8.1:
|
||||||
version "0.8.1"
|
version "0.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
||||||
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
||||||
@ -22814,7 +22822,7 @@ windows-release@^3.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
execa "^1.0.0"
|
execa "^1.0.0"
|
||||||
|
|
||||||
word-wrap@^1.0.3, word-wrap@^1.2.3:
|
word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3:
|
||||||
version "1.2.3"
|
version "1.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
||||||
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
|
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user