Merge pull request #15104 from mozilla/fxa-5186-local-eslint-fxa

chore(lint): move eslint-plugin-fxa into the monorepo
This commit is contained in:
Barry Chen 2023-04-06 13:03:24 -07:00 коммит произвёл GitHub
Родитель 57197843f0 b6b445cd6d
Коммит 4a0ca7e040
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
30 изменённых файлов: 659 добавлений и 40 удалений

Просмотреть файл

@ -80,7 +80,7 @@
},
"devDependencies": {
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"eslint-plugin-fxa": "workspace:*",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-react": "^7.32.2",
"json": "^11.0.0",

Просмотреть файл

@ -33,7 +33,6 @@
"devDependencies": {
"audit-filter": "0.5.0",
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"pm2": "^5.3.0",
"prettier": "^2.3.1"
},

Просмотреть файл

@ -32,7 +32,6 @@
"devDependencies": {
"audit-filter": "0.5.0",
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"fxa-shared": "workspace:*",
"mocha": "^10.0.0",
"pm2": "^5.3.0",

Просмотреть файл

@ -0,0 +1,5 @@
# eslint-plugin-fxa
License MPL-2.0
A continuation of https://github.com/mozilla/eslint-plugin-fxa

Просмотреть файл

@ -0,0 +1,21 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
module.exports = {
extends: 'plugin:fxa/recommended',
env: {
amd: true, // defines require() and define() as global variables as per the amd spec
browser: true, // browser global variables
mocha: true, // adds all of the Mocha testing global variables
},
rules: {
camelcase: 2,
'id-blacklist': [2, 'self'],
strict: [2, 'function'],
},
};

Просмотреть файл

@ -0,0 +1,64 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
module.exports = {
extends: ['eslint:recommended'],
parserOptions: {
ecmaVersion: 2018,
},
env: {
es6: true, // enable all ECMAScript 6 features except for modules
node: true, // Node.js global variables and Node.js-specific rules
},
rules: {
camelcase: 0,
'comma-dangle': 0,
'comma-style': [2, 'last'],
'consistent-return': 0,
curly: [2, 'all'],
'dot-notation': 0,
'eol-last': 2,
eqeqeq: [2, 'allow-null'],
'global-strict': 0,
'handle-callback-err': 1,
indent: [2, 2, { SwitchCase: 1 }],
'key-spacing': 0,
'keyword-spacing': 2,
'new-cap': 0,
'no-cond-assign': [2, 'except-parens'],
'no-debugger': 2,
'no-empty': 0,
'no-eval': 2,
'fxa/no-exclusive-tests': 2,
'no-irregular-whitespace': 2,
'no-loop-func': 0,
'no-multi-spaces': 0,
'no-multiple-empty-lines': [2, { max: 2 }],
'no-new': 2,
'no-process-exit': 0,
'no-script-url': 2,
'no-sequences': 2,
'no-shadow': 0,
'no-spaced-func': 0,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-underscore-dangle': 0,
'no-unused-vars': [2, { vars: 'all', args: 'none' }],
'no-use-before-define': [2, 'nofunc'],
'no-with': 2,
'prefer-const': [
2,
{ destructuring: 'any', ignoreReadBeforeAssign: false },
],
quotes: [2, 'single', 'avoid-escape'],
semi: [2, 'always'],
'space-unary-ops': [2, { words: false }],
strict: 0,
'valid-typeof': 2,
'wrap-iife': 0,
yoda: 0,
},
};

Просмотреть файл

@ -0,0 +1,19 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
// All rules are auto-loaded into this module.
const fs = require('fs');
const path = require('path');
fs.readdirSync(__dirname).forEach((name) => {
if (name !== 'index.js') {
exports[name.substr(0, name.length - 3)] = require(path.join(
__dirname,
name
));
}
});

Просмотреть файл

@ -0,0 +1,7 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
module.exports = {
extends: ['plugin:fxa/default', 'prettier'],
};

Просмотреть файл

@ -0,0 +1,15 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
module.exports = {
extends: 'plugin:fxa/recommended',
rules: {
'no-console': 'off',
'fxa/async-crypto-random': 'error',
'fxa/no-new-buffer': 'error',
},
};

Просмотреть файл

@ -0,0 +1,10 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
module.exports = {
configs: require('./configs'),
rules: require('./rules'),
};

Просмотреть файл

@ -0,0 +1,27 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
module.exports = {
create(context) {
return {
CallExpression(node) {
const callee = node.callee;
if (
callee.object &&
callee.object.name === 'crypto' &&
callee.property &&
callee.property.name === 'randomBytes' &&
node.arguments.length === 1
) {
context.report({
node: node,
message: 'Pass a callback to crypto.randomBytes().',
});
}
},
};
},
};

Просмотреть файл

@ -0,0 +1,19 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
// All rules are auto-loaded into this module.
const fs = require('fs');
const path = require('path');
fs.readdirSync(__dirname).forEach((name) => {
if (name !== 'index.js') {
exports[name.substr(0, name.length - 3)] = require(path.join(
__dirname,
name
));
}
});

Просмотреть файл

@ -0,0 +1,70 @@
/*
Borrowed from https://github.com/lo1tuma/eslint-plugin-mocha/tree/master/lib
We cannot directly depend on that package due to lack of support for that in ESLint: https://github.com/eslint/rfcs/pull/5
*/
'use strict';
const { getAdditionalTestFunctions } = require('../util/settings');
const astUtils = require('../util/ast');
module.exports = function (context) {
let mochaTestFunctions = [
'it',
'describe',
'suite',
'test',
'context',
'specify',
];
const settings = context.settings;
const additionalTestFunctions = getAdditionalTestFunctions(settings);
mochaTestFunctions = mochaTestFunctions.concat(additionalTestFunctions);
function matchesMochaTestFunction(object) {
const name = astUtils.getNodeName(object);
return mochaTestFunctions.indexOf(name) !== -1;
}
function isPropertyNamedOnly(property) {
return property && astUtils.getPropertyName(property) === 'only';
}
function isCallToMochasOnlyFunction(callee) {
return (
callee.type === 'MemberExpression' &&
matchesMochaTestFunction(callee.object) &&
isPropertyNamedOnly(callee.property)
);
}
return {
CallExpression(node) {
const callee = node.callee;
if (callee && isCallToMochasOnlyFunction(callee)) {
context.report({
node: callee.property,
message: 'Unexpected exclusive mocha test.',
});
}
},
};
};
module.exports.schema = [
{
type: 'object',
properties: {
additionalTestFunctions: {
type: 'array',
items: {
type: 'string',
},
minItems: 1,
uniqueItems: true,
},
},
},
];

Просмотреть файл

@ -0,0 +1,28 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
function inferMethod(args) {
return args.length > 0 && typeof args[0].value === 'number'
? 'alloc'
: 'from';
}
module.exports = {
create(context) {
return {
NewExpression(node) {
const callee = node.callee;
const method = inferMethod(node.arguments);
if (callee && callee.name === 'Buffer') {
context.report({
node: node,
message: `\`new Buffer()\` is deprecated, use \`Buffer.${method}()\` instead.`,
});
}
},
};
},
};

Просмотреть файл

@ -0,0 +1,126 @@
/**
* Borrowed from https://github.com/lo1tuma/eslint-plugin-mocha/tree/master/lib
*
* We cannot directly depend on that package due to lack of support for that in
ESLint: https://github.com/eslint/rfcs/pull/5
*/
'use strict';
const R = require('ramda');
const isDefined = R.complement(R.isNil);
const isCallExpression = R.both(isDefined, R.propEq('type', 'CallExpression'));
const describeAliases = [
'describe',
'xdescribe',
'describe.only',
'describe.skip',
'context',
'xcontext',
'context.only',
'context.skip',
'suite',
'xsuite',
'suite.only',
'suite.skip',
];
const hooks = [
'before',
'after',
'beforeEach',
'afterEach',
'beforeAll',
'afterAll',
];
const testCaseNames = [
'it',
'it.only',
'it.skip',
'xit',
'test',
'test.only',
'test.skip',
'specify',
'specify.only',
'specify.skip',
'xspecify',
];
function getPropertyName(property) {
return property.name || property.value;
}
function getNodeName(node) {
if (node.type === 'MemberExpression') {
return `${getNodeName(node.object)}.${getPropertyName(node.property)}`;
}
return node.name;
}
function isDescribe(node, additionalSuiteNames) {
return (
isCallExpression(node) &&
describeAliases
.concat(additionalSuiteNames)
.indexOf(getNodeName(node.callee)) > -1
);
}
function isHookIdentifier(node) {
return node && node.type === 'Identifier' && hooks.indexOf(node.name) !== -1;
}
function isHookCall(node) {
return isCallExpression(node) && isHookIdentifier(node.callee);
}
function isTestCase(node) {
return (
isCallExpression(node) &&
testCaseNames.indexOf(getNodeName(node.callee)) > -1
);
}
function findReference(scope, node) {
const hasSameRangeAsNode = R.pathEq(['identifier', 'range'], node.range);
return R.find(hasSameRangeAsNode, scope.references);
}
function isShadowed(scope, identifier) {
const reference = findReference(scope, identifier);
return reference && reference.resolved && reference.resolved.defs.length > 0;
}
function isCallToShadowedReference(node, scope) {
const identifier =
node.callee.type === 'MemberExpression' ? node.callee.object : node.callee;
return isShadowed(scope, identifier);
}
function isMochaFunctionCall(node, scope) {
if (isCallToShadowedReference(node, scope)) {
return false;
}
return isTestCase(node) || isDescribe(node) || isHookCall(node);
}
function isStringLiteral(node) {
return node && node.type === 'Literal' && typeof node.value === 'string';
}
module.exports = {
isDescribe,
isHookIdentifier,
isTestCase,
getPropertyName,
getNodeName,
isMochaFunctionCall,
isHookCall,
isStringLiteral,
};

Просмотреть файл

@ -0,0 +1,22 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* eslint-env node*/
'use strict';
function settingFor(propertyName) {
return function (settings) {
const value = settings[`mocha/${propertyName}`];
const mochaSettings = settings.mocha || {};
return value || mochaSettings[propertyName] || [];
};
}
module.exports = {
getAdditionalTestFunctions: settingFor('additionalTestFunctions'),
additionalSuiteNames: settingFor('additionalSuiteNames'),
getAdditionalXFunctions: settingFor('additionalXFunctions'),
};

Просмотреть файл

@ -0,0 +1,30 @@
{
"name": "eslint-plugin-fxa",
"version": "2.0.2",
"description": "eslint plugin for Firefox Accounts",
"main": "lib/index.js",
"scripts": {
"test": "mocha"
},
"dependencies": {
"eslint": "6.6.0",
"eslint-config-prettier": "6.5.0",
"ramda": "^0.26.1"
},
"devDependencies": {
"mocha": "6.2.2"
},
"peerDependencies": {
"eslint": ">=6.6.0"
},
"repository": {
"type": "git",
"url": "git+https://github.com/mozilla/fxa.git"
},
"author": "Mozilla (https://mozilla.org)",
"license": "MPL-2.0",
"bugs": {
"url": "https://github.com/mozilla/fxa/issues"
},
"homepage": "https://github.com/mozilla/fxa"
}

Просмотреть файл

@ -0,0 +1,19 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const RuleTester = require('eslint').RuleTester;
const rule = require('../lib/rules/async-crypto-random');
const ruleTester = new RuleTester();
ruleTester.run('async-crypto-random', rule, {
valid: ['crypto.randomBytes(32, cb)'],
invalid: [
{
code: 'crypto.randomBytes(32)',
errors: [{ message: 'Pass a callback to crypto.randomBytes().' }],
},
],
});

Просмотреть файл

@ -0,0 +1,24 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const RuleTester = require('eslint').RuleTester;
const rule = require('../lib/rules/no-exclusive-tests');
const ruleTester = new RuleTester();
const fromError = {
message: 'Unexpected exclusive mocha test.',
};
ruleTester.run('no-exclusive-tests', rule, {
valid: [`it('test', function() { });`],
invalid: [
{
code: `it.only('test', function() { });`,
errors: [fromError],
},
],
});

Просмотреть файл

@ -0,0 +1,63 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const RuleTester = require('eslint').RuleTester;
const rule = require('../lib/rules/no-new-buffer');
const ruleTester = new RuleTester();
const allocError = {
message: '`new Buffer()` is deprecated, use `Buffer.alloc()` instead.',
};
const fromError = {
message: '`new Buffer()` is deprecated, use `Buffer.from()` instead.',
};
ruleTester.run('no-new-buffer', rule, {
valid: [
`buf = Buffer.from('buf')`,
`buf = Buffer.from('7468697320697320612074c3a97374', 'hex')`,
'buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])',
'buf = Buffer.alloc(10)',
],
invalid: [
{
code: 'buf = new Buffer()',
errors: [fromError],
},
{
code: `buf = new Buffer('buf')`,
errors: [fromError],
},
{
code: `buf = new Buffer('7468697320697320612074c3a97374', 'hex')`,
errors: [fromError],
},
{
code: 'buf = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])',
errors: [fromError],
},
{
code: 'buf = new Buffer(10)',
errors: [allocError],
},
{
code: `
ab = new ArrayBuffer(10);
buf = new Buffer(ab, 0, 2);
`,
errors: [fromError],
},
{
code: `
buf1 = new Buffer('buf');
buf2 = new Buffer(buf1);
`,
errors: [fromError, fromError],
},
],
});

Просмотреть файл

@ -28,7 +28,6 @@
"devDependencies": {
"audit-filter": "0.5.0",
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"fxa-shared": "workspace:*",
"npm-run-all": "4.1.5",
"pm2": "^5.3.0",

Просмотреть файл

@ -179,7 +179,6 @@
"esbuild": "^0.14.2",
"esbuild-register": "^3.2.0",
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"fxa-shared": "workspace:*",
"grunt": "^1.6.1",
"grunt-cli": "^1.4.3",

Просмотреть файл

@ -160,7 +160,6 @@
"esbuild": "^0.14.2",
"esbuild-register": "^3.2.0",
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"firefox-profile": "4.2.2",
"got": "11.8.5",
"grunt-ban-word": "0.1.1",

Просмотреть файл

@ -50,7 +50,6 @@
"audit-filter": "^0.5.0",
"chai": "^4.3.6",
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"fxa-shared": "workspace:*",
"grunt": "^1.6.1",
"grunt-cli": "^1.4.3",

Просмотреть файл

@ -40,7 +40,6 @@
"audit-filter": "^0.5.0",
"chai": "^4.3.6",
"eslint": "^8.19.0",
"eslint-plugin-fxa": "^2.0.2",
"fxa-shared": "workspace:*",
"mocha": "^10.0.0",
"nyc": "^15.1.0",

Просмотреть файл

@ -92,7 +92,6 @@
"browserslist": "^4.21.4",
"eslint": "^7.32.0",
"eslint-config-react-app": "^6.0.0",
"eslint-plugin-fxa": "^2.0.2",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-react": "^7.32.2",
"express-http-proxy": "^1.6.3",

Просмотреть файл

@ -47,7 +47,6 @@
"audit-filter": "^0.5.0",
"commander": "9.3.0",
"eslint": "^8.18.0",
"eslint-plugin-fxa": "^2.0.2",
"insist": "1.0.1",
"mocha": "^10.0.0",
"mocha-text-cov": "0.1.1",

Просмотреть файл

@ -132,7 +132,6 @@
"css-loader": "^3.6.0",
"eslint": "^7.32.0",
"eslint-config-react-app": "^6.0.0",
"eslint-plugin-fxa": "^2.0.2",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-react": "^7.32.2",
"fxa-shared": "workspace:*",

Просмотреть файл

@ -117,7 +117,6 @@
"esbuild": "^0.14.2",
"esbuild-register": "^3.2.0",
"eslint": "^7.32.0",
"eslint-plugin-fxa": "^2.0.2",
"jest": "27.5.1",
"jest-junit": "^15.0.0",
"jsdom": "20.0.0",

117
yarn.lock
Просмотреть файл

@ -14,7 +14,6 @@ __metadata:
convict: ^6.2.4
convict-format-with-validator: ^6.2.0
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
express: ^4.17.3
fxa-jwtool: ^0.7.2
ioredis: ^5.0.6
@ -17890,7 +17889,6 @@ __metadata:
convict-format-with-moment: ^6.2.0
convict-format-with-validator: ^6.2.0
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
express: ^4.17.3
fxa-shared: "workspace:*"
intel: 1.2.0
@ -23394,18 +23392,18 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-fxa@npm:^2.0.2":
version: 2.0.2
resolution: "eslint-plugin-fxa@npm:2.0.2"
"eslint-plugin-fxa@workspace:*, eslint-plugin-fxa@workspace:packages/eslint-plugin-fxa":
version: 0.0.0-use.local
resolution: "eslint-plugin-fxa@workspace:packages/eslint-plugin-fxa"
dependencies:
eslint: 6.6.0
eslint-config-prettier: 6.5.0
mocha: 6.2.2
ramda: ^0.26.1
peerDependencies:
eslint: ">=6.6.0"
checksum: cb4c8ac7079d2c9d6940da381d92e041dc51706b89bc55e41f19ff7f680245348ce4fc41f6045ac6a64975b4564036df49415fa2e73dcb6e719b1c36fb650542
languageName: node
linkType: hard
languageName: unknown
linkType: soft
"eslint-plugin-import@npm:^2.25.2":
version: 2.25.3
@ -25407,7 +25405,6 @@ __metadata:
client-sessions: 0.8.x
ejs: ^3.1.6
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
express: ^4.17.3
fxa-shared: "workspace:*"
morgan: ^1.10.0
@ -26021,7 +26018,6 @@ fsevents@~2.1.1:
esbuild: ^0.14.2
esbuild-register: ^3.2.0
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
fxa-customs-server: "workspace:*"
fxa-geodb: "workspace:*"
fxa-jwtool: ^0.7.2
@ -26169,7 +26165,6 @@ fsevents@~2.1.1:
esbuild: ^0.14.2
esbuild-register: ^3.2.0
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
expose-loader: 1.0.3
express: ^4.17.3
extract-loader: 5.1.0
@ -26311,7 +26306,6 @@ fsevents@~2.1.1:
dedent: ^0.7.0
deep-equal: 2.2.0
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
fxa-shared: "workspace:*"
grunt: ^1.6.1
grunt-cli: ^1.4.3
@ -26435,7 +26429,6 @@ fsevents@~2.1.1:
chai: ^4.3.6
cron: 2.2.0
eslint: ^8.19.0
eslint-plugin-fxa: ^2.0.2
fxa-shared: "workspace:*"
maxmind: ^4.3.6
mocha: ^10.0.0
@ -26608,7 +26601,6 @@ fsevents@~2.1.1:
dayjs: ^1.11.5
eslint: ^7.32.0
eslint-config-react-app: ^6.0.0
eslint-plugin-fxa: ^2.0.2
eslint-plugin-jest: ^27.2.1
eslint-plugin-react: ^7.32.2
express: ^4.17.3
@ -26690,7 +26682,6 @@ fsevents@~2.1.1:
convict-format-with-moment: ^6.2.0
convict-format-with-validator: ^6.2.0
eslint: ^8.18.0
eslint-plugin-fxa: ^2.0.2
fxa-shared: "workspace:*"
insist: 1.0.1
joi: ^17.8.3
@ -26827,7 +26818,6 @@ fsevents@~2.1.1:
css-loader: ^3.6.0
eslint: ^7.32.0
eslint-config-react-app: ^6.0.0
eslint-plugin-fxa: ^2.0.2
eslint-plugin-jest: ^27.2.1
eslint-plugin-react: ^7.32.2
fxa-auth-client: "workspace:*"
@ -26936,7 +26926,6 @@ fsevents@~2.1.1:
esbuild: ^0.14.2
esbuild-register: ^3.2.0
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
express: ^4.17.3
find-up: ^5.0.0
generic-pool: ^3.8.2
@ -26984,7 +26973,7 @@ fsevents@~2.1.1:
dependencies:
diffparser: ^2.0.1
eslint: ^7.32.0
eslint-plugin-fxa: ^2.0.2
eslint-plugin-fxa: "workspace:*"
eslint-plugin-jest: ^27.2.1
eslint-plugin-react: ^7.32.2
husky: ^4.2.5
@ -34753,6 +34742,15 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"log-symbols@npm:2.2.0, log-symbols@npm:^2.2.0":
version: 2.2.0
resolution: "log-symbols@npm:2.2.0"
dependencies:
chalk: ^2.0.1
checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8
languageName: node
linkType: hard
"log-symbols@npm:3.0.0":
version: 3.0.0
resolution: "log-symbols@npm:3.0.0"
@ -34772,15 +34770,6 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"log-symbols@npm:^2.2.0":
version: 2.2.0
resolution: "log-symbols@npm:2.2.0"
dependencies:
chalk: ^2.0.1
checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8
languageName: node
linkType: hard
"log-update@npm:^4.0.0":
version: 4.0.0
resolution: "log-update@npm:4.0.0"
@ -36786,6 +36775,40 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"mocha@npm:6.2.2":
version: 6.2.2
resolution: "mocha@npm:6.2.2"
dependencies:
ansi-colors: 3.2.3
browser-stdout: 1.3.1
debug: 3.2.6
diff: 3.5.0
escape-string-regexp: 1.0.5
find-up: 3.0.0
glob: 7.1.3
growl: 1.10.5
he: 1.2.0
js-yaml: 3.13.1
log-symbols: 2.2.0
minimatch: 3.0.4
mkdirp: 0.5.1
ms: 2.1.1
node-environment-flags: 1.0.5
object.assign: 4.1.0
strip-json-comments: 2.0.1
supports-color: 6.0.0
which: 1.3.1
wide-align: 1.1.3
yargs: 13.3.0
yargs-parser: 13.1.1
yargs-unparser: 1.6.0
bin:
_mocha: ./bin/_mocha
mocha: ./bin/mocha
checksum: 0f05f3f19408d9b4d594ea789bc5f7f348a8e2b1f7589fc6da37e080a4c299b7888efefb91159d6aa09fbc4deca609d6e9ee81b23ed3f18ba1e1cc3a90ba3e45
languageName: node
linkType: hard
"mocha@npm:^10.0.0":
version: 10.0.0
resolution: "mocha@npm:10.0.0"
@ -37430,6 +37453,16 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"node-environment-flags@npm:1.0.5":
version: 1.0.5
resolution: "node-environment-flags@npm:1.0.5"
dependencies:
object.getownpropertydescriptors: ^2.0.3
semver: ^5.7.0
checksum: 8c7ea6b693ca83cf5dc2d23660bfdb8bb06c2b7c0ce9226774ba9cd2d370d6977ca004577dcb9df6bd334f22ef9ab0882fb7e4e7fb0645ccd27967d7d93a62cd
languageName: node
linkType: hard
"node-environment-flags@npm:1.0.6":
version: 1.0.6
resolution: "node-environment-flags@npm:1.0.6"
@ -51298,7 +51331,17 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2":
"yargs-parser@npm:13.1.1":
version: 13.1.1
resolution: "yargs-parser@npm:13.1.1"
dependencies:
camelcase: ^5.0.0
decamelize: ^1.2.0
checksum: fa5fd27736aa423dc9a114d160dae94625f7faf19c252b8c91ac0197be9715d1dbc9b98fda893f75f182111fb6c3c0ce60c631b73859dd1a06bec07cddfb98f4
languageName: node
linkType: hard
"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.1, yargs-parser@npm:^13.1.2":
version: 13.1.2
resolution: "yargs-parser@npm:13.1.2"
dependencies:
@ -51386,6 +51429,24 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
"yargs@npm:13.3.0":
version: 13.3.0
resolution: "yargs@npm:13.3.0"
dependencies:
cliui: ^5.0.0
find-up: ^3.0.0
get-caller-file: ^2.0.1
require-directory: ^2.1.1
require-main-filename: ^2.0.0
set-blocking: ^2.0.0
string-width: ^3.0.0
which-module: ^2.0.0
y18n: ^4.0.0
yargs-parser: ^13.1.1
checksum: 50aac9a7248ecbd9b5a6dd93010696e4847a3c9e23ae162d6e0caf10b236a0a90b461abaeab7678ded83dbd118538a331b4ac6fc7f5d22ec650b2e77e6403d5c
languageName: node
linkType: hard
"yargs@npm:13.3.2, yargs@npm:^13.3.0, yargs@npm:^13.3.2":
version: 13.3.2
resolution: "yargs@npm:13.3.2"