From 7d411920f69183ca5ea626163d5f94ddcc1fc0f0 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sun, 6 Dec 2020 10:11:33 -0500 Subject: [PATCH] tools: update ESLint to 7.15.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update ESLint to 7.15.0 PR-URL: https://github.com/nodejs/node/pull/36411 Reviewed-By: Rich Trott Reviewed-By: Michaël Zasso Reviewed-By: Luigi Pinca Reviewed-By: Antoine du Hamel Reviewed-By: James M Snell Reviewed-By: Daijiro Wachi --- tools/node_modules/eslint/lib/rules/index.js | 1 + .../lib/rules/no-unsafe-optional-chaining.js | 205 +++++++++ .../node_modules/eslint/lib/rules/one-var.js | 8 +- .../lib/cascading-config-array-factory.js | 3 +- .../lib/config-array/ignore-pattern.js | 2 +- .../@eslint/eslintrc/package.json | 9 +- .../eslint/node_modules/espree/README.md | 10 +- .../eslint/node_modules/espree/package.json | 4 +- .../node_modules/file-entry-cache/cache.js | 184 ++++---- .../file-entry-cache/changelog.md | 74 +-- .../file-entry-cache/package.json | 50 +- .../eslint/node_modules/flat-cache/README.md | 2 +- .../node_modules/flat-cache/changelog.md | 252 ++++++----- .../eslint/node_modules/flat-cache/del.js | 13 - .../node_modules/flat-cache/package.json | 53 +-- .../flat-cache/{ => src}/cache.js | 122 ++--- .../eslint/node_modules/flat-cache/src/del.js | 13 + .../node_modules/flat-cache/src/utils.js | 44 ++ .../eslint/node_modules/flat-cache/utils.js | 39 -- .../eslint/node_modules/flatted/LICENSE | 2 +- .../eslint/node_modules/flatted/README.md | 12 +- .../eslint/node_modules/flatted/cjs/index.js | 180 ++++---- .../node_modules/flatted/cjs/package.json | 1 + .../eslint/node_modules/flatted/es.js | 2 + .../eslint/node_modules/flatted/esm/index.js | 179 ++++---- .../eslint/node_modules/flatted/flatted.jpg | Bin 0 -> 48502 bytes .../eslint/node_modules/flatted/index.js | 210 ++++----- .../eslint/node_modules/flatted/min.js | 4 +- .../eslint/node_modules/flatted/package.json | 37 +- .../node_modules/flatted/php/flatted.php | 174 +++++++ .../eslint/node_modules/flatted/php/test.php | 118 +++++ .../eslint/node_modules/lru-cache/LICENSE | 15 + .../eslint/node_modules/lru-cache/README.md | 166 +++++++ .../eslint/node_modules/lru-cache/index.js | 334 ++++++++++++++ .../node_modules/lru-cache/package.json | 46 ++ .../eslint/node_modules/minimist/LICENSE | 18 - .../eslint/node_modules/minimist/index.js | 245 ---------- .../eslint/node_modules/minimist/package.json | 50 -- .../node_modules/minimist/readme.markdown | 95 ---- .../eslint/node_modules/mkdirp/LICENSE | 21 - .../eslint/node_modules/mkdirp/bin/cmd.js | 33 -- .../eslint/node_modules/mkdirp/bin/usage.txt | 12 - .../eslint/node_modules/mkdirp/index.js | 99 ---- .../eslint/node_modules/mkdirp/package.json | 46 -- .../node_modules/mkdirp/readme.markdown | 100 ---- .../eslint/node_modules/rimraf/bin.js | 64 ++- .../eslint/node_modules/rimraf/package.json | 7 +- .../eslint/node_modules/rimraf/rimraf.js | 154 +++---- .../node_modules/semver/classes/comparator.js | 8 +- .../node_modules/semver/classes/range.js | 63 ++- .../node_modules/semver/classes/semver.js | 9 +- .../node_modules/semver/functions/parse.js | 8 +- .../semver/internal/parse-options.js | 11 + .../eslint/node_modules/semver/package.json | 5 +- .../node_modules/semver/ranges/min-version.js | 7 +- .../node_modules/semver/ranges/outside.js | 2 +- .../node_modules/semver/ranges/subset.js | 15 +- .../eslint/node_modules/write/LICENSE | 21 - .../eslint/node_modules/write/README.md | 178 -------- .../eslint/node_modules/write/index.js | 160 ------- .../eslint/node_modules/write/package.json | 88 ---- .../eslint/node_modules/yallist/LICENSE | 15 + .../eslint/node_modules/yallist/README.md | 204 +++++++++ .../eslint/node_modules/yallist/iterator.js | 8 + .../eslint/node_modules/yallist/package.json | 39 ++ .../eslint/node_modules/yallist/yallist.js | 426 ++++++++++++++++++ tools/node_modules/eslint/package.json | 8 +- 67 files changed, 2740 insertions(+), 2047 deletions(-) create mode 100644 tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js delete mode 100644 tools/node_modules/eslint/node_modules/flat-cache/del.js rename tools/node_modules/eslint/node_modules/flat-cache/{ => src}/cache.js (58%) create mode 100644 tools/node_modules/eslint/node_modules/flat-cache/src/del.js create mode 100644 tools/node_modules/eslint/node_modules/flat-cache/src/utils.js delete mode 100644 tools/node_modules/eslint/node_modules/flat-cache/utils.js create mode 100644 tools/node_modules/eslint/node_modules/flatted/cjs/package.json create mode 100644 tools/node_modules/eslint/node_modules/flatted/es.js create mode 100644 tools/node_modules/eslint/node_modules/flatted/flatted.jpg create mode 100644 tools/node_modules/eslint/node_modules/flatted/php/flatted.php create mode 100644 tools/node_modules/eslint/node_modules/flatted/php/test.php create mode 100644 tools/node_modules/eslint/node_modules/lru-cache/LICENSE create mode 100644 tools/node_modules/eslint/node_modules/lru-cache/README.md create mode 100644 tools/node_modules/eslint/node_modules/lru-cache/index.js create mode 100644 tools/node_modules/eslint/node_modules/lru-cache/package.json delete mode 100644 tools/node_modules/eslint/node_modules/minimist/LICENSE delete mode 100644 tools/node_modules/eslint/node_modules/minimist/index.js delete mode 100644 tools/node_modules/eslint/node_modules/minimist/package.json delete mode 100644 tools/node_modules/eslint/node_modules/minimist/readme.markdown delete mode 100644 tools/node_modules/eslint/node_modules/mkdirp/LICENSE delete mode 100755 tools/node_modules/eslint/node_modules/mkdirp/bin/cmd.js delete mode 100644 tools/node_modules/eslint/node_modules/mkdirp/bin/usage.txt delete mode 100644 tools/node_modules/eslint/node_modules/mkdirp/index.js delete mode 100644 tools/node_modules/eslint/node_modules/mkdirp/package.json delete mode 100644 tools/node_modules/eslint/node_modules/mkdirp/readme.markdown create mode 100644 tools/node_modules/eslint/node_modules/semver/internal/parse-options.js delete mode 100644 tools/node_modules/eslint/node_modules/write/LICENSE delete mode 100644 tools/node_modules/eslint/node_modules/write/README.md delete mode 100644 tools/node_modules/eslint/node_modules/write/index.js delete mode 100644 tools/node_modules/eslint/node_modules/write/package.json create mode 100644 tools/node_modules/eslint/node_modules/yallist/LICENSE create mode 100644 tools/node_modules/eslint/node_modules/yallist/README.md create mode 100644 tools/node_modules/eslint/node_modules/yallist/iterator.js create mode 100644 tools/node_modules/eslint/node_modules/yallist/package.json create mode 100644 tools/node_modules/eslint/node_modules/yallist/yallist.js diff --git a/tools/node_modules/eslint/lib/rules/index.js b/tools/node_modules/eslint/lib/rules/index.js index 84f3480df2686a..35af38fd108ff5 100644 --- a/tools/node_modules/eslint/lib/rules/index.js +++ b/tools/node_modules/eslint/lib/rules/index.js @@ -218,6 +218,7 @@ module.exports = new LazyLoadingRuleMap(Object.entries({ "no-unreachable-loop": () => require("./no-unreachable-loop"), "no-unsafe-finally": () => require("./no-unsafe-finally"), "no-unsafe-negation": () => require("./no-unsafe-negation"), + "no-unsafe-optional-chaining": () => require("./no-unsafe-optional-chaining"), "no-unused-expressions": () => require("./no-unused-expressions"), "no-unused-labels": () => require("./no-unused-labels"), "no-unused-vars": () => require("./no-unused-vars"), diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js b/tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js new file mode 100644 index 00000000000000..2eafc1ad8f108b --- /dev/null +++ b/tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js @@ -0,0 +1,205 @@ +/** + * @fileoverview Rule to disallow unsafe optional chaining + * @author Yeon JuAn + */ + +"use strict"; + +const UNSAFE_ARITHMETIC_OPERATORS = new Set(["+", "-", "/", "*", "%", "**"]); +const UNSAFE_ASSIGNMENT_OPERATORS = new Set(["+=", "-=", "/=", "*=", "%=", "**="]); +const UNSAFE_RELATIONAL_OPERATORS = new Set(["in", "instanceof"]); + +/** + * Checks whether a node is a destructuring pattern or not + * @param {ASTNode} node node to check + * @returns {boolean} `true` if a node is a destructuring pattern, otherwise `false` + */ +function isDestructuringPattern(node) { + return node.type === "ObjectPattern" || node.type === "ArrayPattern"; +} + +module.exports = { + meta: { + type: "problem", + + docs: { + description: "disallow use of optional chaining in contexts where the `undefined` value is not allowed", + category: "Possible Errors", + recommended: false, + url: "https://eslint.org/docs/rules/no-unsafe-optional-chaining" + }, + schema: [{ + type: "object", + properties: { + disallowArithmeticOperators: { + type: "boolean", + default: false + } + }, + additionalProperties: false + }], + fixable: null, + messages: { + unsafeOptionalChain: "Unsafe usage of optional chaining. If it short-circuits with 'undefined' the evaluation will throw TypeError.", + unsafeArithmetic: "Unsafe arithmetic operation on optional chaining. It can result in NaN." + } + }, + + create(context) { + const options = context.options[0] || {}; + const disallowArithmeticOperators = (options.disallowArithmeticOperators) || false; + + /** + * Reports unsafe usage of optional chaining + * @param {ASTNode} node node to report + * @returns {void} + */ + function reportUnsafeUsage(node) { + context.report({ + messageId: "unsafeOptionalChain", + node + }); + } + + /** + * Reports unsafe arithmetic operation on optional chaining + * @param {ASTNode} node node to report + * @returns {void} + */ + function reportUnsafeArithmetic(node) { + context.report({ + messageId: "unsafeArithmetic", + node + }); + } + + /** + * Checks and reports if a node can short-circuit with `undefined` by optional chaining. + * @param {ASTNode} [node] node to check + * @param {Function} reportFunc report function + * @returns {void} + */ + function checkUndefinedShortCircuit(node, reportFunc) { + if (!node) { + return; + } + switch (node.type) { + case "LogicalExpression": + if (node.operator === "||" || node.operator === "??") { + checkUndefinedShortCircuit(node.right, reportFunc); + } else if (node.operator === "&&") { + checkUndefinedShortCircuit(node.left, reportFunc); + checkUndefinedShortCircuit(node.right, reportFunc); + } + break; + case "SequenceExpression": + checkUndefinedShortCircuit( + node.expressions[node.expressions.length - 1], + reportFunc + ); + break; + case "ConditionalExpression": + checkUndefinedShortCircuit(node.consequent, reportFunc); + checkUndefinedShortCircuit(node.alternate, reportFunc); + break; + case "AwaitExpression": + checkUndefinedShortCircuit(node.argument, reportFunc); + break; + case "ChainExpression": + reportFunc(node); + break; + default: + break; + } + } + + /** + * Checks unsafe usage of optional chaining + * @param {ASTNode} node node to check + * @returns {void} + */ + function checkUnsafeUsage(node) { + checkUndefinedShortCircuit(node, reportUnsafeUsage); + } + + /** + * Checks unsafe arithmetic operations on optional chaining + * @param {ASTNode} node node to check + * @returns {void} + */ + function checkUnsafeArithmetic(node) { + checkUndefinedShortCircuit(node, reportUnsafeArithmetic); + } + + return { + "AssignmentExpression, AssignmentPattern"(node) { + if (isDestructuringPattern(node.left)) { + checkUnsafeUsage(node.right); + } + }, + "ClassDeclaration, ClassExpression"(node) { + checkUnsafeUsage(node.superClass); + }, + CallExpression(node) { + if (!node.optional) { + checkUnsafeUsage(node.callee); + } + }, + NewExpression(node) { + checkUnsafeUsage(node.callee); + }, + VariableDeclarator(node) { + if (isDestructuringPattern(node.id)) { + checkUnsafeUsage(node.init); + } + }, + MemberExpression(node) { + if (!node.optional) { + checkUnsafeUsage(node.object); + } + }, + TaggedTemplateExpression(node) { + checkUnsafeUsage(node.tag); + }, + ForOfStatement(node) { + checkUnsafeUsage(node.right); + }, + SpreadElement(node) { + if (node.parent && node.parent.type !== "ObjectExpression") { + checkUnsafeUsage(node.argument); + } + }, + BinaryExpression(node) { + if (UNSAFE_RELATIONAL_OPERATORS.has(node.operator)) { + checkUnsafeUsage(node.right); + } + if ( + disallowArithmeticOperators && + UNSAFE_ARITHMETIC_OPERATORS.has(node.operator) + ) { + checkUnsafeArithmetic(node.right); + checkUnsafeArithmetic(node.left); + } + }, + WithStatement(node) { + checkUnsafeUsage(node.object); + }, + UnaryExpression(node) { + if ( + disallowArithmeticOperators && + UNSAFE_ARITHMETIC_OPERATORS.has(node.operator) + ) { + checkUnsafeArithmetic(node.argument); + } + }, + AssignmentExpression(node) { + if ( + disallowArithmeticOperators && + UNSAFE_ASSIGNMENT_OPERATORS.has(node.operator) + ) { + checkUnsafeArithmetic(node.right); + } + } + }; + } +}; diff --git a/tools/node_modules/eslint/lib/rules/one-var.js b/tools/node_modules/eslint/lib/rules/one-var.js index c31a0d2b13c187..b370c6d5e19858 100644 --- a/tools/node_modules/eslint/lib/rules/one-var.js +++ b/tools/node_modules/eslint/lib/rules/one-var.js @@ -314,12 +314,14 @@ module.exports = { return null; } + const exportPlacement = declaration.parent.type === "ExportNamedDeclaration" ? "export " : ""; + /* * `var x,y` * tokenAfterDeclarator ^^ afterComma */ if (afterComma.range[0] === tokenAfterDeclarator.range[1]) { - return fixer.replaceText(tokenAfterDeclarator, `; ${declaration.kind} `); + return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind} `); } /* @@ -341,11 +343,11 @@ module.exports = { return fixer.replaceTextRange( [tokenAfterDeclarator.range[0], lastComment.range[0]], - `;${sourceCode.text.slice(tokenAfterDeclarator.range[1], lastComment.range[0])}${declaration.kind} ` + `;${sourceCode.text.slice(tokenAfterDeclarator.range[1], lastComment.range[0])}${exportPlacement}${declaration.kind} ` ); } - return fixer.replaceText(tokenAfterDeclarator, `; ${declaration.kind}`); + return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind}`); }).filter(x => x); } diff --git a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js index 147c4d1e151d6c..c991c24b6070f3 100644 --- a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js +++ b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js @@ -256,7 +256,8 @@ class CascadingConfigArrayFactory { rulePaths, specificConfigPath, useEslintrc, - builtInRules + builtInRules, + loadRules }); } diff --git a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js index 6eaec4258e1ae4..4c16278ee808f8 100644 --- a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js +++ b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js @@ -36,7 +36,7 @@ const assert = require("assert"); const path = require("path"); const ignore = require("ignore"); -const debug = require("debug")("eslint:ignore-pattern"); +const debug = require("debug")("eslintrc:ignore-pattern"); /** @typedef {ReturnType} Ignore */ diff --git a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json index 425193aa3971ae..e33d83420dc0b7 100644 --- a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json +++ b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json @@ -27,7 +27,10 @@ "eslint-plugin-jsdoc": "^22.1.0", "eslint-plugin-node": "^11.1.0", "eslint-release": "^3.1.2", - "mocha": "^8.1.1" + "fs-teardown": "^0.1.0", + "mocha": "^8.1.1", + "sinon": "^9.2.0", + "temp-dir": "^2.0.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" @@ -60,7 +63,7 @@ "generate-release": "eslint-generate-release", "lint": "eslint .", "publish-release": "eslint-publish-release", - "test": "mocha -R progress -c tests/lib/shared" + "test": "mocha -R progress -c 'tests/lib/**/*.js'" }, - "version": "0.2.1" + "version": "0.2.2" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/espree/README.md b/tools/node_modules/eslint/node_modules/espree/README.md index e7b5064cb32456..72d88f83315422 100644 --- a/tools/node_modules/eslint/node_modules/espree/README.md +++ b/tools/node_modules/eslint/node_modules/espree/README.md @@ -27,10 +27,10 @@ const ast = espree.parse(code); ### `parse()` -`parse` parses the given code and returns a abstract syntax tree (AST). It takes two paramenter. +`parse` parses the given code and returns a abstract syntax tree (AST). It takes two parameters. - `code` [string]() - the code which needs to be parsed. -- `options (Optional)` [Object]() - read more about this [here](#options) +- `options (Optional)` [Object]() - read more about this [here](#options). ```javascript const espree = require("espree"); @@ -71,10 +71,10 @@ Node { ### `tokenize()` -`tokenize` returns the tokens of a give code. It takes two paramenter. +`tokenize` returns the tokens of a given code. It takes two parameters. - `code` [string]() - the code which needs to be parsed. -- `options (Optional)` [Object]() - read more about this [here](#options) +- `options (Optional)` [Object]() - read more about this [here](#options). Even if `options` is empty or undefined or `options.tokens` is `false`, it assigns it to `true` in order to get the `tokens` array @@ -112,7 +112,7 @@ Returns the latest ECMAScript supported by `espree` ### `supportedEcmaVersions` -Returns an array of all supported ECMAScript version +Returns an array of all supported ECMAScript versions ## Options diff --git a/tools/node_modules/eslint/node_modules/espree/package.json b/tools/node_modules/eslint/node_modules/espree/package.json index 433e3ef73990a9..9fd6ee14a34c8f 100644 --- a/tools/node_modules/eslint/node_modules/espree/package.json +++ b/tools/node_modules/eslint/node_modules/espree/package.json @@ -9,7 +9,7 @@ "bundleDependencies": false, "dependencies": { "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, "deprecated": false, @@ -68,5 +68,5 @@ "sync-docs": "node Makefile.js docs", "test": "npm run-script lint && node Makefile.js test" }, - "version": "7.3.0" + "version": "7.3.1" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/file-entry-cache/cache.js b/tools/node_modules/eslint/node_modules/file-entry-cache/cache.js index ebc6386d1c8671..0aabd7a92d467c 100644 --- a/tools/node_modules/eslint/node_modules/file-entry-cache/cache.js +++ b/tools/node_modules/eslint/node_modules/file-entry-cache/cache.js @@ -1,31 +1,31 @@ -var path = require( 'path' ); -var crypto = require( 'crypto' ); +var path = require('path'); +var crypto = require('crypto'); module.exports = { - createFromFile: function ( filePath, useChecksum ) { - var fname = path.basename( filePath ); - var dir = path.dirname( filePath ); - return this.create( fname, dir, useChecksum ); + createFromFile: function (filePath, useChecksum) { + var fname = path.basename(filePath); + var dir = path.dirname(filePath); + return this.create(fname, dir, useChecksum); }, - create: function ( cacheId, _path, useChecksum ) { - var fs = require( 'fs' ); - var flatCache = require( 'flat-cache' ); - var cache = flatCache.load( cacheId, _path ); - var normalizedEntries = { }; + create: function (cacheId, _path, useChecksum) { + var fs = require('fs'); + var flatCache = require('flat-cache'); + var cache = flatCache.load(cacheId, _path); + var normalizedEntries = {}; var removeNotFoundFiles = function removeNotFoundFiles() { const cachedEntries = cache.keys(); // remove not found entries - cachedEntries.forEach( function remover( fPath ) { + cachedEntries.forEach(function remover(fPath) { try { - fs.statSync( fPath ); + fs.statSync(fPath); } catch (err) { - if ( err.code === 'ENOENT' ) { - cache.removeKey( fPath ); + if (err.code === 'ENOENT') { + cache.removeKey(fPath); } } - } ); + }); }; removeNotFoundFiles(); @@ -43,11 +43,8 @@ module.exports = { * @param {Buffer} buffer buffer to calculate hash on * @return {String} content hash digest */ - getHash: function ( buffer ) { - return crypto - .createHash( 'md5' ) - .update( buffer ) - .digest( 'hex' ); + getHash: function (buffer) { + return crypto.createHash('md5').update(buffer).digest('hex'); }, /** @@ -56,8 +53,8 @@ module.exports = { * @param {String} file the filepath to check * @return {Boolean} wheter or not the file has changed */ - hasFileChanged: function ( file ) { - return this.getFileDescriptor( file ).changed; + hasFileChanged: function (file) { + return this.getFileDescriptor(file).changed; }, /** @@ -69,49 +66,49 @@ module.exports = { * @param {Array} files the files to analyze and compare to the previous seen files * @return {[type]} [description] */ - analyzeFiles: function ( files ) { + analyzeFiles: function (files) { var me = this; - files = files || [ ]; + files = files || []; var res = { changedFiles: [], notFoundFiles: [], - notChangedFiles: [] + notChangedFiles: [], }; - me.normalizeEntries( files ).forEach( function ( entry ) { - if ( entry.changed ) { - res.changedFiles.push( entry.key ); + me.normalizeEntries(files).forEach(function (entry) { + if (entry.changed) { + res.changedFiles.push(entry.key); return; } - if ( entry.notFound ) { - res.notFoundFiles.push( entry.key ); + if (entry.notFound) { + res.notFoundFiles.push(entry.key); return; } - res.notChangedFiles.push( entry.key ); - } ); + res.notChangedFiles.push(entry.key); + }); return res; }, - getFileDescriptor: function ( file ) { + getFileDescriptor: function (file) { var fstat; try { - fstat = fs.statSync( file ); + fstat = fs.statSync(file); } catch (ex) { - this.removeEntry( file ); + this.removeEntry(file); return { key: file, notFound: true, err: ex }; } - if ( useChecksum ) { - return this._getFileDescriptorUsingChecksum( file ); + if (useChecksum) { + return this._getFileDescriptorUsingChecksum(file); } - return this._getFileDescriptorUsingMtimeAndSize( file, fstat ); + return this._getFileDescriptorUsingMtimeAndSize(file, fstat); }, - _getFileDescriptorUsingMtimeAndSize: function ( file, fstat ) { - var meta = cache.getKey( file ); + _getFileDescriptorUsingMtimeAndSize: function (file, fstat) { + var meta = cache.getKey(file); var cacheExists = !!meta; var cSize = fstat.size; @@ -120,47 +117,47 @@ module.exports = { var isDifferentDate; var isDifferentSize; - if ( !meta ) { + if (!meta) { meta = { size: cSize, mtime: cTime }; } else { isDifferentDate = cTime !== meta.mtime; isDifferentSize = cSize !== meta.size; } - var nEntry = normalizedEntries[ file ] = { + var nEntry = (normalizedEntries[file] = { key: file, changed: !cacheExists || isDifferentDate || isDifferentSize, - meta: meta - }; + meta: meta, + }); return nEntry; }, - _getFileDescriptorUsingChecksum: function ( file ) { - var meta = cache.getKey( file ); + _getFileDescriptorUsingChecksum: function (file) { + var meta = cache.getKey(file); var cacheExists = !!meta; var contentBuffer; try { - contentBuffer = fs.readFileSync( file ); + contentBuffer = fs.readFileSync(file); } catch (ex) { contentBuffer = ''; } var isDifferent = true; - var hash = this.getHash( contentBuffer ); + var hash = this.getHash(contentBuffer); - if ( !meta ) { + if (!meta) { meta = { hash: hash }; } else { isDifferent = hash !== meta.hash; } - var nEntry = normalizedEntries[ file ] = { + var nEntry = (normalizedEntries[file] = { key: file, changed: !cacheExists || isDifferent, - meta: meta - }; + meta: meta, + }); return nEntry; }, @@ -173,15 +170,18 @@ module.exports = { * @param files {Array} the array of files to compare against the ones in the cache * @returns {Array} */ - getUpdatedFiles: function ( files ) { + getUpdatedFiles: function (files) { var me = this; - files = files || [ ]; - - return me.normalizeEntries( files ).filter( function ( entry ) { - return entry.changed; - } ).map( function ( entry ) { - return entry.key; - } ); + files = files || []; + + return me + .normalizeEntries(files) + .filter(function (entry) { + return entry.changed; + }) + .map(function (entry) { + return entry.key; + }); }, /** @@ -190,13 +190,13 @@ module.exports = { * @param files * @returns {*} */ - normalizeEntries: function ( files ) { - files = files || [ ]; + normalizeEntries: function (files) { + files = files || []; var me = this; - var nEntries = files.map( function ( file ) { - return me.getFileDescriptor( file ); - } ); + var nEntries = files.map(function (file) { + return me.getFileDescriptor(file); + }); //normalizeEntries = nEntries; return nEntries; @@ -209,9 +209,9 @@ module.exports = { * @method removeEntry * @param entryName */ - removeEntry: function ( entryName ) { - delete normalizedEntries[ entryName ]; - cache.removeKey( entryName ); + removeEntry: function (entryName) { + delete normalizedEntries[entryName]; + cache.removeKey(entryName); }, /** @@ -226,23 +226,23 @@ module.exports = { * remove the cache from the file and clear the memory cache */ destroy: function () { - normalizedEntries = { }; + normalizedEntries = {}; cache.destroy(); }, - _getMetaForFileUsingCheckSum: function ( cacheEntry ) { - var contentBuffer = fs.readFileSync( cacheEntry.key ); - var hash = this.getHash( contentBuffer ); - var meta = Object.assign( cacheEntry.meta, { hash: hash } ); + _getMetaForFileUsingCheckSum: function (cacheEntry) { + var contentBuffer = fs.readFileSync(cacheEntry.key); + var hash = this.getHash(contentBuffer); + var meta = Object.assign(cacheEntry.meta, { hash: hash }); return meta; }, - _getMetaForFileUsingMtimeAndSize: function ( cacheEntry ) { - var stat = fs.statSync( cacheEntry.key ); - var meta = Object.assign( cacheEntry.meta, { + _getMetaForFileUsingMtimeAndSize: function (cacheEntry) { + var stat = fs.statSync(cacheEntry.key); + var meta = Object.assign(cacheEntry.meta, { size: stat.size, - mtime: stat.mtime.getTime() - } ); + mtime: stat.mtime.getTime(), + }); return meta; }, @@ -250,37 +250,39 @@ module.exports = { * Sync the files and persist them to the cache * @method reconcile */ - reconcile: function ( noPrune ) { + reconcile: function (noPrune) { removeNotFoundFiles(); noPrune = typeof noPrune === 'undefined' ? true : noPrune; var entries = normalizedEntries; - var keys = Object.keys( entries ); + var keys = Object.keys(entries); - if ( keys.length === 0 ) { + if (keys.length === 0) { return; } var me = this; - keys.forEach( function ( entryName ) { - var cacheEntry = entries[ entryName ]; + keys.forEach(function (entryName) { + var cacheEntry = entries[entryName]; try { - var meta = useChecksum ? me._getMetaForFileUsingCheckSum( cacheEntry ) : me._getMetaForFileUsingMtimeAndSize( cacheEntry ); - cache.setKey( entryName, meta ); + var meta = useChecksum + ? me._getMetaForFileUsingCheckSum(cacheEntry) + : me._getMetaForFileUsingMtimeAndSize(cacheEntry); + cache.setKey(entryName, meta); } catch (err) { // if the file does not exists we don't save it // other errors are just thrown - if ( err.code !== 'ENOENT' ) { + if (err.code !== 'ENOENT') { throw err; } } - } ); + }); - cache.save( noPrune ); - } + cache.save(noPrune); + }, }; - } + }, }; diff --git a/tools/node_modules/eslint/node_modules/file-entry-cache/changelog.md b/tools/node_modules/eslint/node_modules/file-entry-cache/changelog.md index 52a86428d38980..deb47ec38c2016 100644 --- a/tools/node_modules/eslint/node_modules/file-entry-cache/changelog.md +++ b/tools/node_modules/eslint/node_modules/file-entry-cache/changelog.md @@ -1,14 +1,28 @@ # file-entry-cache - Changelog +## v6.0.0 +- **Refactoring** + - Align file-entry-cache with latest eslint - [4c6f1fb]( https://github.com/royriojas/file-entry-cache/commit/4c6f1fb ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:43:09 + + + - Upgrade deps - [8ab3257]( https://github.com/royriojas/file-entry-cache/commit/8ab3257 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:41:53 + + + - updated packages - [3dd4231]( https://github.com/royriojas/file-entry-cache/commit/3dd4231 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:29:37 + + + - Upgrade flat-cache to version 3 - [d7c60ef]( https://github.com/royriojas/file-entry-cache/commit/d7c60ef ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:18:04 + + ## v5.0.1 - **Bug Fixes** - - Fix missing checksum comparison from reconcile since now we use mtime and size by default. - [e858aa9]( https://github.com/royriojas/file-entry-cache/commit/e858aa9 ), [Roy Riojas](https://github.com/Roy Riojas), 04/02/2019 12:30:22 + - Fix missing checksum comparison from reconcile since now we use mtime and size by default. - [e858aa9]( https://github.com/royriojas/file-entry-cache/commit/e858aa9 ), [Roy Riojas](https://github.com/Roy Riojas), 04/02/2019 09:30:22 Old mode using checkSum can still be used by passing the `useCheckSum` parameter to the `create` or `createFromFile` methods. ## v5.0.0 - **Refactoring** - - Make checksum comparison optional - [b0f9ae0]( https://github.com/royriojas/file-entry-cache/commit/b0f9ae0 ), [Roy Riojas](https://github.com/Roy Riojas), 03/02/2019 21:17:39 + - Make checksum comparison optional - [b0f9ae0]( https://github.com/royriojas/file-entry-cache/commit/b0f9ae0 ), [Roy Riojas](https://github.com/Roy Riojas), 03/02/2019 18:17:39 To determine if a file has changed we were using the checksum in the newer versions, but eslint was relying on the old behavior where we use the mtime and file size to determine if a file changed. That's why we decided to make the checksum check optional. @@ -22,120 +36,120 @@ ## v4.0.0 - **Build Scripts Changes** - - use the same node versions eslint use - [563cfee]( https://github.com/royriojas/file-entry-cache/commit/563cfee ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 23:29:34 + - use the same node versions eslint use - [563cfee]( https://github.com/royriojas/file-entry-cache/commit/563cfee ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 20:29:34 - **Other changes** - - Remove object-assign dependency. - [d0f598e]( https://github.com/royriojas/file-entry-cache/commit/d0f598e ), [Corey Farrell](https://github.com/Corey Farrell), 08/01/2019 23:09:51 + - Remove object-assign dependency. - [d0f598e]( https://github.com/royriojas/file-entry-cache/commit/d0f598e ), [Corey Farrell](https://github.com/Corey Farrell), 08/01/2019 20:09:51 node.js >=4 is required so object-assign is no longer needed, the native Object.assign can be used instead. ## v3.0.0 - **Build Scripts Changes** - - Upgrade flat-cache dep to latest - [078b0df]( https://github.com/royriojas/file-entry-cache/commit/078b0df ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 21:54:40 + - Upgrade flat-cache dep to latest - [078b0df]( https://github.com/royriojas/file-entry-cache/commit/078b0df ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 18:54:40 - - Commit new package-lock.json file - [245fe62]( https://github.com/royriojas/file-entry-cache/commit/245fe62 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 20:56:21 + - Commit new package-lock.json file - [245fe62]( https://github.com/royriojas/file-entry-cache/commit/245fe62 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 17:56:21 - **Refactoring** - - add eslintrc file - [6dd32d8]( https://github.com/royriojas/file-entry-cache/commit/6dd32d8 ), [Roy Riojas](https://github.com/Roy Riojas), 22/08/2018 11:58:17 + - add eslintrc file - [6dd32d8]( https://github.com/royriojas/file-entry-cache/commit/6dd32d8 ), [Roy Riojas](https://github.com/Roy Riojas), 22/08/2018 09:58:17 - **Other changes** - - Move variable definition out of else block - [ea05441]( https://github.com/royriojas/file-entry-cache/commit/ea05441 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 25/04/2017 13:19:00 + - Move variable definition out of else block - [ea05441]( https://github.com/royriojas/file-entry-cache/commit/ea05441 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 25/04/2017 11:19:00 - - Add script and cmd to test hash/checksum performance - [7f60e0a]( https://github.com/royriojas/file-entry-cache/commit/7f60e0a ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 16:43:12 + - Add script and cmd to test hash/checksum performance - [7f60e0a]( https://github.com/royriojas/file-entry-cache/commit/7f60e0a ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 14:43:12 - - Calculate md5 hexdigest instead of Adler-32 checksum - [f9e5c69]( https://github.com/royriojas/file-entry-cache/commit/f9e5c69 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 16:43:12 + - Calculate md5 hexdigest instead of Adler-32 checksum - [f9e5c69]( https://github.com/royriojas/file-entry-cache/commit/f9e5c69 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 14:43:12 - - How to reproduce - [4edc2dc]( https://github.com/royriojas/file-entry-cache/commit/4edc2dc ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 15:49:32 + - How to reproduce - [4edc2dc]( https://github.com/royriojas/file-entry-cache/commit/4edc2dc ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 13:49:32 - - Test handling of removed files - [09d9ec5]( https://github.com/royriojas/file-entry-cache/commit/09d9ec5 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 19/04/2017 21:51:50 + - Test handling of removed files - [09d9ec5]( https://github.com/royriojas/file-entry-cache/commit/09d9ec5 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 19/04/2017 19:51:50 - - Use content checksum instead of mtime and fsize - [343b340]( https://github.com/royriojas/file-entry-cache/commit/343b340 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 19/04/2017 21:51:47 + - Use content checksum instead of mtime and fsize - [343b340]( https://github.com/royriojas/file-entry-cache/commit/343b340 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 19/04/2017 19:51:47 - **Revert** - - Revert "How to reproduce" - [4b4e54a]( https://github.com/royriojas/file-entry-cache/commit/4b4e54a ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 25/04/2017 13:15:36 + - Revert "How to reproduce" - [4b4e54a]( https://github.com/royriojas/file-entry-cache/commit/4b4e54a ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 25/04/2017 11:15:36 This reverts commit 4edc2dcec01574247bfc2e0a2fe26527332b7df3. ## v2.0.0 - **Features** - - do not persist and prune removed files from cache. Relates to [#2](https://github.com/royriojas/file-entry-cache/issues/2) - [408374d]( https://github.com/royriojas/file-entry-cache/commit/408374d ), [Roy Riojas](https://github.com/Roy Riojas), 16/08/2016 15:47:58 + - do not persist and prune removed files from cache. Relates to [#2](https://github.com/royriojas/file-entry-cache/issues/2) - [408374d]( https://github.com/royriojas/file-entry-cache/commit/408374d ), [Roy Riojas](https://github.com/Roy Riojas), 16/08/2016 13:47:58 ## v1.3.1 - **Build Scripts Changes** - - remove older node version - [0a26ac4]( https://github.com/royriojas/file-entry-cache/commit/0a26ac4 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 06:09:17 + - remove older node version - [0a26ac4]( https://github.com/royriojas/file-entry-cache/commit/0a26ac4 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 04:09:17 ## v1.3.0 - **Features** - - Add an option to not prune non visited keys. Closes [#2](https://github.com/royriojas/file-entry-cache/issues/2) - [b1a64db]( https://github.com/royriojas/file-entry-cache/commit/b1a64db ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 05:52:12 + - Add an option to not prune non visited keys. Closes [#2](https://github.com/royriojas/file-entry-cache/issues/2) - [b1a64db]( https://github.com/royriojas/file-entry-cache/commit/b1a64db ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 03:52:12 ## v1.2.4 - **Enhancements** - - Expose the flat-cache instance - [f34c557]( https://github.com/royriojas/file-entry-cache/commit/f34c557 ), [royriojas](https://github.com/royriojas), 23/09/2015 20:26:33 + - Expose the flat-cache instance - [f34c557]( https://github.com/royriojas/file-entry-cache/commit/f34c557 ), [royriojas](https://github.com/royriojas), 23/09/2015 18:26:33 ## v1.2.3 - **Build Scripts Changes** - - update flat-cache dep - [cc7b9ce]( https://github.com/royriojas/file-entry-cache/commit/cc7b9ce ), [royriojas](https://github.com/royriojas), 11/09/2015 18:04:44 + - update flat-cache dep - [cc7b9ce]( https://github.com/royriojas/file-entry-cache/commit/cc7b9ce ), [royriojas](https://github.com/royriojas), 11/09/2015 16:04:44 ## v1.2.2 - **Build Scripts Changes** - - Add changelogx section to package.json - [a3916ff]( https://github.com/royriojas/file-entry-cache/commit/a3916ff ), [royriojas](https://github.com/royriojas), 11/09/2015 18:00:26 + - Add changelogx section to package.json - [a3916ff]( https://github.com/royriojas/file-entry-cache/commit/a3916ff ), [royriojas](https://github.com/royriojas), 11/09/2015 16:00:26 ## v1.2.1 - **Build Scripts Changes** - - update flat-cache dep - [e49b0d4]( https://github.com/royriojas/file-entry-cache/commit/e49b0d4 ), [royriojas](https://github.com/royriojas), 11/09/2015 17:55:25 + - update flat-cache dep - [e49b0d4]( https://github.com/royriojas/file-entry-cache/commit/e49b0d4 ), [royriojas](https://github.com/royriojas), 11/09/2015 15:55:25 - **Other changes** - - Update dependencies Replaced lodash.assign with smaller object-assign Fixed tests for windows - [0ad3000]( https://github.com/royriojas/file-entry-cache/commit/0ad3000 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 17:44:18 + - Update dependencies Replaced lodash.assign with smaller object-assign Fixed tests for windows - [0ad3000]( https://github.com/royriojas/file-entry-cache/commit/0ad3000 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 15:44:18 ## v1.2.0 - **Features** - - analyzeFiles now returns also the files that were removed - [6ac2431]( https://github.com/royriojas/file-entry-cache/commit/6ac2431 ), [royriojas](https://github.com/royriojas), 04/09/2015 14:40:53 + - analyzeFiles now returns also the files that were removed - [6ac2431]( https://github.com/royriojas/file-entry-cache/commit/6ac2431 ), [royriojas](https://github.com/royriojas), 04/09/2015 12:40:53 ## v1.1.1 - **Features** - - Add method to check if a file hasChanged - [3640e2b]( https://github.com/royriojas/file-entry-cache/commit/3640e2b ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 07:33:32 + - Add method to check if a file hasChanged - [3640e2b]( https://github.com/royriojas/file-entry-cache/commit/3640e2b ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 05:33:32 ## v1.1.0 - **Features** - - Create the cache directly from a file path - [a23de61]( https://github.com/royriojas/file-entry-cache/commit/a23de61 ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 06:41:33 + - Create the cache directly from a file path - [a23de61]( https://github.com/royriojas/file-entry-cache/commit/a23de61 ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 04:41:33 - - Add a method to remove an entry from the filecache - [7af29fc]( https://github.com/royriojas/file-entry-cache/commit/7af29fc ), [Roy Riojas](https://github.com/Roy Riojas), 03/03/2015 02:25:32 + - Add a method to remove an entry from the filecache - [7af29fc]( https://github.com/royriojas/file-entry-cache/commit/7af29fc ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 23:25:32 - - cache module finished - [1f95544]( https://github.com/royriojas/file-entry-cache/commit/1f95544 ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 04:08:08 + - cache module finished - [1f95544]( https://github.com/royriojas/file-entry-cache/commit/1f95544 ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 01:08:08 - **Build Scripts Changes** - - set the version for the first release - [7472eaa]( https://github.com/royriojas/file-entry-cache/commit/7472eaa ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 04:29:54 + - set the version for the first release - [7472eaa]( https://github.com/royriojas/file-entry-cache/commit/7472eaa ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 01:29:54 - **Documentation** - - Updated documentation - [557358f]( https://github.com/royriojas/file-entry-cache/commit/557358f ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 04:29:29 + - Updated documentation - [557358f]( https://github.com/royriojas/file-entry-cache/commit/557358f ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 01:29:29 - **Other changes** - - Initial commit - [3d5f42b]( https://github.com/royriojas/file-entry-cache/commit/3d5f42b ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 00:58:29 + - Initial commit - [3d5f42b]( https://github.com/royriojas/file-entry-cache/commit/3d5f42b ), [Roy Riojas](https://github.com/Roy Riojas), 01/03/2015 21:58:29 diff --git a/tools/node_modules/eslint/node_modules/file-entry-cache/package.json b/tools/node_modules/eslint/node_modules/file-entry-cache/package.json index 9e8eee48a01360..8eb0f05ab8d2ea 100644 --- a/tools/node_modules/eslint/node_modules/file-entry-cache/package.json +++ b/tools/node_modules/eslint/node_modules/file-entry-cache/package.json @@ -20,30 +20,29 @@ "projectName": "file-entry-cache" }, "dependencies": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" }, "deprecated": false, "description": "Super simple cache for file metadata, useful for process that work o a given series of files and that only need to repeat the job on the changed ones since the previous run of the process", "devDependencies": { - "chai": "^3.2.0", - "changelogx": "3.0.0", - "commander": "^2.6.0", - "del": "^2.0.2", - "esbeautifier": "^4.2.11", - "eslinter": "^2.3.3", - "glob-expand": "^0.1.0", - "istanbul": "^0.3.6", - "mocha": "^2.1.0", - "precommit": "^1.1.5", - "prepush": "^3.1.4", - "proxyquire": "^1.3.1", - "sinon": "^1.12.2", - "sinon-chai": "^2.7.0", - "watch-run": "^1.2.1", - "write": "^0.3.1" + "chai": "^4.2.0", + "changelogx": "^5.0.6", + "del": "^6.0.0", + "eslint": "^7.13.0", + "eslint-config-prettier": "^6.15.0", + "eslint-plugin-mocha": "^8.0.0", + "eslint-plugin-prettier": "^3.1.4", + "glob-expand": "^0.2.1", + "istanbul": "^0.4.5", + "mocha": "^8.2.1", + "precommit": "^1.2.2", + "prepush": "^3.1.11", + "prettier": "^2.1.2", + "watch-run": "^1.2.5", + "write": "^2.0.0" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" }, "files": [ "cache.js" @@ -61,33 +60,30 @@ "main": "cache.js", "name": "file-entry-cache", "precommit": [ - "npm run verify" + "npm run eslint --silent" ], "prepush": [ - "npm run verify" + "npm run eslint --silent" ], "repository": { "type": "git", "url": "git+https://github.com/royriojas/file-entry-cache.git" }, "scripts": { - "beautify": "esbeautifier 'cache.js' 'test/**/*.js' 'perf.js'", - "beautify-check": "npm run beautify -- -k", + "autofix": "npm run eslint -- --fix", "bump-major": "npm run pre-v && npm version major -m 'BLD: Release v%s' && npm run post-v", "bump-minor": "npm run pre-v && npm version minor -m 'BLD: Release v%s' && npm run post-v", "bump-patch": "npm run pre-v && npm version patch -m 'BLD: Release v%s' && npm run post-v", "changelog": "changelogx -f markdown -o ./changelog.md", "cover": "istanbul cover test/runner.js html text-summary", "do-changelog": "npm run changelog && git add ./changelog.md && git commit -m 'DOC: Generate changelog' --no-verify", - "eslint": "eslinter 'cache.js' 'specs/**/*.js' 'perf.js'", + "eslint": "eslint --cache --cache-location=node_modules/.cache/ 'cache.js' 'test/**/*.js' 'perf.js'", "install-hooks": "prepush install && changelogx install-hook && precommit install", - "lint": "npm run beautify && npm run eslint", "perf": "node perf.js", "post-v": "npm run do-changelog && git push --no-verify && git push --tags --no-verify", "pre-v": "npm run test", - "test": "npm run verify --silent && mocha -R spec test/specs", - "verify": "npm run beautify-check && npm run eslint", + "test": "npm run eslint --silent && mocha -R spec test/specs", "watch": "watch-run -i -p 'test/specs/**/*.js' istanbul cover test/runner.js html text-summary" }, - "version": "5.0.1" + "version": "6.0.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/flat-cache/README.md b/tools/node_modules/eslint/node_modules/flat-cache/README.md index 1bc5d690d1a06f..03e256ac4b5658 100644 --- a/tools/node_modules/eslint/node_modules/flat-cache/README.md +++ b/tools/node_modules/eslint/node_modules/flat-cache/README.md @@ -2,7 +2,7 @@ > A stupidly simple key/value storage using files to persist the data [![NPM Version](http://img.shields.io/npm/v/flat-cache.svg?style=flat)](https://npmjs.org/package/flat-cache) -[![Build Status](http://img.shields.io/travis/royriojas/flat-cache.svg?style=flat)](https://travis-ci.org/royriojas/flat-cache) +[![Build Status](https://api.travis-ci.org/royriojas/flat-cache.svg?branch=master)](https://travis-ci.org/royriojas/flat-cache) ## install diff --git a/tools/node_modules/eslint/node_modules/flat-cache/changelog.md b/tools/node_modules/eslint/node_modules/flat-cache/changelog.md index 0bdcfd41d3d090..1ad0fdfd0e30a6 100644 --- a/tools/node_modules/eslint/node_modules/flat-cache/changelog.md +++ b/tools/node_modules/eslint/node_modules/flat-cache/changelog.md @@ -1,23 +1,113 @@ # flat-cache - Changelog +## v3.0.4 +- **Refactoring** + - add files by name to the list of exported files - [89a2698]( https://github.com/royriojas/flat-cache/commit/89a2698 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:35:39 + + +## v3.0.3 +- **Bug Fixes** + - Fix wrong eslint command - [f268e42]( https://github.com/royriojas/flat-cache/commit/f268e42 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:15:04 + + +## v3.0.2 +- **Refactoring** + - Update the files paths - [6983a80]( https://github.com/royriojas/flat-cache/commit/6983a80 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:58:39 + + + - Move code to src/ - [18ed6e8]( https://github.com/royriojas/flat-cache/commit/18ed6e8 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:57:17 + + + - Change eslint-cache location - [beed74c]( https://github.com/royriojas/flat-cache/commit/beed74c ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:48:32 + + +## v3.0.1 +- **Refactoring** + - Remove unused deps - [8c6d9dc]( https://github.com/royriojas/flat-cache/commit/8c6d9dc ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:43:29 + + +## v3.0.0 +- **Refactoring** + - Fix engines - [52b824c]( https://github.com/royriojas/flat-cache/commit/52b824c ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:01:52 + + +- **Other changes** + - Replace write with combination of mkdir and writeFile ([#49](https://github.com/royriojas/flat-cache/issues/49)) - [ef48276]( https://github.com/royriojas/flat-cache/commit/ef48276 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 08/11/2020 00:17:15 + + Node v10 introduced a great "recursive" option for mkdir which allows to + get rid from mkdirp package and easily rewrite "write" package usage + with two function calls. + + https://nodejs.org/api/fs.html#fs_fs_mkdir_path_options_callback + - Added a testcase for clearAll ([#48](https://github.com/royriojas/flat-cache/issues/48)) - [45b51ca]( https://github.com/royriojas/flat-cache/commit/45b51ca ), [Aaron Chen](https://github.com/Aaron Chen), 21/05/2020 08:40:03 + + + - requet node>=10 - [a5c482c]( https://github.com/royriojas/flat-cache/commit/a5c482c ), [yumetodo](https://github.com/yumetodo), 10/04/2020 23:14:53 + + thanks @SuperITMan + + - Update README.md - [29fe40b]( https://github.com/royriojas/flat-cache/commit/29fe40b ), [Roy Riojas](https://github.com/Roy Riojas), 10/04/2020 20:08:05 + + + - reduce vulnerability to 1 - [e9db1b2]( https://github.com/royriojas/flat-cache/commit/e9db1b2 ), [yumetodo](https://github.com/yumetodo), 30/03/2020 11:10:43 + + + - reduce vulnerabilities dependencies to 8 - [b58d196]( https://github.com/royriojas/flat-cache/commit/b58d196 ), [yumetodo](https://github.com/yumetodo), 30/03/2020 10:54:56 + + + - use prettier instead of esbeautifier - [03b1db7]( https://github.com/royriojas/flat-cache/commit/03b1db7 ), [yumetodo](https://github.com/yumetodo), 30/03/2020 10:27:14 + + + - update proxyquire - [c2f048d]( https://github.com/royriojas/flat-cache/commit/c2f048d ), [yumetodo](https://github.com/yumetodo), 30/03/2020 10:16:16 + + + - update flatted and mocha - [a0e56da]( https://github.com/royriojas/flat-cache/commit/a0e56da ), [yumetodo](https://github.com/yumetodo), 30/03/2020 09:46:45 + + mocha > mkdirp is updated + istanble >>> optimist > minimist is not updated + + - drop support node.js < 10 in develop - [beba691]( https://github.com/royriojas/flat-cache/commit/beba691 ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:31:09 + + see mkdirp + + - npm aufit fix(still remains) - [ce166cb]( https://github.com/royriojas/flat-cache/commit/ce166cb ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:18:08 + + 37 vulnerabilities required manual review and could not be updated + + - updtate sinon - [9f2d1b6]( https://github.com/royriojas/flat-cache/commit/9f2d1b6 ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:17:51 + + + - apply eslint-plugin-mocha - [07343b5]( https://github.com/royriojas/flat-cache/commit/07343b5 ), [yumetodo](https://github.com/yumetodo), 13/03/2020 22:17:21 + + + - Less strint version check ([#44](https://github.com/royriojas/flat-cache/issues/44)) - [92aca1c]( https://github.com/royriojas/flat-cache/commit/92aca1c ), [Wojciech Maj](https://github.com/Wojciech Maj), 13/11/2019 16:18:25 + + * Use ^ version matching for production dependencies + + * Run npm audit fix + +- **Bug Fixes** + - update dependencies and use eslint directly - [73fbed2]( https://github.com/royriojas/flat-cache/commit/73fbed2 ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:17:27 + + ## v2.0.1 - **Refactoring** - - upgrade node modules to latest versions - [6402ed3]( https://github.com/royriojas/flat-cache/commit/6402ed3 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 21:47:05 + - upgrade node modules to latest versions - [6402ed3]( https://github.com/royriojas/flat-cache/commit/6402ed3 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 18:47:05 ## v2.0.0 - **Bug Fixes** - - upgrade package.json lock file - [8d21c7b]( https://github.com/royriojas/flat-cache/commit/8d21c7b ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 20:03:13 + - upgrade package.json lock file - [8d21c7b]( https://github.com/royriojas/flat-cache/commit/8d21c7b ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 17:03:13 - - Use the same versions of node_js that eslint use - [8d23379]( https://github.com/royriojas/flat-cache/commit/8d23379 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 19:25:11 + - Use the same versions of node_js that eslint use - [8d23379]( https://github.com/royriojas/flat-cache/commit/8d23379 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 16:25:11 - **Other changes** - - Replace circular-json with flatted ([#36](https://github.com/royriojas/flat-cache/issues/36)) - [b93aced]( https://github.com/royriojas/flat-cache/commit/b93aced ), [C. K. Tang](https://github.com/C. K. Tang), 08/01/2019 20:03:01 + - Replace circular-json with flatted ([#36](https://github.com/royriojas/flat-cache/issues/36)) - [b93aced]( https://github.com/royriojas/flat-cache/commit/b93aced ), [C. K. Tang](https://github.com/C. K. Tang), 08/01/2019 17:03:01 - - Change JSON parser from circular-json to flatted & 1 more changes ([#37](https://github.com/royriojas/flat-cache/issues/37)) - [745e65a]( https://github.com/royriojas/flat-cache/commit/745e65a ), [Andy Chen](https://github.com/Andy Chen), 08/01/2019 19:17:20 + - Change JSON parser from circular-json to flatted & 1 more changes ([#37](https://github.com/royriojas/flat-cache/issues/37)) - [745e65a]( https://github.com/royriojas/flat-cache/commit/745e65a ), [Andy Chen](https://github.com/Andy Chen), 08/01/2019 16:17:20 * Change JSON parser from circular-json to flatted & 1 more changes @@ -37,16 +127,16 @@ ## v1.3.4 - **Refactoring** - - Add del.js and utils.js to the list of files to be beautified - [9d0ca9b]( https://github.com/royriojas/flat-cache/commit/9d0ca9b ), [Roy Riojas](https://github.com/Roy Riojas), 14/11/2018 15:19:02 + - Add del.js and utils.js to the list of files to be beautified - [9d0ca9b]( https://github.com/royriojas/flat-cache/commit/9d0ca9b ), [Roy Riojas](https://github.com/Roy Riojas), 14/11/2018 12:19:02 ## v1.3.3 - **Refactoring** - - Make sure package-lock.json is up to date - [a7d2598]( https://github.com/royriojas/flat-cache/commit/a7d2598 ), [Roy Riojas](https://github.com/Roy Riojas), 14/11/2018 14:36:08 + - Make sure package-lock.json is up to date - [a7d2598]( https://github.com/royriojas/flat-cache/commit/a7d2598 ), [Roy Riojas](https://github.com/Roy Riojas), 14/11/2018 11:36:08 - **Other changes** - - Removed the need for del ([#33](https://github.com/royriojas/flat-cache/issues/33)) - [c429012]( https://github.com/royriojas/flat-cache/commit/c429012 ), [S. Gilroy](https://github.com/S. Gilroy), 13/11/2018 16:56:37 + - Removed the need for del ([#33](https://github.com/royriojas/flat-cache/issues/33)) - [c429012]( https://github.com/royriojas/flat-cache/commit/c429012 ), [S. Gilroy](https://github.com/S. Gilroy), 13/11/2018 13:56:37 * Removed the need for del @@ -62,30 +152,30 @@ ## v1.3.2 - **Refactoring** - - remove yarn.lock file - [704c6c4]( https://github.com/royriojas/flat-cache/commit/704c6c4 ), [Roy Riojas](https://github.com/Roy Riojas), 07/11/2018 18:41:08 + - remove yarn.lock file - [704c6c4]( https://github.com/royriojas/flat-cache/commit/704c6c4 ), [Roy Riojas](https://github.com/Roy Riojas), 07/11/2018 15:41:08 -- **undefined** - - replace circular-json with flatted ([#23](https://github.com/royriojas/flat-cache/issues/23))" - [db12d74]( https://github.com/royriojas/flat-cache/commit/db12d74 ), [Roy Riojas](https://github.com/Roy Riojas), 07/11/2018 18:40:39 +- **Other changes** + - replace circular-json with flatted ([#23](https://github.com/royriojas/flat-cache/issues/23))" - [db12d74]( https://github.com/royriojas/flat-cache/commit/db12d74 ), [Roy Riojas](https://github.com/Roy Riojas), 07/11/2018 15:40:39 This reverts commit 00f689277a75e85fef28e6a048fad227afc525e6. ## v1.3.1 - **Refactoring** - - upgrade deps to remove some security warnings - [f405719]( https://github.com/royriojas/flat-cache/commit/f405719 ), [Roy Riojas](https://github.com/Roy Riojas), 06/11/2018 15:07:31 + - upgrade deps to remove some security warnings - [f405719]( https://github.com/royriojas/flat-cache/commit/f405719 ), [Roy Riojas](https://github.com/Roy Riojas), 06/11/2018 12:07:31 - **Bug Fixes** - - replace circular-json with flatted ([#23](https://github.com/royriojas/flat-cache/issues/23)) - [00f6892]( https://github.com/royriojas/flat-cache/commit/00f6892 ), [Terry](https://github.com/Terry), 05/11/2018 21:44:16 + - replace circular-json with flatted ([#23](https://github.com/royriojas/flat-cache/issues/23)) - [00f6892]( https://github.com/royriojas/flat-cache/commit/00f6892 ), [Terry](https://github.com/Terry), 05/11/2018 18:44:16 -- **undefined** - - update del to v3.0.0 ([#26](https://github.com/royriojas/flat-cache/issues/26)) - [d42883f]( https://github.com/royriojas/flat-cache/commit/d42883f ), [Patrick Silva](https://github.com/Patrick Silva), 03/11/2018 03:00:44 +- **Other changes** + - update del to v3.0.0 ([#26](https://github.com/royriojas/flat-cache/issues/26)) - [d42883f]( https://github.com/royriojas/flat-cache/commit/d42883f ), [Patrick Silva](https://github.com/Patrick Silva), 03/11/2018 01:00:44 Closes #25 ## v1.3.0 - **Other changes** - - Added #all method ([#16](https://github.com/royriojas/flat-cache/issues/16)) - [12293be]( https://github.com/royriojas/flat-cache/commit/12293be ), [Ozair Patel](https://github.com/Ozair Patel), 25/09/2017 16:46:38 + - Added #all method ([#16](https://github.com/royriojas/flat-cache/issues/16)) - [12293be]( https://github.com/royriojas/flat-cache/commit/12293be ), [Ozair Patel](https://github.com/Ozair Patel), 25/09/2017 14:46:38 * Added #all method @@ -99,12 +189,12 @@ * Beautified file - - fix changelog title style ([#14](https://github.com/royriojas/flat-cache/issues/14)) - [af8338a]( https://github.com/royriojas/flat-cache/commit/af8338a ), [前端小武](https://github.com/前端小武), 19/12/2016 23:34:48 + - fix changelog title style ([#14](https://github.com/royriojas/flat-cache/issues/14)) - [af8338a]( https://github.com/royriojas/flat-cache/commit/af8338a ), [前端小武](https://github.com/前端小武), 19/12/2016 20:34:48 ## v1.2.2 - **Bug Fixes** - - Do not crash if cache file is invalid JSON. ([#13](https://github.com/royriojas/flat-cache/issues/13)) - [87beaa6]( https://github.com/royriojas/flat-cache/commit/87beaa6 ), [Roy Riojas](https://github.com/Roy Riojas), 19/12/2016 21:03:35 + - Do not crash if cache file is invalid JSON. ([#13](https://github.com/royriojas/flat-cache/issues/13)) - [87beaa6]( https://github.com/royriojas/flat-cache/commit/87beaa6 ), [Roy Riojas](https://github.com/Roy Riojas), 19/12/2016 18:03:35 Fixes #12 @@ -115,186 +205,124 @@ If the cache is somehow not valid the cache will be discarded an a a new cache will be stored instead - **Other changes** - - Added travis ci support for modern node versions ([#11](https://github.com/royriojas/flat-cache/issues/11)) - [1c2b1f7]( https://github.com/royriojas/flat-cache/commit/1c2b1f7 ), [Amila Welihinda](https://github.com/Amila Welihinda), 11/11/2016 02:47:52 + - Added travis ci support for modern node versions ([#11](https://github.com/royriojas/flat-cache/issues/11)) - [1c2b1f7]( https://github.com/royriojas/flat-cache/commit/1c2b1f7 ), [Amila Welihinda](https://github.com/Amila Welihinda), 10/11/2016 23:47:52 - - Bumping `circular-son` version ([#10](https://github.com/royriojas/flat-cache/issues/10)) - [4d5e861]( https://github.com/royriojas/flat-cache/commit/4d5e861 ), [Andrea Giammarchi](https://github.com/Andrea Giammarchi), 02/08/2016 09:13:52 + - Bumping `circular-son` version ([#10](https://github.com/royriojas/flat-cache/issues/10)) - [4d5e861]( https://github.com/royriojas/flat-cache/commit/4d5e861 ), [Andrea Giammarchi](https://github.com/Andrea Giammarchi), 02/08/2016 07:13:52 As mentioned in https://github.com/WebReflection/circular-json/issues/25 `circular-json` wan't rightly implementing the license field. Latest version bump changed only that bit so that ESLint should now be happy. ## v1.2.1 - **Bug Fixes** - - Add missing utils.js file to the package. closes [#8](https://github.com/royriojas/flat-cache/issues/8) - [ec10cf2]( https://github.com/royriojas/flat-cache/commit/ec10cf2 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 04:18:57 + - Add missing utils.js file to the package. closes [#8](https://github.com/royriojas/flat-cache/issues/8) - [ec10cf2]( https://github.com/royriojas/flat-cache/commit/ec10cf2 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 02:18:57 ## v1.2.0 - **Documentation** - - Add documentation about noPrune option - [23e11f9]( https://github.com/royriojas/flat-cache/commit/23e11f9 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 04:06:49 + - Add documentation about noPrune option - [23e11f9]( https://github.com/royriojas/flat-cache/commit/23e11f9 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 02:06:49 -## v1.1.0 +## v1.0.11 - **Features** - - Add noPrune option to cache.save() method. closes [#7](https://github.com/royriojas/flat-cache/issues/7) - [2c8016a]( https://github.com/royriojas/flat-cache/commit/2c8016a ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 04:00:29 + - Add noPrune option to cache.save() method. closes [#7](https://github.com/royriojas/flat-cache/issues/7) - [2c8016a]( https://github.com/royriojas/flat-cache/commit/2c8016a ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 02:00:29 - - Add json read and write utility based on circular-json - [c31081e]( https://github.com/royriojas/flat-cache/commit/c31081e ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 10:58:17 + - Add json read and write utility based on circular-json - [c31081e]( https://github.com/royriojas/flat-cache/commit/c31081e ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 08:58:17 - **Bug Fixes** - - Remove UTF16 BOM stripping - [4a41e22]( https://github.com/royriojas/flat-cache/commit/4a41e22 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 04:18:06 + - Remove UTF16 BOM stripping - [4a41e22]( https://github.com/royriojas/flat-cache/commit/4a41e22 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 02:18:06 Since we control both writing and reading of JSON stream, there no needs to handle unicode BOM. - - Use circular-json to handle circular references (fix [#5](https://github.com/royriojas/flat-cache/issues/5)) - [cd7aeed]( https://github.com/royriojas/flat-cache/commit/cd7aeed ), [Jean Ponchon](https://github.com/Jean Ponchon), 25/07/2016 13:11:59 + - Use circular-json to handle circular references (fix [#5](https://github.com/royriojas/flat-cache/issues/5)) - [cd7aeed]( https://github.com/royriojas/flat-cache/commit/cd7aeed ), [Jean Ponchon](https://github.com/Jean Ponchon), 25/07/2016 11:11:59 - **Tests Related fixes** - - Add missing file from eslint test - [d6fa3c3]( https://github.com/royriojas/flat-cache/commit/d6fa3c3 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 04:15:51 + - Add missing file from eslint test - [d6fa3c3]( https://github.com/royriojas/flat-cache/commit/d6fa3c3 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 02:15:51 - - Add test for circular json serialization / deserialization - [07d2ddd]( https://github.com/royriojas/flat-cache/commit/07d2ddd ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 10:59:36 + - Add test for circular json serialization / deserialization - [07d2ddd]( https://github.com/royriojas/flat-cache/commit/07d2ddd ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 08:59:36 - **Refactoring** - - Remove unused read-json-sync - [2be1c24]( https://github.com/royriojas/flat-cache/commit/2be1c24 ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 10:59:18 + - Remove unused read-json-sync - [2be1c24]( https://github.com/royriojas/flat-cache/commit/2be1c24 ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 08:59:18 - **Build Scripts Changes** - - travis tests on 0.12 and 4x - [3a613fd]( https://github.com/royriojas/flat-cache/commit/3a613fd ), [royriojas](https://github.com/royriojas), 15/11/2015 17:34:40 + - travis tests on 0.12 and 4x - [3a613fd]( https://github.com/royriojas/flat-cache/commit/3a613fd ), [royriojas](https://github.com/royriojas), 15/11/2015 14:34:40 - - add eslint-fix task - [fd29e52]( https://github.com/royriojas/flat-cache/commit/fd29e52 ), [royriojas](https://github.com/royriojas), 01/11/2015 18:04:08 +## v1.0.10 +- **Build Scripts Changes** + - add eslint-fix task - [fd29e52]( https://github.com/royriojas/flat-cache/commit/fd29e52 ), [royriojas](https://github.com/royriojas), 01/11/2015 15:04:08 - - make sure the test script also verify beautification and linting of files before running tests - [e94e176]( https://github.com/royriojas/flat-cache/commit/e94e176 ), [royriojas](https://github.com/royriojas), 01/11/2015 14:54:48 + - make sure the test script also verify beautification and linting of files before running tests - [e94e176]( https://github.com/royriojas/flat-cache/commit/e94e176 ), [royriojas](https://github.com/royriojas), 01/11/2015 11:54:48 - **Other changes** - - add clearAll for cacheDir - [97383d9]( https://github.com/royriojas/flat-cache/commit/97383d9 ), [xieyaowu](https://github.com/xieyaowu), 31/10/2015 23:02:18 + - add clearAll for cacheDir - [97383d9]( https://github.com/royriojas/flat-cache/commit/97383d9 ), [xieyaowu](https://github.com/xieyaowu), 31/10/2015 21:02:18 ## v1.0.9 - **Bug Fixes** - - wrong default values for changelogx user repo name - [7bb52d1]( https://github.com/royriojas/flat-cache/commit/7bb52d1 ), [royriojas](https://github.com/royriojas), 11/09/2015 17:59:30 + - wrong default values for changelogx user repo name - [7bb52d1]( https://github.com/royriojas/flat-cache/commit/7bb52d1 ), [royriojas](https://github.com/royriojas), 11/09/2015 15:59:30 ## v1.0.8 - **Build Scripts Changes** - - test against node 4 - [c395b66]( https://github.com/royriojas/flat-cache/commit/c395b66 ), [royriojas](https://github.com/royriojas), 11/09/2015 17:51:39 + - test against node 4 - [c395b66]( https://github.com/royriojas/flat-cache/commit/c395b66 ), [royriojas](https://github.com/royriojas), 11/09/2015 15:51:39 ## v1.0.7 - **Other changes** - - Move dependencies into devDep - [7e47099]( https://github.com/royriojas/flat-cache/commit/7e47099 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 17:10:57 + - Move dependencies into devDep - [7e47099]( https://github.com/royriojas/flat-cache/commit/7e47099 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 15:10:57 - **Documentation** - - Add missing changelog link - [f51197a]( https://github.com/royriojas/flat-cache/commit/f51197a ), [royriojas](https://github.com/royriojas), 11/09/2015 16:48:05 + - Add missing changelog link - [f51197a]( https://github.com/royriojas/flat-cache/commit/f51197a ), [royriojas](https://github.com/royriojas), 11/09/2015 14:48:05 ## v1.0.6 - **Build Scripts Changes** - - Add helpers/code check scripts - [bdb82f3]( https://github.com/royriojas/flat-cache/commit/bdb82f3 ), [royriojas](https://github.com/royriojas), 11/09/2015 16:44:31 + - Add helpers/code check scripts - [bdb82f3]( https://github.com/royriojas/flat-cache/commit/bdb82f3 ), [royriojas](https://github.com/royriojas), 11/09/2015 14:44:31 ## v1.0.5 - **Documentation** - - better description for the module - [436817f]( https://github.com/royriojas/flat-cache/commit/436817f ), [royriojas](https://github.com/royriojas), 11/09/2015 16:35:33 + - better description for the module - [436817f]( https://github.com/royriojas/flat-cache/commit/436817f ), [royriojas](https://github.com/royriojas), 11/09/2015 14:35:33 - **Other changes** - - Update dependencies - [be88aa3]( https://github.com/royriojas/flat-cache/commit/be88aa3 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 15:47:41 - - -## v1.0.11 -- **Features** - - Add noPrune option to cache.save() method. closes [#7](https://github.com/royriojas/flat-cache/issues/7) - [2c8016a]( https://github.com/royriojas/flat-cache/commit/2c8016a ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 04:00:29 - - - - Add json read and write utility based on circular-json - [c31081e]( https://github.com/royriojas/flat-cache/commit/c31081e ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 10:58:17 - - -- **Bug Fixes** - - Remove UTF16 BOM stripping - [4a41e22]( https://github.com/royriojas/flat-cache/commit/4a41e22 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 04:18:06 - - Since we control both writing and reading of JSON stream, there no needs - to handle unicode BOM. - - Use circular-json to handle circular references (fix [#5](https://github.com/royriojas/flat-cache/issues/5)) - [cd7aeed]( https://github.com/royriojas/flat-cache/commit/cd7aeed ), [Jean Ponchon](https://github.com/Jean Ponchon), 25/07/2016 13:11:59 - - -- **Tests Related fixes** - - Add missing file from eslint test - [d6fa3c3]( https://github.com/royriojas/flat-cache/commit/d6fa3c3 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 04:15:51 - - - - Add test for circular json serialization / deserialization - [07d2ddd]( https://github.com/royriojas/flat-cache/commit/07d2ddd ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 10:59:36 + - Update dependencies - [be88aa3]( https://github.com/royriojas/flat-cache/commit/be88aa3 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 13:47:41 +## v1.0.4 - **Refactoring** - - Remove unused read-json-sync - [2be1c24]( https://github.com/royriojas/flat-cache/commit/2be1c24 ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 10:59:18 - - -- **Build Scripts Changes** - - travis tests on 0.12 and 4x - [3a613fd]( https://github.com/royriojas/flat-cache/commit/3a613fd ), [royriojas](https://github.com/royriojas), 15/11/2015 17:34:40 - - -## v1.0.10 -- **Build Scripts Changes** - - add eslint-fix task - [fd29e52]( https://github.com/royriojas/flat-cache/commit/fd29e52 ), [royriojas](https://github.com/royriojas), 01/11/2015 18:04:08 - - - - make sure the test script also verify beautification and linting of files before running tests - [e94e176]( https://github.com/royriojas/flat-cache/commit/e94e176 ), [royriojas](https://github.com/royriojas), 01/11/2015 14:54:48 - - - - test against node 4 - [c395b66]( https://github.com/royriojas/flat-cache/commit/c395b66 ), [royriojas](https://github.com/royriojas), 11/09/2015 17:51:39 - - - - Add helpers/code check scripts - [bdb82f3]( https://github.com/royriojas/flat-cache/commit/bdb82f3 ), [royriojas](https://github.com/royriojas), 11/09/2015 16:44:31 - - -- **Other changes** - - add clearAll for cacheDir - [97383d9]( https://github.com/royriojas/flat-cache/commit/97383d9 ), [xieyaowu](https://github.com/xieyaowu), 31/10/2015 23:02:18 - - - - Move dependencies into devDep - [7e47099]( https://github.com/royriojas/flat-cache/commit/7e47099 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 17:10:57 - - - - Update dependencies - [be88aa3]( https://github.com/royriojas/flat-cache/commit/be88aa3 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 15:47:41 - - -- **Bug Fixes** - - wrong default values for changelogx user repo name - [7bb52d1]( https://github.com/royriojas/flat-cache/commit/7bb52d1 ), [royriojas](https://github.com/royriojas), 11/09/2015 17:59:30 + - load a cache file using the full filepath - [b8f68c2]( https://github.com/royriojas/flat-cache/commit/b8f68c2 ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 04:19:14 - **Documentation** - - Add missing changelog link - [f51197a]( https://github.com/royriojas/flat-cache/commit/f51197a ), [royriojas](https://github.com/royriojas), 11/09/2015 16:48:05 - - - - better description for the module - [436817f]( https://github.com/royriojas/flat-cache/commit/436817f ), [royriojas](https://github.com/royriojas), 11/09/2015 16:35:33 - - - - Add documentation about `clearAll` and `clearCacheById` - [13947c1]( https://github.com/royriojas/flat-cache/commit/13947c1 ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 02:44:05 - - -- **Refactoring** - - load a cache file using the full filepath - [b8f68c2]( https://github.com/royriojas/flat-cache/commit/b8f68c2 ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 06:19:14 + - Add documentation about `clearAll` and `clearCacheById` - [13947c1]( https://github.com/royriojas/flat-cache/commit/13947c1 ), [Roy Riojas](https://github.com/Roy Riojas), 01/03/2015 23:44:05 - **Features** - - Add methods to remove the cache documents created - [af40443]( https://github.com/royriojas/flat-cache/commit/af40443 ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 02:39:27 + - Add methods to remove the cache documents created - [af40443]( https://github.com/royriojas/flat-cache/commit/af40443 ), [Roy Riojas](https://github.com/Roy Riojas), 01/03/2015 23:39:27 ## v1.0.1 - **Other changes** - - Update README.md - [c2b6805]( https://github.com/royriojas/flat-cache/commit/c2b6805 ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 07:28:07 + - Update README.md - [c2b6805]( https://github.com/royriojas/flat-cache/commit/c2b6805 ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 04:28:07 ## v1.0.0 - **Refactoring** - - flat-cache v.1.0.0 - [c984274]( https://github.com/royriojas/flat-cache/commit/c984274 ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 07:11:50 + - flat-cache v.1.0.0 - [c984274]( https://github.com/royriojas/flat-cache/commit/c984274 ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 04:11:50 - **Other changes** - - Initial commit - [d43cccf]( https://github.com/royriojas/flat-cache/commit/d43cccf ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 04:12:16 + - Initial commit - [d43cccf]( https://github.com/royriojas/flat-cache/commit/d43cccf ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 01:12:16 diff --git a/tools/node_modules/eslint/node_modules/flat-cache/del.js b/tools/node_modules/eslint/node_modules/flat-cache/del.js deleted file mode 100644 index c2c553713fdf48..00000000000000 --- a/tools/node_modules/eslint/node_modules/flat-cache/del.js +++ /dev/null @@ -1,13 +0,0 @@ -var rimraf = require( 'rimraf' ).sync; -var fs = require( 'fs' ); - -module.exports = function del( file ) { - if ( fs.existsSync( file ) ) { - //if rimraf doesn't throw then the file has been deleted or didn't exist - rimraf( file, { - glob: false - } ); - return true; - } - return false; -}; diff --git a/tools/node_modules/eslint/node_modules/flat-cache/package.json b/tools/node_modules/eslint/node_modules/flat-cache/package.json index de3dd5b13149fd..a08d68db3dd4f1 100644 --- a/tools/node_modules/eslint/node_modules/flat-cache/package.json +++ b/tools/node_modules/eslint/node_modules/flat-cache/package.json @@ -20,34 +20,33 @@ "projectName": "flat-cache" }, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "deprecated": false, "description": "A stupidly simple key/value storage using files to persist some data", "devDependencies": { - "chai": "^3.2.0", - "changelogx": "3.0.0", - "esbeautifier": "10.1.1", - "eslinter": "^3.2.1", - "glob-expand": "0.2.1", - "istanbul": "0.4.5", - "mocha": "5.2.0", - "precommit": "^1.1.5", - "prepush": "^3.1.4", - "proxyquire": "^1.7.2", - "sinon": "^1.16.1", - "sinon-chai": "^2.8.0", - "watch-run": "^1.2.2" + "chai": "^4.2.0", + "changelogx": "^5.0.6", + "eslint": "^7.13.0", + "eslint-config-prettier": "^6.15.0", + "eslint-plugin-mocha": "^8.0.0", + "eslint-plugin-prettier": "^3.1.4", + "glob-expand": "^0.2.1", + "istanbul": "^0.4.5", + "mocha": "^8.2.1", + "precommit": "^1.2.2", + "prepush": "^3.1.11", + "prettier": "^2.1.2", + "watch-run": "^1.2.5" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" }, "files": [ - "cache.js", - "utils.js", - "del.js" + "src/cache.js", + "src/del.js", + "src/utils.js" ], "homepage": "https://github.com/royriojas/flat-cache#readme", "keywords": [ @@ -59,7 +58,7 @@ "cache" ], "license": "MIT", - "main": "cache.js", + "main": "src/cache.js", "name": "flat-cache", "precommit": [ "npm run verify --silent" @@ -72,25 +71,23 @@ "url": "git+https://github.com/royriojas/flat-cache.git" }, "scripts": { - "autofix": "npm run beautify && npm run eslint-fix", - "beautify": "esbeautifier 'cache.js' 'utils.js' 'del.js' 'test/specs/**/*.js'", - "beautify-check": "npm run beautify -- -k", + "autofix": "npm run eslint-fix", "bump-major": "npm run pre-v && npm version major -m 'BLD: Release v%s' && npm run post-v", "bump-minor": "npm run pre-v && npm version minor -m 'BLD: Release v%s' && npm run post-v", "bump-patch": "npm run pre-v && npm version patch -m 'BLD: Release v%s' && npm run post-v", "changelog": "changelogx -f markdown -o ./changelog.md", - "check": "npm run beautify-check && npm run eslint", + "check": "npm run eslint", "cover": "istanbul cover test/runner.js html text-summary", "do-changelog": "npm run changelog && git add ./changelog.md && git commit -m 'DOC: Generate changelog' --no-verify", - "eslint": "eslinter 'cache.js' 'utils.js' 'del.js' 'specs/**/*.js'", + "eslint": "eslint --cache --cache-location=node_modules/.cache/ ./src/**/*.js ./test/**/*.js", "eslint-fix": "npm run eslint -- --fix", "install-hooks": "prepush install && changelogx install-hook && precommit install", "post-v": "npm run do-changelog && git push --no-verify && git push --tags --no-verify", "pre-v": "npm run verify", "test": "npm run verify --silent", "test:cache": "mocha -R spec test/specs", - "verify": "npm run check && npm run test:cache", + "verify": "npm run eslint && npm run test:cache", "watch": "watch-run -i -p 'test/specs/**/*.js' istanbul cover test/runner.js html text-summary" }, - "version": "2.0.1" + "version": "3.0.4" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/flat-cache/cache.js b/tools/node_modules/eslint/node_modules/flat-cache/src/cache.js similarity index 58% rename from tools/node_modules/eslint/node_modules/flat-cache/cache.js rename to tools/node_modules/eslint/node_modules/flat-cache/src/cache.js index 6331ac7b912e39..a58c2874457489 100644 --- a/tools/node_modules/eslint/node_modules/flat-cache/cache.js +++ b/tools/node_modules/eslint/node_modules/flat-cache/src/cache.js @@ -1,7 +1,7 @@ -var path = require( 'path' ); -var fs = require( 'fs' ); -var utils = require( './utils' ); -var del = require( './del' ); +var path = require('path'); +var fs = require('fs'); +var utils = require('./utils'); +var del = require('./del'); var writeJSON = utils.writeJSON; var cache = { @@ -14,15 +14,15 @@ var cache = { * @param docId {String} the id of the cache, would also be used as the name of the file cache * @param [cacheDir] {String} directory for the cache entry */ - load: function ( docId, cacheDir ) { + load: function (docId, cacheDir) { var me = this; - me._visited = { }; - me._persisted = { }; - me._pathToFile = cacheDir ? path.resolve( cacheDir, docId ) : path.resolve( __dirname, './.cache/', docId ); + me._visited = {}; + me._persisted = {}; + me._pathToFile = cacheDir ? path.resolve(cacheDir, docId) : path.resolve(__dirname, '../.cache/', docId); - if ( fs.existsSync( me._pathToFile ) ) { - me._persisted = utils.tryParse( me._pathToFile, { } ); + if (fs.existsSync(me._pathToFile)) { + me._persisted = utils.tryParse(me._pathToFile, {}); } }, @@ -31,12 +31,12 @@ var cache = { * @method loadFile * @param {String} pathToFile the path to the file containing the info for the cache */ - loadFile: function ( pathToFile ) { + loadFile: function (pathToFile) { var me = this; - var dir = path.dirname( pathToFile ); - var fName = path.basename( pathToFile ); + var dir = path.dirname(pathToFile); + var fName = path.basename(pathToFile); - me.load( fName, dir ); + me.load(fName, dir); }, /** @@ -49,7 +49,7 @@ var cache = { }, keys: function () { - return Object.keys( this._persisted ); + return Object.keys(this._persisted); }, /** * sets a key to a given value @@ -57,18 +57,18 @@ var cache = { * @param key {string} the key to set * @param value {object} the value of the key. Could be any object that can be serialized with JSON.stringify */ - setKey: function ( key, value ) { - this._visited[ key ] = true; - this._persisted[ key ] = value; + setKey: function (key, value) { + this._visited[key] = true; + this._persisted[key] = value; }, /** * remove a given key from the cache * @method removeKey * @param key {String} the key to remove from the object */ - removeKey: function ( key ) { - delete this._visited[ key ]; // esfmt-ignore-line - delete this._persisted[ key ]; // esfmt-ignore-line + removeKey: function (key) { + delete this._visited[key]; // esfmt-ignore-line + delete this._persisted[key]; // esfmt-ignore-line }, /** * Return the value of the provided key @@ -76,9 +76,9 @@ var cache = { * @param key {String} the name of the key to retrieve * @returns {*} the value from the key */ - getKey: function ( key ) { - this._visited[ key ] = true; - return this._persisted[ key ]; + getKey: function (key) { + this._visited[key] = true; + return this._persisted[key]; }, /** @@ -89,20 +89,20 @@ var cache = { */ _prune: function () { var me = this; - var obj = { }; + var obj = {}; - var keys = Object.keys( me._visited ); + var keys = Object.keys(me._visited); // no keys visited for either get or set value - if ( keys.length === 0 ) { + if (keys.length === 0) { return; } - keys.forEach( function ( key ) { - obj[ key ] = me._persisted[ key ]; - } ); + keys.forEach(function (key) { + obj[key] = me._persisted[key]; + }); - me._visited = { }; + me._visited = {}; me._persisted = obj; }, @@ -112,11 +112,11 @@ var cache = { * @param [noPrune=false] {Boolean} whether to remove from cache the non visited files * @method save */ - save: function ( noPrune ) { + save: function (noPrune) { var me = this; - (!noPrune) && me._prune(); - writeJSON( me._pathToFile, me._persisted ); + !noPrune && me._prune(); + writeJSON(me._pathToFile, me._persisted); }, /** @@ -125,7 +125,7 @@ var cache = { * @return {Boolean} true or false if the file was successfully deleted */ removeCacheFile: function () { - return del( this._pathToFile ); + return del(this._pathToFile); }, /** * Destroy the file cache and cache content. @@ -133,11 +133,11 @@ var cache = { */ destroy: function () { var me = this; - me._visited = { }; - me._persisted = { }; + me._visited = {}; + me._persisted = {}; me.removeCacheFile(); - } + }, }; module.exports = { @@ -149,28 +149,28 @@ module.exports = { * @param [cacheDir] {String} directory for the cache entry * @returns {cache} cache instance */ - load: function ( docId, cacheDir ) { - return this.create( docId, cacheDir ); + load: function (docId, cacheDir) { + return this.create(docId, cacheDir); }, /** - * Load a cache identified by the given Id. If the element does not exists, then initialize an empty - * cache storage. - * - * @method create - * @param docId {String} the id of the cache, would also be used as the name of the file cache - * @param [cacheDir] {String} directory for the cache entry - * @returns {cache} cache instance - */ - create: function ( docId, cacheDir ) { - var obj = Object.create( cache ); - obj.load( docId, cacheDir ); + * Load a cache identified by the given Id. If the element does not exists, then initialize an empty + * cache storage. + * + * @method create + * @param docId {String} the id of the cache, would also be used as the name of the file cache + * @param [cacheDir] {String} directory for the cache entry + * @returns {cache} cache instance + */ + create: function (docId, cacheDir) { + var obj = Object.create(cache); + obj.load(docId, cacheDir); return obj; }, - createFromFile: function ( filePath ) { - var obj = Object.create( cache ); - obj.loadFile( filePath ); + createFromFile: function (filePath) { + var obj = Object.create(cache); + obj.loadFile(filePath); return obj; }, /** @@ -181,17 +181,17 @@ module.exports = { * @param cacheDir {String} the directory where the cache file was written * @returns {Boolean} true if the cache folder was deleted. False otherwise */ - clearCacheById: function ( docId, cacheDir ) { - var filePath = cacheDir ? path.resolve( cacheDir, docId ) : path.resolve( __dirname, './.cache/', docId ); - return del( filePath ); + clearCacheById: function (docId, cacheDir) { + var filePath = cacheDir ? path.resolve(cacheDir, docId) : path.resolve(__dirname, '../.cache/', docId); + return del(filePath); }, /** * Remove all cache stored in the cache directory * @method clearAll * @returns {Boolean} true if the cache folder was deleted. False otherwise */ - clearAll: function ( cacheDir ) { - var filePath = cacheDir ? path.resolve( cacheDir ) : path.resolve( __dirname, './.cache/' ); - return del( filePath ); - } + clearAll: function (cacheDir) { + var filePath = cacheDir ? path.resolve(cacheDir) : path.resolve(__dirname, '../.cache/'); + return del(filePath); + }, }; diff --git a/tools/node_modules/eslint/node_modules/flat-cache/src/del.js b/tools/node_modules/eslint/node_modules/flat-cache/src/del.js new file mode 100644 index 00000000000000..8908744b89e8df --- /dev/null +++ b/tools/node_modules/eslint/node_modules/flat-cache/src/del.js @@ -0,0 +1,13 @@ +var rimraf = require('rimraf').sync; +var fs = require('fs'); + +module.exports = function del(file) { + if (fs.existsSync(file)) { + //if rimraf doesn't throw then the file has been deleted or didn't exist + rimraf(file, { + glob: false, + }); + return true; + } + return false; +}; diff --git a/tools/node_modules/eslint/node_modules/flat-cache/src/utils.js b/tools/node_modules/eslint/node_modules/flat-cache/src/utils.js new file mode 100644 index 00000000000000..05f5ac385061e2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/flat-cache/src/utils.js @@ -0,0 +1,44 @@ +var fs = require('fs'); +var path = require('path'); +var flatted = require('flatted'); + +module.exports = { + tryParse: function (filePath, defaultValue) { + var result; + try { + result = this.readJSON(filePath); + } catch (ex) { + result = defaultValue; + } + return result; + }, + + /** + * Read json file synchronously using flatted + * + * @method readJSON + * @param {String} filePath Json filepath + * @returns {*} parse result + */ + readJSON: function (filePath) { + return flatted.parse( + fs.readFileSync(filePath, { + encoding: 'utf8', + }) + ); + }, + + /** + * Write json file synchronously using circular-json + * + * @method writeJSON + * @param {String} filePath Json filepath + * @param {*} data Object to serialize + */ + writeJSON: function (filePath, data) { + fs.mkdirSync(path.dirname(filePath), { + recursive: true, + }); + fs.writeFileSync(filePath, flatted.stringify(data)); + }, +}; diff --git a/tools/node_modules/eslint/node_modules/flat-cache/utils.js b/tools/node_modules/eslint/node_modules/flat-cache/utils.js deleted file mode 100644 index 1c44db9ab505f4..00000000000000 --- a/tools/node_modules/eslint/node_modules/flat-cache/utils.js +++ /dev/null @@ -1,39 +0,0 @@ -var fs = require( 'fs' ); -var write = require( 'write' ); -var flatted = require( 'flatted' ); - -module.exports = { - tryParse: function ( filePath, defaultValue ) { - var result; - try { - result = this.readJSON( filePath ); - } catch (ex) { - result = defaultValue; - } - return result; - }, - - /** - * Read json file synchronously using flatted - * - * @method readJSON - * @param {String} filePath Json filepath - * @returns {*} parse result - */ - readJSON: function ( filePath ) { - return flatted.parse( fs.readFileSync( filePath, { - encoding: 'utf8' - } ) ); - }, - - /** - * Write json file synchronously using circular-json - * - * @method writeJSON - * @param {String} filePath Json filepath - * @param {*} data Object to serialize - */ - writeJSON: function ( filePath, data ) { - write.sync( filePath, flatted.stringify( data ) ); - } -}; diff --git a/tools/node_modules/eslint/node_modules/flatted/LICENSE b/tools/node_modules/eslint/node_modules/flatted/LICENSE index c8508305bdaee0..506dc479c6b348 100644 --- a/tools/node_modules/eslint/node_modules/flatted/LICENSE +++ b/tools/node_modules/eslint/node_modules/flatted/LICENSE @@ -1,6 +1,6 @@ ISC License -Copyright (c) 2018, Andrea Giammarchi, @WebReflection +Copyright (c) 2018-2020, Andrea Giammarchi, @WebReflection Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above diff --git a/tools/node_modules/eslint/node_modules/flatted/README.md b/tools/node_modules/eslint/node_modules/flatted/README.md index 84415933913668..0c1627f7d2dda8 100644 --- a/tools/node_modules/eslint/node_modules/flatted/README.md +++ b/tools/node_modules/eslint/node_modules/flatted/README.md @@ -1,9 +1,15 @@ # flatted -![Downloads](https://img.shields.io/npm/dm/flatted.svg) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/flatted/badge.svg?branch=master)](https://coveralls.io/github/WebReflection/flatted?branch=master) [![Build Status](https://travis-ci.org/WebReflection/flatted.svg?branch=master)](https://travis-ci.org/WebReflection/flatted) [![License: ISC](https://img.shields.io/badge/License-ISC-yellow.svg)](https://opensource.org/licenses/ISC) ![WebReflection status](https://offline.report/status/webreflection.svg) +[![Downloads](https://img.shields.io/npm/dm/flatted.svg)](https://www.npmjs.com/package/flatted) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/flatted/badge.svg?branch=master)](https://coveralls.io/github/WebReflection/flatted?branch=master) [![Build Status](https://travis-ci.org/WebReflection/flatted.svg?branch=master)](https://travis-ci.org/WebReflection/flatted) [![License: ISC](https://img.shields.io/badge/License-ISC-yellow.svg)](https://opensource.org/licenses/ISC) ![WebReflection status](https://offline.report/status/webreflection.svg) + +![snow flake](./flatted.jpg) + +**Social Media Photo by [Matt Seymour](https://unsplash.com/@mattseymour) on [Unsplash](https://unsplash.com/)** A super light (0.5K) and fast circular JSON parser, directly from the creator of [CircularJSON](https://github.com/WebReflection/circular-json/#circularjson). +Now available also for **[PHP](./php/flatted.php)**. + ```js npm i flatted ``` @@ -12,10 +18,10 @@ Usable via [CDN](https://unpkg.com/flatted) or as regular module. ```js // ESM -import {parse, stringify} from 'flatted/esm'; +import {parse, stringify} from 'flatted'; // CJS -const {parse, stringify} = require('flatted/cjs'); +const {parse, stringify} = require('flatted'); const a = [{}]; a[0].a = a; diff --git a/tools/node_modules/eslint/node_modules/flatted/cjs/index.js b/tools/node_modules/eslint/node_modules/flatted/cjs/index.js index a09c80cda7f0ba..ea7ac895154e46 100644 --- a/tools/node_modules/eslint/node_modules/flatted/cjs/index.js +++ b/tools/node_modules/eslint/node_modules/flatted/cjs/index.js @@ -1,114 +1,94 @@ -var Flatted = (function (Primitive, primitive) { +'use strict'; +/*! (c) 2020 Andrea Giammarchi */ - /*! - * ISC License - * - * Copyright (c) 2018, Andrea Giammarchi, @WebReflection - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ +const {parse: $parse, stringify: $stringify} = JSON; +const {keys} = Object; - var Flatted = { +const Primitive = String; // it could be Number +const primitive = 'string'; // it could be 'number' - parse: function parse(text, reviver) { - var input = JSON.parse(text, Primitives).map(primitives); - var value = input[0]; - var $ = reviver || noop; - var tmp = typeof value === 'object' && value ? - revive(input, new Set, value, $) : - value; - return $.call({'': tmp}, '', tmp); - }, +const ignore = {}; +const object = 'object'; - stringify: function stringify(value, replacer, space) { - for (var - firstRun, - known = new Map, - input = [], - output = [], - $ = replacer && typeof replacer === typeof input ? - function (k, v) { - if (k === '' || -1 < replacer.indexOf(k)) return v; - } : - (replacer || noop), - i = +set(known, input, $.call({'': value}, '', value)), - replace = function (key, value) { - if (firstRun) { - firstRun = !firstRun; - return value; - } - var after = $.call(this, key, value); - switch (typeof after) { - case 'object': - if (after === null) return after; - case primitive: - return known.get(after) || set(known, input, after); - } - return after; - }; - i < input.length; i++ - ) { - firstRun = true; - output[i] = JSON.stringify(input[i], replace, space); - } - return '[' + output.join(',') + ']'; - } +const noop = (_, value) => value; - }; +const primitives = value => ( + value instanceof Primitive ? Primitive(value) : value +); - return Flatted; +const Primitives = (_, value) => ( + typeof value === primitive ? new Primitive(value) : value +); - function noop(key, value) { - return value; +const revive = (input, parsed, output, $) => { + const lazy = []; + for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) { + const k = ke[y]; + const value = output[k]; + if (value instanceof Primitive) { + const tmp = input[value]; + if (typeof tmp === object && !parsed.has(tmp)) { + parsed.add(tmp); + output[k] = ignore; + lazy.push({k, a: [input, parsed, tmp, $]}); + } + else + output[k] = $.call(output, k, tmp); + } + else if (output[k] !== ignore) + output[k] = $.call(output, k, value); } - - function revive(input, parsed, output, $) { - return Object.keys(output).reduce( - function (output, key) { - var value = output[key]; - if (value instanceof Primitive) { - var tmp = input[value]; - if (typeof tmp === 'object' && !parsed.has(tmp)) { - parsed.add(tmp); - output[key] = $.call(output, key, revive(input, parsed, tmp, $)); - } else { - output[key] = $.call(output, key, tmp); - } - } else - output[key] = $.call(output, key, value); - return output; - }, - output - ); + for (let {length} = lazy, i = 0; i < length; i++) { + const {k, a} = lazy[i]; + output[k] = $.call(output, k, revive.apply(null, a)); } + return output; +}; - function set(known, input, value) { - var index = Primitive(input.push(value) - 1); - known.set(value, index); - return index; - } +const set = (known, input, value) => { + const index = Primitive(input.push(value) - 1); + known.set(value, index); + return index; +}; - // the two kinds of primitives - // 1. the real one - // 2. the wrapped one +const parse = (text, reviver) => { + const input = $parse(text, Primitives).map(primitives); + const value = input[0]; + const $ = reviver || noop; + const tmp = typeof value === object && value ? + revive(input, new Set, value, $) : + value; + return $.call({'': tmp}, '', tmp); +}; +exports.parse = parse; - function primitives(value) { - return value instanceof Primitive ? Primitive(value) : value; +const stringify = (value, replacer, space) => { + const $ = replacer && typeof replacer === object ? + (k, v) => (k === '' || -1 < replacer.indexOf(k) ? v : void 0) : + (replacer || noop); + const known = new Map; + const input = []; + const output = []; + let i = +set(known, input, $.call({'': value}, '', value)); + let firstRun = !i; + while (i < input.length) { + firstRun = true; + output[i] = $stringify(input[i++], replace, space); } - - function Primitives(key, value) { - return typeof value === primitive ? new Primitive(value) : value; + return '[' + output.join(',') + ']'; + function replace(key, value) { + if (firstRun) { + firstRun = !firstRun; + return value; + } + const after = $.call(this, key, value); + switch (typeof after) { + case object: + if (after === null) return after; + case primitive: + return known.get(after) || set(known, input, after); + } + return after; } - -}(String, 'string')); -module.exports = Flatted; +}; +exports.stringify = stringify; diff --git a/tools/node_modules/eslint/node_modules/flatted/cjs/package.json b/tools/node_modules/eslint/node_modules/flatted/cjs/package.json new file mode 100644 index 00000000000000..0292b9956f2e40 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/flatted/cjs/package.json @@ -0,0 +1 @@ +{"type":"commonjs"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/flatted/es.js b/tools/node_modules/eslint/node_modules/flatted/es.js new file mode 100644 index 00000000000000..aee7158d2f34f2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/flatted/es.js @@ -0,0 +1,2 @@ +self.Flatted=function(t){"use strict"; +/*! (c) 2020 Andrea Giammarchi */const{parse:e,stringify:n}=JSON,{keys:r}=Object,s=String,c="string",l={},o="object",a=(t,e)=>e,i=t=>t instanceof s?s(t):t,f=(t,e)=>typeof e===c?new s(e):e,u=(t,e,n,c)=>{const a=[];for(let i=r(n),{length:f}=i,u=0;u{const r=s(e.push(n)-1);return t.set(n,r),r};return t.parse=(t,n)=>{const r=e(t,f).map(i),s=r[0],c=n||a,l=typeof s===o&&s?u(r,new Set,s,c):s;return c.call({"":l},"",l)},t.stringify=(t,e,r)=>{const s=e&&typeof e===o?(t,n)=>""===t||-1 value; - }; +const primitives = value => ( + value instanceof Primitive ? Primitive(value) : value +); - return Flatted; +const Primitives = (_, value) => ( + typeof value === primitive ? new Primitive(value) : value +); - function noop(key, value) { - return value; +const revive = (input, parsed, output, $) => { + const lazy = []; + for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) { + const k = ke[y]; + const value = output[k]; + if (value instanceof Primitive) { + const tmp = input[value]; + if (typeof tmp === object && !parsed.has(tmp)) { + parsed.add(tmp); + output[k] = ignore; + lazy.push({k, a: [input, parsed, tmp, $]}); + } + else + output[k] = $.call(output, k, tmp); + } + else if (output[k] !== ignore) + output[k] = $.call(output, k, value); } - - function revive(input, parsed, output, $) { - return Object.keys(output).reduce( - function (output, key) { - var value = output[key]; - if (value instanceof Primitive) { - var tmp = input[value]; - if (typeof tmp === 'object' && !parsed.has(tmp)) { - parsed.add(tmp); - output[key] = $.call(output, key, revive(input, parsed, tmp, $)); - } else { - output[key] = $.call(output, key, tmp); - } - } else - output[key] = $.call(output, key, value); - return output; - }, - output - ); + for (let {length} = lazy, i = 0; i < length; i++) { + const {k, a} = lazy[i]; + output[k] = $.call(output, k, revive.apply(null, a)); } + return output; +}; - function set(known, input, value) { - var index = Primitive(input.push(value) - 1); - known.set(value, index); - return index; - } +const set = (known, input, value) => { + const index = Primitive(input.push(value) - 1); + known.set(value, index); + return index; +}; - // the two kinds of primitives - // 1. the real one - // 2. the wrapped one +export const parse = (text, reviver) => { + const input = $parse(text, Primitives).map(primitives); + const value = input[0]; + const $ = reviver || noop; + const tmp = typeof value === object && value ? + revive(input, new Set, value, $) : + value; + return $.call({'': tmp}, '', tmp); +}; - function primitives(value) { - return value instanceof Primitive ? Primitive(value) : value; +export const stringify = (value, replacer, space) => { + const $ = replacer && typeof replacer === object ? + (k, v) => (k === '' || -1 < replacer.indexOf(k) ? v : void 0) : + (replacer || noop); + const known = new Map; + const input = []; + const output = []; + let i = +set(known, input, $.call({'': value}, '', value)); + let firstRun = !i; + while (i < input.length) { + firstRun = true; + output[i] = $stringify(input[i++], replace, space); } - - function Primitives(key, value) { - return typeof value === primitive ? new Primitive(value) : value; + return '[' + output.join(',') + ']'; + function replace(key, value) { + if (firstRun) { + firstRun = !firstRun; + return value; + } + const after = $.call(this, key, value); + switch (typeof after) { + case object: + if (after === null) return after; + case primitive: + return known.get(after) || set(known, input, after); + } + return after; } - -}(String, 'string')); -export default Flatted; -export var parse = Flatted.parse; -export var stringify = Flatted.stringify; +}; diff --git a/tools/node_modules/eslint/node_modules/flatted/flatted.jpg b/tools/node_modules/eslint/node_modules/flatted/flatted.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ccee5f829ccc73d049380b85bc5bee5549cafec GIT binary patch literal 48502 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 PMI2STBQ|Iz9Z&z+7r!@* literal 0 HcmV?d00001 diff --git a/tools/node_modules/eslint/node_modules/flatted/index.js b/tools/node_modules/eslint/node_modules/flatted/index.js index 1eca303c6db3c3..2cf0eeb52abc8a 100644 --- a/tools/node_modules/eslint/node_modules/flatted/index.js +++ b/tools/node_modules/eslint/node_modules/flatted/index.js @@ -1,113 +1,119 @@ -var Flatted = (function (Primitive, primitive) { - - /*! - * ISC License - * - * Copyright (c) 2018, Andrea Giammarchi, @WebReflection - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - - var Flatted = { - - parse: function parse(text, reviver) { - var input = JSON.parse(text, Primitives).map(primitives); - var value = input[0]; - var $ = reviver || noop; - var tmp = typeof value === 'object' && value ? - revive(input, new Set, value, $) : - value; - return $.call({'': tmp}, '', tmp); - }, - - stringify: function stringify(value, replacer, space) { - for (var - firstRun, - known = new Map, - input = [], - output = [], - $ = replacer && typeof replacer === typeof input ? - function (k, v) { - if (k === '' || -1 < replacer.indexOf(k)) return v; - } : - (replacer || noop), - i = +set(known, input, $.call({'': value}, '', value)), - replace = function (key, value) { - if (firstRun) { - firstRun = !firstRun; - return value; - } - var after = $.call(this, key, value); - switch (typeof after) { - case 'object': - if (after === null) return after; - case primitive: - return known.get(after) || set(known, input, after); - } - return after; - }; - i < input.length; i++ - ) { - firstRun = true; - output[i] = JSON.stringify(input[i], replace, space); - } - return '[' + output.join(',') + ']'; - } +self.Flatted = (function (exports) { + 'use strict'; - }; + + + /*! (c) 2020 Andrea Giammarchi */ + var $parse = JSON.parse, + $stringify = JSON.stringify; + var keys = Object.keys; + var Primitive = String; // it could be Number + + var primitive = 'string'; // it could be 'number' - return Flatted; + var ignore = {}; + var object = 'object'; - function noop(key, value) { + var noop = function noop(_, value) { return value; - } - - function revive(input, parsed, output, $) { - return Object.keys(output).reduce( - function (output, key) { - var value = output[key]; - if (value instanceof Primitive) { - var tmp = input[value]; - if (typeof tmp === 'object' && !parsed.has(tmp)) { - parsed.add(tmp); - output[key] = $.call(output, key, revive(input, parsed, tmp, $)); - } else { - output[key] = $.call(output, key, tmp); - } - } else - output[key] = $.call(output, key, value); - return output; - }, - output - ); - } - - function set(known, input, value) { + }; + + var primitives = function primitives(value) { + return value instanceof Primitive ? Primitive(value) : value; + }; + + var Primitives = function Primitives(_, value) { + return typeof(value) === primitive ? new Primitive(value) : value; + }; + + var revive = function revive(input, parsed, output, $) { + var lazy = []; + + for (var ke = keys(output), length = ke.length, y = 0; y < length; y++) { + var k = ke[y]; + var value = output[k]; + + if (value instanceof Primitive) { + var tmp = input[value]; + + if (typeof(tmp) === object && !parsed.has(tmp)) { + parsed.add(tmp); + output[k] = ignore; + lazy.push({ + k: k, + a: [input, parsed, tmp, $] + }); + } else output[k] = $.call(output, k, tmp); + } else if (output[k] !== ignore) output[k] = $.call(output, k, value); + } + + for (var _length = lazy.length, i = 0; i < _length; i++) { + var _lazy$i = lazy[i], + _k = _lazy$i.k, + a = _lazy$i.a; + output[_k] = $.call(output, _k, revive.apply(null, a)); + } + + return output; + }; + + var set = function set(known, input, value) { var index = Primitive(input.push(value) - 1); known.set(value, index); return index; - } + }; - // the two kinds of primitives - // 1. the real one - // 2. the wrapped one + var parse = function parse(text, reviver) { + var input = $parse(text, Primitives).map(primitives); + var value = input[0]; + var $ = reviver || noop; + var tmp = typeof(value) === object && value ? revive(input, new Set(), value, $) : value; + return $.call({ + '': tmp + }, '', tmp); + }; + var stringify = function stringify(value, replacer, space) { + var $ = replacer && typeof(replacer) === object ? function (k, v) { + return k === '' || -1 < replacer.indexOf(k) ? v : void 0; + } : replacer || noop; + var known = new Map(); + var input = []; + var output = []; + var i = +set(known, input, $.call({ + '': value + }, '', value)); + var firstRun = !i; - function primitives(value) { - return value instanceof Primitive ? Primitive(value) : value; - } + while (i < input.length) { + firstRun = true; + output[i] = $stringify(input[i++], replace, space); + } + + return '[' + output.join(',') + ']'; + + function replace(key, value) { + if (firstRun) { + firstRun = !firstRun; + return value; + } + + var after = $.call(this, key, value); + + switch (typeof(after)) { + case object: + if (after === null) return after; + + case primitive: + return known.get(after) || set(known, input, after); + } + + return after; + } + }; + + exports.parse = parse; + exports.stringify = stringify; - function Primitives(key, value) { - return typeof value === primitive ? new Primitive(value) : value; - } + return exports; -}(String, 'string')); +}({})); diff --git a/tools/node_modules/eslint/node_modules/flatted/min.js b/tools/node_modules/eslint/node_modules/flatted/min.js index 9e2a134b1c77e7..64372fe4081620 100644 --- a/tools/node_modules/eslint/node_modules/flatted/min.js +++ b/tools/node_modules/eslint/node_modules/flatted/min.js @@ -1,2 +1,2 @@ -/*! (c) 2018, Andrea Giammarchi, (ISC) */ -var Flatted=function(a,l){return{parse:function(n,t){var e=JSON.parse(n,i).map(f),r=e[0],u=t||s,c="object"==typeof r&&r?function u(c,f,n,i){return Object.keys(n).reduce(function(n,t){var e=n[t];if(e instanceof a){var r=c[e];"object"!=typeof r||f.has(r)?n[t]=i.call(n,t,r):(f.add(r),n[t]=i.call(n,t,u(c,f,r,i)))}else n[t]=i.call(n,t,e);return n},n)}(e,new Set,r,u):r;return u.call({"":c},"",c)},stringify:function(n,e,t){function r(n,t){if(u)return u=!u,t;var e=a.call(this,n,t);switch(typeof e){case"object":if(null===e)return e;case l:return c.get(e)||p(c,f,e)}return e}for(var u,c=new Map,f=[],i=[],a=e&&typeof e==typeof f?function(n,t){if(""===n||-1> cjs/index.js", + "build": "npm run cjs && npm run rollup:es && npm run rollup:babel && npm run min && npm run test && npm run size", + "cjs": "ascjs esm cjs", "coveralls": "nyc report --reporter=text-lcov | coveralls", - "esm": "cp index.js esm/index.js; echo 'export default Flatted;' >> esm/index.js; echo 'export var parse = Flatted.parse;' >> esm/index.js; echo 'export var stringify = Flatted.stringify;' >> esm/index.js", - "min": "echo '/*! (c) 2018, Andrea Giammarchi, (ISC) */'>min.js && uglifyjs index.js --support-ie8 -c -m >> min.js", - "size": "cat index.js | wc -c;cat min.js | wc -c;gzip -c9 min.js | wc -c;cat min.js | brotli | wc -c", + "min": "terser index.js -c -m -o min.js", + "rollup:babel": "rollup --config rollup/babel.config.js && sed -i.bck 's/^var /self./' index.js && rm -rf index.js.bck && drop-babel-typeof index.js", + "rollup:es": "rollup --config rollup/es.config.js && sed -i.bck 's/^var /self./' es.js && rm -rf es.js.bck", + "size": "cat index.js | wc -c;cat min.js | wc -c;gzip -c9 min.js | wc -c;cat min.js | brotli | wc -c; cat es.js | brotli | wc -c", "test": "nyc node test/index.js" }, + "type": "module", "types": "types.d.ts", "unpkg": "min.js", - "version": "2.0.2" + "version": "3.1.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/flatted/php/flatted.php b/tools/node_modules/eslint/node_modules/flatted/php/flatted.php new file mode 100644 index 00000000000000..31c0d41d4535e9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/flatted/php/flatted.php @@ -0,0 +1,174 @@ +value = $value; + } +} + +class Flatted { + + // public utilities + public static function parse($json, $assoc = false, $depth = 512, $options = 0) { + $input = array_map( + 'Flatted::asString', + array_map( + 'Flatted::wrap', + json_decode($json, $assoc, $depth, $options) + ) + ); + $value = &$input[0]; + $set = array(); + $set[] = &$value; + if (is_array($value)) + return Flatted::loop(false, array_keys($value), $input, $set, $value); + if (is_object($value)) + return Flatted::loop(true, Flatted::keys($value), $input, $set, $value); + return $value; + } + + public static function stringify($value, $options = 0, $depth = 512) { + $known = new stdClass; + $known->key = array(); + $known->value = array(); + $input = array(); + $output = array(); + $i = intval(Flatted::index($known, $input, $value)); + while ($i < count($input)) { + $output[$i] = Flatted::transform($known, $input, $input[$i]); + $i++; + } + return json_encode($output, $options, $depth); + } + + // private helpers + private static function asString(&$value) { + return $value instanceof FlattedString ? $value->value : $value; + } + + private static function index(&$known, &$input, &$value) { + $input[] = &$value; + $index = strval(count($input) - 1); + $known->key[] = &$value; + $known->value[] = &$index; + return $index; + } + + private static function keys(&$value) { + $obj = new ReflectionObject($value); + $props = $obj->getProperties(); + $keys = array(); + foreach ($props as $prop) { + $keys[] = $prop->getName(); + } + return $keys; + } + + private static function loop($obj, $keys, &$input, &$set, &$output) { + foreach ($keys as $key) { + $value = $obj ? $output->$key : $output[$key]; + if ($value instanceof FlattedString) { + Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output); + } + } + return $output; + } + + private static function relate(&$known, &$input, &$value) { + if (is_string($value)) { + $key = array_search($value, $known->key, true); + if ($key !== false) { + return $known->value[$key]; + } + return Flatted::index($known, $input, $value); + } + if (is_array($value)) { + $key = array_search($value, $known->key, true); + if ($key !== false) { + return $known->value[$key]; + } + return Flatted::index($known, $input, $value); + } + if (is_object($value)) { + $key = array_search($value, $known->key, true); + if ($key !== false) { + return $known->value[$key]; + } + return Flatted::index($known, $input, $value); + } + return $value; + } + + private static function ref($obj, &$key, &$value, &$input, &$set, &$output) { + if (is_array($value) && !in_array($value, $set, true)) { + $set[] = $value; + $value = Flatted::loop(false, array_keys($value), $input, $set, $value); + } + elseif (is_object($value) && !in_array($value, $set, true)) { + $set[] = $value; + $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value); + } + if ($obj) { + $output->$key = &$value; + } + else { + $output[$key] = &$value; + } + } + + private static function transform(&$known, &$input, &$value) { + if (is_array($value)) { + return array_map( + function (&$value) use(&$known, &$input) { + return Flatted::relate($known, $input, $value); + }, + $value + ); + } + if (is_object($value)) { + $object = new stdClass; + $keys = Flatted::keys($value); + foreach ($keys as $key) { + $object->$key = Flatted::relate($known, $input, $value->$key); + } + return $object; + } + return $value; + } + + private static function wrap(&$value) { + if (is_string($value)) { + return new FlattedString($value); + } + if (is_array($value)) { + return array_map('Flatted::wrap', $value); + } + if (is_object($value)) { + $keys = Flatted::keys($value); + foreach ($keys as $key) { + $value->$key = self::wrap($value->$key); + } + return $value; + } + return $value; + } +} +?> \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/flatted/php/test.php b/tools/node_modules/eslint/node_modules/flatted/php/test.php new file mode 100644 index 00000000000000..8b49e924842035 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/flatted/php/test.php @@ -0,0 +1,118 @@ +o = &$o; + +console::assert(Flatted::stringify($a) === '[["0"]]', 'recursive Array'); +console::assert(Flatted::stringify($o) === '[{"o":"0"}]', 'recursive Object'); + +$b = Flatted::parse(Flatted::stringify($a)); +console::assert(is_array($b) && $b[0] === $b, 'restoring recursive Array'); + +$a[] = 1; +$a[] = 'two'; +$a[] = true; +$o->one = 1; +$o->two = 'two'; +$o->three = true; + +console::assert(Flatted::stringify($a) === '[["0",1,"1",true],"two"]', 'values in Array'); +console::assert(Flatted::stringify($o) === '[{"o":"0","one":1,"two":"1","three":true},"two"]', 'values in Object'); + +$a[] = &$o; +$o->a = &$a; + +console::assert(Flatted::stringify($a) === '[["0",1,"1",true,"2"],"two",{"o":"2","one":1,"two":"1","three":true,"a":"0"}]', 'object in Array'); +console::assert(Flatted::stringify($o) === '[{"o":"0","one":1,"two":"1","three":true,"a":"2"},"two",["2",1,"1",true,"0"]]', 'array in Object'); + +$a[] = array('test' => 'OK'); +$a[] = [1, 2, 3]; + +$o->test = array('test' => 'OK'); +$o->array = [1, 2, 3]; + +console::assert(Flatted::stringify($a) === '[["0",1,"1",true,"2","3","4"],"two",{"o":"2","one":1,"two":"1","three":true,"a":"0","test":"3","array":"4"},{"test":"5"},[1,2,3],"OK"]', 'objects in Array'); +console::assert(Flatted::stringify($o) === '[{"o":"0","one":1,"two":"1","three":true,"a":"2","test":"3","array":"4"},"two",["2",1,"1",true,"0","3","4"],{"test":"5"},[1,2,3],"OK"]', 'objects in Object'); + +$a2 = Flatted::parse(Flatted::stringify($a)); +$o2 = Flatted::parse(Flatted::stringify($o)); + +console::assert($a2[0] === $a2, 'parsed Array'); +console::assert($o2->o === $o2, 'parsed Object'); + +console::assert( + $a2[1] === 1 && + $a2[2] === 'two' && + $a2[3] === true && + $a2[4] instanceof stdClass && + json_encode($a2[5]) === json_encode(array('test' => 'OK')) && + json_encode($a2[6]) === json_encode([1, 2, 3]), + 'array values are all OK' +); + +console::assert($a2[4] === $a2[4]->o && $a2 === $a2[4]->o->a, 'array recursive values are OK'); + +console::assert( + $o2->one === 1 && + $o2->two === 'two' && + $o2->three === true && + is_array($o2->a) && + json_encode($o2->test) === json_encode(array('test' => 'OK')) && + json_encode($o2->array) === json_encode([1, 2, 3]), + 'object values are all OK' +); + +console::assert($o2->a === $o2->a[0] && $o2 === $o2->a[4], 'object recursive values are OK'); + +console::assert(Flatted::parse(Flatted::stringify(1)) === 1, 'numbers can be parsed too'); +console::assert(Flatted::parse(Flatted::stringify(false)) === false, 'booleans can be parsed too'); +console::assert(Flatted::parse(Flatted::stringify(null)) === null, 'null can be parsed too'); +console::assert(Flatted::parse(Flatted::stringify('test')) === 'test', 'strings can be parsed too'); + +$str = Flatted::parse('[{"prop":"1","a":"2","b":"3"},{"value":123},["4","5"],{"e":"6","t":"7","p":4},{},{"b":"8"},"f",{"a":"9"},["10"],"sup",{"a":1,"d":2,"c":"7","z":"11","h":1},{"g":2,"a":"7","b":"12","f":6},{"r":4,"u":"7","c":5}]'); + +console::assert( + $str->b->t->a === 'sup' && + $str->a[1]->b[0]->c === $str->b->t, + 'str is fine' +); + +$oo = Flatted::parse('[{"a":"1","b":"0","c":"2"},{"aa":"3"},{"ca":"4","cb":"5","cc":"6","cd":"7","ce":"8","cf":"9"},{"aaa":"10"},{"caa":"4"},{"cba":"5"},{"cca":"2"},{"cda":"4"},"value2","value3","value1"]'); + +console::assert( + $oo->a->aa->aaa = 'value1' + && $oo === $oo->b + && $oo === $oo->b + && $oo->c->ca->caa === $oo->c->ca + && $oo->c->cb->cba === $oo->c->cb + && $oo->c->cc->cca === $oo->c + && $oo->c->cd->cda === $oo->c->ca->caa + && $oo->c->ce === 'value2' + && $oo->c->cf === 'value3', + 'parse is correct' +); + +echo "OK\n"; + +?> \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/lru-cache/LICENSE b/tools/node_modules/eslint/node_modules/lru-cache/LICENSE new file mode 100644 index 00000000000000..19129e315fe593 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/lru-cache/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/lru-cache/README.md b/tools/node_modules/eslint/node_modules/lru-cache/README.md new file mode 100644 index 00000000000000..435dfebb7e27d0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/lru-cache/README.md @@ -0,0 +1,166 @@ +# lru cache + +A cache object that deletes the least-recently-used items. + +[![Build Status](https://travis-ci.org/isaacs/node-lru-cache.svg?branch=master)](https://travis-ci.org/isaacs/node-lru-cache) [![Coverage Status](https://coveralls.io/repos/isaacs/node-lru-cache/badge.svg?service=github)](https://coveralls.io/github/isaacs/node-lru-cache) + +## Installation: + +```javascript +npm install lru-cache --save +``` + +## Usage: + +```javascript +var LRU = require("lru-cache") + , options = { max: 500 + , length: function (n, key) { return n * 2 + key.length } + , dispose: function (key, n) { n.close() } + , maxAge: 1000 * 60 * 60 } + , cache = new LRU(options) + , otherCache = new LRU(50) // sets just the max size + +cache.set("key", "value") +cache.get("key") // "value" + +// non-string keys ARE fully supported +// but note that it must be THE SAME object, not +// just a JSON-equivalent object. +var someObject = { a: 1 } +cache.set(someObject, 'a value') +// Object keys are not toString()-ed +cache.set('[object Object]', 'a different value') +assert.equal(cache.get(someObject), 'a value') +// A similar object with same keys/values won't work, +// because it's a different object identity +assert.equal(cache.get({ a: 1 }), undefined) + +cache.reset() // empty the cache +``` + +If you put more stuff in it, then items will fall out. + +If you try to put an oversized thing in it, then it'll fall out right +away. + +## Options + +* `max` The maximum size of the cache, checked by applying the length + function to all values in the cache. Not setting this is kind of + silly, since that's the whole purpose of this lib, but it defaults + to `Infinity`. Setting it to a non-number or negative number will + throw a `TypeError`. Setting it to 0 makes it be `Infinity`. +* `maxAge` Maximum age in ms. Items are not pro-actively pruned out + as they age, but if you try to get an item that is too old, it'll + drop it and return undefined instead of giving it to you. + Setting this to a negative value will make everything seem old! + Setting it to a non-number will throw a `TypeError`. +* `length` Function that is used to calculate the length of stored + items. If you're storing strings or buffers, then you probably want + to do something like `function(n, key){return n.length}`. The default is + `function(){return 1}`, which is fine if you want to store `max` + like-sized things. The item is passed as the first argument, and + the key is passed as the second argumnet. +* `dispose` Function that is called on items when they are dropped + from the cache. This can be handy if you want to close file + descriptors or do other cleanup tasks when items are no longer + accessible. Called with `key, value`. It's called *before* + actually removing the item from the internal cache, so if you want + to immediately put it back in, you'll have to do that in a + `nextTick` or `setTimeout` callback or it won't do anything. +* `stale` By default, if you set a `maxAge`, it'll only actually pull + stale items out of the cache when you `get(key)`. (That is, it's + not pre-emptively doing a `setTimeout` or anything.) If you set + `stale:true`, it'll return the stale value before deleting it. If + you don't set this, then it'll return `undefined` when you try to + get a stale entry, as if it had already been deleted. +* `noDisposeOnSet` By default, if you set a `dispose()` method, then + it'll be called whenever a `set()` operation overwrites an existing + key. If you set this option, `dispose()` will only be called when a + key falls out of the cache, not when it is overwritten. +* `updateAgeOnGet` When using time-expiring entries with `maxAge`, + setting this to `true` will make each item's effective time update + to the current time whenever it is retrieved from cache, causing it + to not expire. (It can still fall out of cache based on recency of + use, of course.) + +## API + +* `set(key, value, maxAge)` +* `get(key) => value` + + Both of these will update the "recently used"-ness of the key. + They do what you think. `maxAge` is optional and overrides the + cache `maxAge` option if provided. + + If the key is not found, `get()` will return `undefined`. + + The key and val can be any value. + +* `peek(key)` + + Returns the key value (or `undefined` if not found) without + updating the "recently used"-ness of the key. + + (If you find yourself using this a lot, you *might* be using the + wrong sort of data structure, but there are some use cases where + it's handy.) + +* `del(key)` + + Deletes a key out of the cache. + +* `reset()` + + Clear the cache entirely, throwing away all values. + +* `has(key)` + + Check if a key is in the cache, without updating the recent-ness + or deleting it for being stale. + +* `forEach(function(value,key,cache), [thisp])` + + Just like `Array.prototype.forEach`. Iterates over all the keys + in the cache, in order of recent-ness. (Ie, more recently used + items are iterated over first.) + +* `rforEach(function(value,key,cache), [thisp])` + + The same as `cache.forEach(...)` but items are iterated over in + reverse order. (ie, less recently used items are iterated over + first.) + +* `keys()` + + Return an array of the keys in the cache. + +* `values()` + + Return an array of the values in the cache. + +* `length` + + Return total length of objects in cache taking into account + `length` options function. + +* `itemCount` + + Return total quantity of objects currently in cache. Note, that + `stale` (see options) items are returned as part of this item + count. + +* `dump()` + + Return an array of the cache entries ready for serialization and usage + with 'destinationCache.load(arr)`. + +* `load(cacheEntriesArray)` + + Loads another cache entries array, obtained with `sourceCache.dump()`, + into the cache. The destination cache is reset before loading new entries + +* `prune()` + + Manually iterates over the entire cache proactively pruning old entries diff --git a/tools/node_modules/eslint/node_modules/lru-cache/index.js b/tools/node_modules/eslint/node_modules/lru-cache/index.js new file mode 100644 index 00000000000000..573b6b85b9779d --- /dev/null +++ b/tools/node_modules/eslint/node_modules/lru-cache/index.js @@ -0,0 +1,334 @@ +'use strict' + +// A linked list to keep track of recently-used-ness +const Yallist = require('yallist') + +const MAX = Symbol('max') +const LENGTH = Symbol('length') +const LENGTH_CALCULATOR = Symbol('lengthCalculator') +const ALLOW_STALE = Symbol('allowStale') +const MAX_AGE = Symbol('maxAge') +const DISPOSE = Symbol('dispose') +const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') +const LRU_LIST = Symbol('lruList') +const CACHE = Symbol('cache') +const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') + +const naiveLength = () => 1 + +// lruList is a yallist where the head is the youngest +// item, and the tail is the oldest. the list contains the Hit +// objects as the entries. +// Each Hit object has a reference to its Yallist.Node. This +// never changes. +// +// cache is a Map (or PseudoMap) that matches the keys to +// the Yallist.Node object. +class LRUCache { + constructor (options) { + if (typeof options === 'number') + options = { max: options } + + if (!options) + options = {} + + if (options.max && (typeof options.max !== 'number' || options.max < 0)) + throw new TypeError('max must be a non-negative number') + // Kind of weird to have a default max of Infinity, but oh well. + const max = this[MAX] = options.max || Infinity + + const lc = options.length || naiveLength + this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc + this[ALLOW_STALE] = options.stale || false + if (options.maxAge && typeof options.maxAge !== 'number') + throw new TypeError('maxAge must be a number') + this[MAX_AGE] = options.maxAge || 0 + this[DISPOSE] = options.dispose + this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false + this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false + this.reset() + } + + // resize the cache when the max changes. + set max (mL) { + if (typeof mL !== 'number' || mL < 0) + throw new TypeError('max must be a non-negative number') + + this[MAX] = mL || Infinity + trim(this) + } + get max () { + return this[MAX] + } + + set allowStale (allowStale) { + this[ALLOW_STALE] = !!allowStale + } + get allowStale () { + return this[ALLOW_STALE] + } + + set maxAge (mA) { + if (typeof mA !== 'number') + throw new TypeError('maxAge must be a non-negative number') + + this[MAX_AGE] = mA + trim(this) + } + get maxAge () { + return this[MAX_AGE] + } + + // resize the cache when the lengthCalculator changes. + set lengthCalculator (lC) { + if (typeof lC !== 'function') + lC = naiveLength + + if (lC !== this[LENGTH_CALCULATOR]) { + this[LENGTH_CALCULATOR] = lC + this[LENGTH] = 0 + this[LRU_LIST].forEach(hit => { + hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) + this[LENGTH] += hit.length + }) + } + trim(this) + } + get lengthCalculator () { return this[LENGTH_CALCULATOR] } + + get length () { return this[LENGTH] } + get itemCount () { return this[LRU_LIST].length } + + rforEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].tail; walker !== null;) { + const prev = walker.prev + forEachStep(this, fn, walker, thisp) + walker = prev + } + } + + forEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].head; walker !== null;) { + const next = walker.next + forEachStep(this, fn, walker, thisp) + walker = next + } + } + + keys () { + return this[LRU_LIST].toArray().map(k => k.key) + } + + values () { + return this[LRU_LIST].toArray().map(k => k.value) + } + + reset () { + if (this[DISPOSE] && + this[LRU_LIST] && + this[LRU_LIST].length) { + this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) + } + + this[CACHE] = new Map() // hash of items by key + this[LRU_LIST] = new Yallist() // list of items in order of use recency + this[LENGTH] = 0 // length of items in the list + } + + dump () { + return this[LRU_LIST].map(hit => + isStale(this, hit) ? false : { + k: hit.key, + v: hit.value, + e: hit.now + (hit.maxAge || 0) + }).toArray().filter(h => h) + } + + dumpLru () { + return this[LRU_LIST] + } + + set (key, value, maxAge) { + maxAge = maxAge || this[MAX_AGE] + + if (maxAge && typeof maxAge !== 'number') + throw new TypeError('maxAge must be a number') + + const now = maxAge ? Date.now() : 0 + const len = this[LENGTH_CALCULATOR](value, key) + + if (this[CACHE].has(key)) { + if (len > this[MAX]) { + del(this, this[CACHE].get(key)) + return false + } + + const node = this[CACHE].get(key) + const item = node.value + + // dispose of the old one before overwriting + // split out into 2 ifs for better coverage tracking + if (this[DISPOSE]) { + if (!this[NO_DISPOSE_ON_SET]) + this[DISPOSE](key, item.value) + } + + item.now = now + item.maxAge = maxAge + item.value = value + this[LENGTH] += len - item.length + item.length = len + this.get(key) + trim(this) + return true + } + + const hit = new Entry(key, value, len, now, maxAge) + + // oversized objects fall out of cache automatically. + if (hit.length > this[MAX]) { + if (this[DISPOSE]) + this[DISPOSE](key, value) + + return false + } + + this[LENGTH] += hit.length + this[LRU_LIST].unshift(hit) + this[CACHE].set(key, this[LRU_LIST].head) + trim(this) + return true + } + + has (key) { + if (!this[CACHE].has(key)) return false + const hit = this[CACHE].get(key).value + return !isStale(this, hit) + } + + get (key) { + return get(this, key, true) + } + + peek (key) { + return get(this, key, false) + } + + pop () { + const node = this[LRU_LIST].tail + if (!node) + return null + + del(this, node) + return node.value + } + + del (key) { + del(this, this[CACHE].get(key)) + } + + load (arr) { + // reset the cache + this.reset() + + const now = Date.now() + // A previous serialized cache has the most recent items first + for (let l = arr.length - 1; l >= 0; l--) { + const hit = arr[l] + const expiresAt = hit.e || 0 + if (expiresAt === 0) + // the item was created without expiration in a non aged cache + this.set(hit.k, hit.v) + else { + const maxAge = expiresAt - now + // dont add already expired items + if (maxAge > 0) { + this.set(hit.k, hit.v, maxAge) + } + } + } + } + + prune () { + this[CACHE].forEach((value, key) => get(this, key, false)) + } +} + +const get = (self, key, doUse) => { + const node = self[CACHE].get(key) + if (node) { + const hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + return undefined + } else { + if (doUse) { + if (self[UPDATE_AGE_ON_GET]) + node.value.now = Date.now() + self[LRU_LIST].unshiftNode(node) + } + } + return hit.value + } +} + +const isStale = (self, hit) => { + if (!hit || (!hit.maxAge && !self[MAX_AGE])) + return false + + const diff = Date.now() - hit.now + return hit.maxAge ? diff > hit.maxAge + : self[MAX_AGE] && (diff > self[MAX_AGE]) +} + +const trim = self => { + if (self[LENGTH] > self[MAX]) { + for (let walker = self[LRU_LIST].tail; + self[LENGTH] > self[MAX] && walker !== null;) { + // We know that we're about to delete this one, and also + // what the next least recently used key will be, so just + // go ahead and set it now. + const prev = walker.prev + del(self, walker) + walker = prev + } + } +} + +const del = (self, node) => { + if (node) { + const hit = node.value + if (self[DISPOSE]) + self[DISPOSE](hit.key, hit.value) + + self[LENGTH] -= hit.length + self[CACHE].delete(hit.key) + self[LRU_LIST].removeNode(node) + } +} + +class Entry { + constructor (key, value, length, now, maxAge) { + this.key = key + this.value = value + this.length = length + this.now = now + this.maxAge = maxAge || 0 + } +} + +const forEachStep = (self, fn, node, thisp) => { + let hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + hit = undefined + } + if (hit) + fn.call(thisp, hit.value, hit.key, self) +} + +module.exports = LRUCache diff --git a/tools/node_modules/eslint/node_modules/lru-cache/package.json b/tools/node_modules/eslint/node_modules/lru-cache/package.json new file mode 100644 index 00000000000000..a7a6da707b62fe --- /dev/null +++ b/tools/node_modules/eslint/node_modules/lru-cache/package.json @@ -0,0 +1,46 @@ +{ + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me" + }, + "bugs": { + "url": "https://github.com/isaacs/node-lru-cache/issues" + }, + "bundleDependencies": false, + "dependencies": { + "yallist": "^4.0.0" + }, + "deprecated": false, + "description": "A cache object that deletes the least-recently-used items.", + "devDependencies": { + "benchmark": "^2.1.4", + "tap": "^14.10.7" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/isaacs/node-lru-cache#readme", + "keywords": [ + "mru", + "lru", + "cache" + ], + "license": "ISC", + "main": "index.js", + "name": "lru-cache", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-lru-cache.git" + }, + "scripts": { + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preversion": "npm test", + "snap": "tap", + "test": "tap" + }, + "version": "6.0.0" +} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/minimist/LICENSE b/tools/node_modules/eslint/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b4412b0..00000000000000 --- a/tools/node_modules/eslint/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/minimist/index.js b/tools/node_modules/eslint/node_modules/minimist/index.js deleted file mode 100644 index d2afe5e4d4056e..00000000000000 --- a/tools/node_modules/eslint/node_modules/minimist/index.js +++ /dev/null @@ -1,245 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {}, unknownFn: null }; - - if (typeof opts['unknown'] === 'function') { - flags.unknownFn = opts['unknown']; - } - - if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { - flags.allBools = true; - } else { - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - flags.strings[aliases[key]] = true; - } - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function argDefined(key, arg) { - return (flags.allBools && /^--[^=]+$/.test(arg)) || - flags.strings[key] || flags.bools[key] || aliases[key]; - } - - function setArg (key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) return; - } - - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - function setKey (obj, keys, value) { - var o = obj; - for (var i = 0; i < keys.length-1; i++) { - var key = keys[i]; - if (key === '__proto__') return; - if (o[key] === undefined) o[key] = {}; - if (o[key] === Object.prototype || o[key] === Number.prototype - || o[key] === String.prototype) o[key] = {}; - if (o[key] === Array.prototype) o[key] = []; - o = o[key]; - } - - var key = keys[keys.length - 1]; - if (key === '__proto__') return; - if (o === Object.prototype || o === Number.prototype - || o === String.prototype) o = {}; - if (o === Array.prototype) o = []; - if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } - } - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - var key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, next, arg); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next, arg) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split('=')[1], arg); - broken = true; - break; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2), arg); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, args[i+1], arg); - i++; - } - else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { - setArg(key, args[i+1] === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } - else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - if (opts['--']) { - argv['--'] = new Array(); - notFlags.forEach(function(key) { - argv['--'].push(key); - }); - } - else { - notFlags.forEach(function(key) { - argv._.push(key); - }); - } - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - diff --git a/tools/node_modules/eslint/node_modules/minimist/package.json b/tools/node_modules/eslint/node_modules/minimist/package.json deleted file mode 100644 index 6c9aeceb3305f7..00000000000000 --- a/tools/node_modules/eslint/node_modules/minimist/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/minimist/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "parse argument options", - "devDependencies": { - "covert": "^1.0.0", - "tap": "~0.4.0", - "tape": "^3.5.0" - }, - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "license": "MIT", - "main": "index.js", - "name": "minimist", - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "scripts": { - "coverage": "covert test/*.js", - "test": "tap test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ] - }, - "version": "1.2.5" -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/minimist/readme.markdown b/tools/node_modules/eslint/node_modules/minimist/readme.markdown deleted file mode 100644 index 5fd97ab11ee9d8..00000000000000 --- a/tools/node_modules/eslint/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,95 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.log(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# security - -Previous versions had a prototype pollution bug that could cause privilege -escalation in some circumstances when handling untrusted user input. - -Please use version 1.2.3 or later: https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a boolean, string or array of strings to always treat as -booleans. if `true` will treat all double hyphenated arguments without equal signs -as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values -* `opts.stopEarly` - when true, populate `argv._` with everything after the -first non-option -* `opts['--']` - when true, populate `argv._` with everything before the `--` -and `argv['--']` with everything after the `--`. Here's an example: - - ``` - > require('./')('one two three -- four five --six'.split(' '), { '--': true }) - { _: [ 'one', 'two', 'three' ], - '--': [ 'four', 'five', '--six' ] } - ``` - - Note that with `opts['--']` set, parsing for arguments still stops after the - `--`. - -* `opts.unknown` - a function which is invoked with a command line parameter not -defined in the `opts` configuration object. If the function returns `false`, the -unknown option is not added to `argv`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff --git a/tools/node_modules/eslint/node_modules/mkdirp/LICENSE b/tools/node_modules/eslint/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb01df66..00000000000000 --- a/tools/node_modules/eslint/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/mkdirp/bin/cmd.js b/tools/node_modules/eslint/node_modules/mkdirp/bin/cmd.js deleted file mode 100755 index d95de15ae9743f..00000000000000 --- a/tools/node_modules/eslint/node_modules/mkdirp/bin/cmd.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env node - -var mkdirp = require('../'); -var minimist = require('minimist'); -var fs = require('fs'); - -var argv = minimist(process.argv.slice(2), { - alias: { m: 'mode', h: 'help' }, - string: [ 'mode' ] -}); -if (argv.help) { - fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); - return; -} - -var paths = argv._.slice(); -var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; - -(function next () { - if (paths.length === 0) return; - var p = paths.shift(); - - if (mode === undefined) mkdirp(p, cb) - else mkdirp(p, mode, cb) - - function cb (err) { - if (err) { - console.error(err.message); - process.exit(1); - } - else next(); - } -})(); diff --git a/tools/node_modules/eslint/node_modules/mkdirp/bin/usage.txt b/tools/node_modules/eslint/node_modules/mkdirp/bin/usage.txt deleted file mode 100644 index f952aa2c7a979e..00000000000000 --- a/tools/node_modules/eslint/node_modules/mkdirp/bin/usage.txt +++ /dev/null @@ -1,12 +0,0 @@ -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - diff --git a/tools/node_modules/eslint/node_modules/mkdirp/index.js b/tools/node_modules/eslint/node_modules/mkdirp/index.js deleted file mode 100644 index 468d7cd8df53be..00000000000000 --- a/tools/node_modules/eslint/node_modules/mkdirp/index.js +++ /dev/null @@ -1,99 +0,0 @@ -var path = require('path'); -var fs = require('fs'); -var _0777 = parseInt('0777', 8); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, opts, f, made) { - if (typeof opts === 'function') { - f = opts; - opts = {}; - } - else if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 - } - if (!made) made = null; - - var cb = f || function () {}; - p = path.resolve(p); - - xfs.mkdir(p, mode, function (er) { - if (!er) { - made = made || p; - return cb(null, made); - } - switch (er.code) { - case 'ENOENT': - if (path.dirname(p) === p) return cb(er); - mkdirP(path.dirname(p), opts, function (er, made) { - if (er) cb(er, made); - else mkdirP(p, opts, cb, made); - }); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - xfs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) cb(er, made) - else cb(null, made); - }); - break; - } - }); -} - -mkdirP.sync = function sync (p, opts, made) { - if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 - } - if (!made) made = null; - - p = path.resolve(p); - - try { - xfs.mkdirSync(p, mode); - made = made || p; - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - made = sync(path.dirname(p), opts, made); - sync(p, opts, made); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - var stat; - try { - stat = xfs.statSync(p); - } - catch (err1) { - throw err0; - } - if (!stat.isDirectory()) throw err0; - break; - } - } - - return made; -}; diff --git a/tools/node_modules/eslint/node_modules/mkdirp/package.json b/tools/node_modules/eslint/node_modules/mkdirp/package.json deleted file mode 100644 index 3b84c165051922..00000000000000 --- a/tools/node_modules/eslint/node_modules/mkdirp/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "bugs": { - "url": "https://github.com/substack/node-mkdirp/issues" - }, - "bundleDependencies": false, - "dependencies": { - "minimist": "^1.2.5" - }, - "deprecated": false, - "description": "Recursively mkdir, like `mkdir -p`", - "devDependencies": { - "mock-fs": "^3.7.0", - "tap": "^5.4.2" - }, - "files": [ - "bin", - "index.js" - ], - "homepage": "https://github.com/substack/node-mkdirp#readme", - "keywords": [ - "mkdir", - "directory" - ], - "license": "MIT", - "main": "index.js", - "name": "mkdirp", - "publishConfig": { - "tag": "legacy" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/substack/node-mkdirp.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/mkdirp/readme.markdown b/tools/node_modules/eslint/node_modules/mkdirp/readme.markdown deleted file mode 100644 index fc314bfbd662cf..00000000000000 --- a/tools/node_modules/eslint/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,100 +0,0 @@ -# mkdirp - -Like `mkdir -p`, but in node.js! - -[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) - -# example - -## pow.js - -```js -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); -``` - -Output - -``` -pow! -``` - -And now /tmp/foo/bar/baz exists, huzzah! - -# methods - -```js -var mkdirp = require('mkdirp'); -``` - -## mkdirp(dir, opts, cb) - -Create a new directory and any necessary subdirectories at `dir` with octal -permission string `opts.mode`. If `opts` is a non-object, it will be treated as -the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777`. - -`cb(err, made)` fires with the error or the first directory `made` -that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and -`opts.fs.stat(path, cb)`. - -## mkdirp.sync(dir, opts) - -Synchronously create a new directory and any necessary subdirectories at `dir` -with octal permission string `opts.mode`. If `opts` is a non-object, it will be -treated as the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777`. - -Returns the first directory that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and -`opts.fs.statSync(path)`. - -# usage - -This package also ships with a `mkdirp` command. - -``` -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - -``` - -# install - -With [npm](http://npmjs.org) do: - -``` -npm install mkdirp -``` - -to get the library, or - -``` -npm install -g mkdirp -``` - -to get the command. - -# license - -MIT diff --git a/tools/node_modules/eslint/node_modules/rimraf/bin.js b/tools/node_modules/eslint/node_modules/rimraf/bin.js index 0d1e17be701ec3..023814cc93e849 100755 --- a/tools/node_modules/eslint/node_modules/rimraf/bin.js +++ b/tools/node_modules/eslint/node_modules/rimraf/bin.js @@ -1,11 +1,24 @@ #!/usr/bin/env node -var rimraf = require('./') +const rimraf = require('./') -var help = false -var dashdash = false -var noglob = false -var args = process.argv.slice(2).filter(function(arg) { +const path = require('path') + +const isRoot = arg => /^(\/|[a-zA-Z]:\\)$/.test(path.resolve(arg)) +const filterOutRoot = arg => { + const ok = preserveRoot === false || !isRoot(arg) + if (!ok) { + console.error(`refusing to remove ${arg}`) + console.error('Set --no-preserve-root to allow this') + } + return ok +} + +let help = false +let dashdash = false +let noglob = false +let preserveRoot = true +const args = process.argv.slice(2).filter(arg => { if (dashdash) return !!arg else if (arg === '--') @@ -16,35 +29,40 @@ var args = process.argv.slice(2).filter(function(arg) { noglob = false else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/)) help = true + else if (arg === '--preserve-root') + preserveRoot = true + else if (arg === '--no-preserve-root') + preserveRoot = false else return !!arg -}) +}).filter(arg => !preserveRoot || filterOutRoot(arg)) + +const go = n => { + if (n >= args.length) + return + const options = noglob ? { glob: false } : {} + rimraf(args[n], options, er => { + if (er) + throw er + go(n+1) + }) +} if (help || args.length === 0) { // If they didn't ask for help, then this is not a "success" - var log = help ? console.log : console.error + const log = help ? console.log : console.error log('Usage: rimraf [ ...]') log('') log(' Deletes all files and folders at "path" recursively.') log('') log('Options:') log('') - log(' -h, --help Display this usage info') - log(' -G, --no-glob Do not expand glob patterns in arguments') - log(' -g, --glob Expand glob patterns in arguments (default)') + log(' -h, --help Display this usage info') + log(' -G, --no-glob Do not expand glob patterns in arguments') + log(' -g, --glob Expand glob patterns in arguments (default)') + log(' --preserve-root Do not remove \'/\' (default)') + log(' --no-preserve-root Do not treat \'/\' specially') + log(' -- Stop parsing flags') process.exit(help ? 0 : 1) } else go(0) - -function go (n) { - if (n >= args.length) - return - var options = {} - if (noglob) - options = { glob: false } - rimraf(args[n], options, function (er) { - if (er) - throw er - go(n+1) - }) -} diff --git a/tools/node_modules/eslint/node_modules/rimraf/package.json b/tools/node_modules/eslint/node_modules/rimraf/package.json index 26432b9d35a0b0..036517586b227f 100644 --- a/tools/node_modules/eslint/node_modules/rimraf/package.json +++ b/tools/node_modules/eslint/node_modules/rimraf/package.json @@ -26,6 +26,9 @@ "bin.js", "rimraf.js" ], + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, "homepage": "https://github.com/isaacs/rimraf#readme", "license": "ISC", "main": "rimraf.js", @@ -35,10 +38,10 @@ "url": "git://github.com/isaacs/rimraf.git" }, "scripts": { - "postpublish": "git push origin --all; git push origin --tags", + "postpublish": "git push origin --follow-tags", "postversion": "npm publish", "preversion": "npm test", "test": "tap test/*.js" }, - "version": "2.6.3" + "version": "3.0.2" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/rimraf/rimraf.js b/tools/node_modules/eslint/node_modules/rimraf/rimraf.js index e80dd10693f8f6..34da4171d75598 100644 --- a/tools/node_modules/eslint/node_modules/rimraf/rimraf.js +++ b/tools/node_modules/eslint/node_modules/rimraf/rimraf.js @@ -1,24 +1,25 @@ -module.exports = rimraf -rimraf.sync = rimrafSync - -var assert = require("assert") -var path = require("path") -var fs = require("fs") -var glob = require("glob") -var _0666 = parseInt('666', 8) +const assert = require("assert") +const path = require("path") +const fs = require("fs") +let glob = undefined +try { + glob = require("glob") +} catch (_err) { + // treat glob as optional. +} -var defaultGlobOpts = { +const defaultGlobOpts = { nosort: true, silent: true } // for EMFILE handling -var timeout = 0 +let timeout = 0 -var isWindows = (process.platform === "win32") +const isWindows = (process.platform === "win32") -function defaults (options) { - var methods = [ +const defaults = options => { + const methods = [ 'unlink', 'chmod', 'stat', @@ -26,7 +27,7 @@ function defaults (options) { 'rmdir', 'readdir' ] - methods.forEach(function(m) { + methods.forEach(m => { options[m] = options[m] || fs[m] m = m + 'Sync' options[m] = options[m] || fs[m] @@ -37,11 +38,14 @@ function defaults (options) { if (options.glob === false) { options.disableGlob = true } + if (options.disableGlob !== true && glob === undefined) { + throw Error('glob dependency not found, set `options.disableGlob = true` if intentional') + } options.disableGlob = options.disableGlob || false options.glob = options.glob || defaultGlobOpts } -function rimraf (p, options, cb) { +const rimraf = (p, options, cb) => { if (typeof options === 'function') { cb = options options = {} @@ -55,27 +59,17 @@ function rimraf (p, options, cb) { defaults(options) - var busyTries = 0 - var errState = null - var n = 0 - - if (options.disableGlob || !glob.hasMagic(p)) - return afterGlob(null, [p]) + let busyTries = 0 + let errState = null + let n = 0 - options.lstat(p, function (er, stat) { - if (!er) - return afterGlob(null, [p]) - - glob(p, options.glob, afterGlob) - }) - - function next (er) { + const next = (er) => { errState = errState || er if (--n === 0) cb(errState) } - function afterGlob (er, results) { + const afterGlob = (er, results) => { if (er) return cb(er) @@ -83,24 +77,19 @@ function rimraf (p, options, cb) { if (n === 0) return cb() - results.forEach(function (p) { - rimraf_(p, options, function CB (er) { + results.forEach(p => { + const CB = (er) => { if (er) { if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && busyTries < options.maxBusyTries) { busyTries ++ - var time = busyTries * 100 // try again, with the same exact callback as this one. - return setTimeout(function () { - rimraf_(p, options, CB) - }, time) + return setTimeout(() => rimraf_(p, options, CB), busyTries * 100) } // this one won't happen if graceful-fs is used. if (er.code === "EMFILE" && timeout < options.emfileWait) { - return setTimeout(function () { - rimraf_(p, options, CB) - }, timeout ++) + return setTimeout(() => rimraf_(p, options, CB), timeout ++) } // already gone @@ -109,9 +98,21 @@ function rimraf (p, options, cb) { timeout = 0 next(er) - }) + } + rimraf_(p, options, CB) }) } + + if (options.disableGlob || !glob.hasMagic(p)) + return afterGlob(null, [p]) + + options.lstat(p, (er, stat) => { + if (!er) + return afterGlob(null, [p]) + + glob(p, options.glob, afterGlob) + }) + } // Two possible strategies. @@ -125,14 +126,14 @@ function rimraf (p, options, cb) { // // If anyone ever complains about this, then I guess the strategy could // be made configurable somehow. But until then, YAGNI. -function rimraf_ (p, options, cb) { +const rimraf_ = (p, options, cb) => { assert(p) assert(options) assert(typeof cb === 'function') // sunos lets the root user unlink directories, which is... weird. // so we have to lstat here and make sure it's not a dir. - options.lstat(p, function (er, st) { + options.lstat(p, (er, st) => { if (er && er.code === "ENOENT") return cb(null) @@ -143,7 +144,7 @@ function rimraf_ (p, options, cb) { if (st && st.isDirectory()) return rmdir(p, options, er, cb) - options.unlink(p, function (er) { + options.unlink(p, er => { if (er) { if (er.code === "ENOENT") return cb(null) @@ -159,18 +160,16 @@ function rimraf_ (p, options, cb) { }) } -function fixWinEPERM (p, options, er, cb) { +const fixWinEPERM = (p, options, er, cb) => { assert(p) assert(options) assert(typeof cb === 'function') - if (er) - assert(er instanceof Error) - options.chmod(p, _0666, function (er2) { + options.chmod(p, 0o666, er2 => { if (er2) cb(er2.code === "ENOENT" ? null : er) else - options.stat(p, function(er3, stats) { + options.stat(p, (er3, stats) => { if (er3) cb(er3.code === "ENOENT" ? null : er) else if (stats.isDirectory()) @@ -181,14 +180,12 @@ function fixWinEPERM (p, options, er, cb) { }) } -function fixWinEPERMSync (p, options, er) { +const fixWinEPERMSync = (p, options, er) => { assert(p) assert(options) - if (er) - assert(er instanceof Error) try { - options.chmodSync(p, _0666) + options.chmodSync(p, 0o666) } catch (er2) { if (er2.code === "ENOENT") return @@ -196,8 +193,9 @@ function fixWinEPERMSync (p, options, er) { throw er } + let stats try { - var stats = options.statSync(p) + stats = options.statSync(p) } catch (er3) { if (er3.code === "ENOENT") return @@ -211,17 +209,15 @@ function fixWinEPERMSync (p, options, er) { options.unlinkSync(p) } -function rmdir (p, options, originalEr, cb) { +const rmdir = (p, options, originalEr, cb) => { assert(p) assert(options) - if (originalEr) - assert(originalEr instanceof Error) assert(typeof cb === 'function') // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) // if we guessed wrong, and it's not a directory, then // raise the original error. - options.rmdir(p, function (er) { + options.rmdir(p, er => { if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) rmkids(p, options, cb) else if (er && er.code === "ENOTDIR") @@ -231,20 +227,20 @@ function rmdir (p, options, originalEr, cb) { }) } -function rmkids(p, options, cb) { +const rmkids = (p, options, cb) => { assert(p) assert(options) assert(typeof cb === 'function') - options.readdir(p, function (er, files) { + options.readdir(p, (er, files) => { if (er) return cb(er) - var n = files.length + let n = files.length if (n === 0) return options.rmdir(p, cb) - var errState - files.forEach(function (f) { - rimraf(path.join(p, f), options, function (er) { + let errState + files.forEach(f => { + rimraf(path.join(p, f), options, er => { if (errState) return if (er) @@ -259,7 +255,7 @@ function rmkids(p, options, cb) { // this looks simpler, and is strictly *faster*, but will // tie up the JavaScript thread and fail on excessively // deep directory trees. -function rimrafSync (p, options) { +const rimrafSync = (p, options) => { options = options || {} defaults(options) @@ -268,7 +264,7 @@ function rimrafSync (p, options) { assert(options, 'rimraf: missing options') assert.equal(typeof options, 'object', 'rimraf: options should be object') - var results + let results if (options.disableGlob || !glob.hasMagic(p)) { results = [p] @@ -284,11 +280,12 @@ function rimrafSync (p, options) { if (!results.length) return - for (var i = 0; i < results.length; i++) { - var p = results[i] + for (let i = 0; i < results.length; i++) { + const p = results[i] + let st try { - var st = options.lstatSync(p) + st = options.lstatSync(p) } catch (er) { if (er.code === "ENOENT") return @@ -317,11 +314,9 @@ function rimrafSync (p, options) { } } -function rmdirSync (p, options, originalEr) { +const rmdirSync = (p, options, originalEr) => { assert(p) assert(options) - if (originalEr) - assert(originalEr instanceof Error) try { options.rmdirSync(p) @@ -335,12 +330,10 @@ function rmdirSync (p, options, originalEr) { } } -function rmkidsSync (p, options) { +const rmkidsSync = (p, options) => { assert(p) assert(options) - options.readdirSync(p).forEach(function (f) { - rimrafSync(path.join(p, f), options) - }) + options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options)) // We only end up here once we got ENOTEMPTY at least once, and // at this point, we are guaranteed to have removed all the kids. @@ -348,12 +341,12 @@ function rmkidsSync (p, options) { // try really hard to delete stuff on windows, because it has a // PROFOUNDLY annoying habit of not closing handles promptly when // files are deleted, resulting in spurious ENOTEMPTY errors. - var retries = isWindows ? 100 : 1 - var i = 0 + const retries = isWindows ? 100 : 1 + let i = 0 do { - var threw = true + let threw = true try { - var ret = options.rmdirSync(p, options) + const ret = options.rmdirSync(p, options) threw = false return ret } finally { @@ -362,3 +355,6 @@ function rmkidsSync (p, options) { } } while (true) } + +module.exports = rimraf +rimraf.sync = rimrafSync diff --git a/tools/node_modules/eslint/node_modules/semver/classes/comparator.js b/tools/node_modules/eslint/node_modules/semver/classes/comparator.js index 3595792d0ed0cc..dbbef2d8fe20e6 100644 --- a/tools/node_modules/eslint/node_modules/semver/classes/comparator.js +++ b/tools/node_modules/eslint/node_modules/semver/classes/comparator.js @@ -5,12 +5,7 @@ class Comparator { return ANY } constructor (comp, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } + options = parseOptions(options) if (comp instanceof Comparator) { if (comp.loose === !!options.loose) { @@ -132,6 +127,7 @@ class Comparator { module.exports = Comparator +const parseOptions = require('../internal/parse-options') const {re, t} = require('../internal/re') const cmp = require('../functions/cmp') const debug = require('../internal/debug') diff --git a/tools/node_modules/eslint/node_modules/semver/classes/range.js b/tools/node_modules/eslint/node_modules/semver/classes/range.js index 83f8967717ebbf..aa04f6bff94461 100644 --- a/tools/node_modules/eslint/node_modules/semver/classes/range.js +++ b/tools/node_modules/eslint/node_modules/semver/classes/range.js @@ -1,12 +1,7 @@ // hoisted class for cyclic dependency class Range { constructor (range, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } + options = parseOptions(options) if (range instanceof Range) { if ( @@ -46,6 +41,24 @@ class Range { throw new TypeError(`Invalid SemVer Range: ${range}`) } + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) + this.set = [first] + else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } + this.format() } @@ -64,8 +77,17 @@ class Range { } parseRange (range) { - const loose = this.options.loose range = range.trim() + + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = Object.keys(this.options).join(',') + const memoKey = `parseRange:${memoOpts}:${range}` + const cached = cache.get(memoKey) + if (cached) + return cached + + const loose = this.options.loose // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) @@ -87,15 +109,33 @@ class Range { // ready to be split into comparators. const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - return range + const rangeList = range .split(' ') .map(comp => parseComparator(comp, this.options)) .join(' ') .split(/\s+/) + // >=0.0.0 is equivalent to * .map(comp => replaceGTE0(comp, this.options)) // in loose mode, throw out any that are not valid comparators .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) .map(comp => new Comparator(comp, this.options)) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const l = rangeList.length + const rangeMap = new Map() + for (const comp of rangeList) { + if (isNullSet(comp)) + return [comp] + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) + rangeMap.delete('') + + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result } intersects (range, options) { @@ -144,6 +184,10 @@ class Range { } module.exports = Range +const LRU = require('lru-cache') +const cache = new LRU({ max: 1000 }) + +const parseOptions = require('../internal/parse-options') const Comparator = require('./comparator') const debug = require('../internal/debug') const SemVer = require('./semver') @@ -155,6 +199,9 @@ const { caretTrimReplace } = require('../internal/re') +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + // take a set of comparators and determine whether there // exists a version which can satisfy it const isSatisfiable = (comparators, options) => { diff --git a/tools/node_modules/eslint/node_modules/semver/classes/semver.js b/tools/node_modules/eslint/node_modules/semver/classes/semver.js index 73247ad2b7eabc..ed81a7ec6cbfe6 100644 --- a/tools/node_modules/eslint/node_modules/semver/classes/semver.js +++ b/tools/node_modules/eslint/node_modules/semver/classes/semver.js @@ -2,15 +2,12 @@ const debug = require('../internal/debug') const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') const { re, t } = require('../internal/re') +const parseOptions = require('../internal/parse-options') const { compareIdentifiers } = require('../internal/identifiers') class SemVer { constructor (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } + options = parseOptions(options) + if (version instanceof SemVer) { if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) { diff --git a/tools/node_modules/eslint/node_modules/semver/functions/parse.js b/tools/node_modules/eslint/node_modules/semver/functions/parse.js index 457fee04a95c83..11f20f03745ab2 100644 --- a/tools/node_modules/eslint/node_modules/semver/functions/parse.js +++ b/tools/node_modules/eslint/node_modules/semver/functions/parse.js @@ -2,13 +2,9 @@ const {MAX_LENGTH} = require('../internal/constants') const { re, t } = require('../internal/re') const SemVer = require('../classes/semver') +const parseOptions = require('../internal/parse-options') const parse = (version, options) => { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } + options = parseOptions(options) if (version instanceof SemVer) { return version diff --git a/tools/node_modules/eslint/node_modules/semver/internal/parse-options.js b/tools/node_modules/eslint/node_modules/semver/internal/parse-options.js new file mode 100644 index 00000000000000..42d2ebd6fa32f8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/semver/internal/parse-options.js @@ -0,0 +1,11 @@ +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl'] +const parseOptions = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true + return options + }, {}) +module.exports = parseOptions diff --git a/tools/node_modules/eslint/node_modules/semver/package.json b/tools/node_modules/eslint/node_modules/semver/package.json index a45cbad6a9c2d2..2aa14e5a6dd7e9 100644 --- a/tools/node_modules/eslint/node_modules/semver/package.json +++ b/tools/node_modules/eslint/node_modules/semver/package.json @@ -6,6 +6,9 @@ "url": "https://github.com/npm/node-semver/issues" }, "bundleDependencies": false, + "dependencies": { + "lru-cache": "^6.0.0" + }, "deprecated": false, "description": "The semantic version parser used by npm.", "devDependencies": { @@ -43,5 +46,5 @@ "check-coverage": true, "coverage-map": "map.js" }, - "version": "7.3.2" + "version": "7.3.4" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js b/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js index 7118d237bf5c41..2fac412914fe25 100644 --- a/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js +++ b/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js @@ -19,6 +19,7 @@ const minVersion = (range, loose) => { for (let i = 0; i < range.set.length; ++i) { const comparators = range.set[i] + let setMin = null comparators.forEach((comparator) => { // Clone to avoid manipulating the comparator's semver object. const compver = new SemVer(comparator.semver.version) @@ -33,8 +34,8 @@ const minVersion = (range, loose) => { /* fallthrough */ case '': case '>=': - if (!minver || gt(minver, compver)) { - minver = compver + if (!setMin || gt(compver, setMin)) { + setMin = compver } break case '<': @@ -46,6 +47,8 @@ const minVersion = (range, loose) => { throw new Error(`Unexpected operation: ${comparator.operator}`) } }) + if (setMin && (!minver || gt(minver, setMin))) + minver = setMin } if (minver && range.test(minver)) { diff --git a/tools/node_modules/eslint/node_modules/semver/ranges/outside.js b/tools/node_modules/eslint/node_modules/semver/ranges/outside.js index e35ed1176c84ed..2a4b0a13f9e298 100644 --- a/tools/node_modules/eslint/node_modules/semver/ranges/outside.js +++ b/tools/node_modules/eslint/node_modules/semver/ranges/outside.js @@ -32,7 +32,7 @@ const outside = (version, range, hilo, options) => { throw new TypeError('Must provide a hilo val of "<" or ">"') } - // If it satisifes the range it is not outside + // If it satisfies the range it is not outside if (satisfies(version, range, options)) { return false } diff --git a/tools/node_modules/eslint/node_modules/semver/ranges/subset.js b/tools/node_modules/eslint/node_modules/semver/ranges/subset.js index 6ae29a3c92b892..bb7d15fe2696bb 100644 --- a/tools/node_modules/eslint/node_modules/semver/ranges/subset.js +++ b/tools/node_modules/eslint/node_modules/semver/ranges/subset.js @@ -21,15 +21,18 @@ const compare = require('../functions/compare.js') // - If EQ satisfies every C, return true // - Else return false // - If GT -// - If GT is lower than any > or >= comp in C, return false +// - If GT.semver is lower than any > or >= comp in C, return false // - If GT is >=, and GT.semver does not satisfy every C, return false // - If LT -// - If LT.semver is greater than that of any > comp in C, return false +// - If LT.semver is greater than any < or <= comp in C, return false // - If LT is <=, and LT.semver does not satisfy every C, return false // - If any C is a = range, and GT or LT are set, return false // - Else return true const subset = (sub, dom, options) => { + if (sub === dom) + return true + sub = new Range(sub, options) dom = new Range(dom, options) let sawNonNull = false @@ -52,6 +55,9 @@ const subset = (sub, dom, options) => { } const simpleSubset = (sub, dom, options) => { + if (sub === dom) + return true + if (sub.length === 1 && sub[0].semver === ANY) return dom.length === 1 && dom[0].semver === ANY @@ -90,6 +96,7 @@ const simpleSubset = (sub, dom, options) => { if (!satisfies(eq, String(c), options)) return false } + return true } @@ -101,7 +108,7 @@ const simpleSubset = (sub, dom, options) => { if (gt) { if (c.operator === '>' || c.operator === '>=') { higher = higherGT(gt, c, options) - if (higher === c) + if (higher === c && higher !== gt) return false } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) return false @@ -109,7 +116,7 @@ const simpleSubset = (sub, dom, options) => { if (lt) { if (c.operator === '<' || c.operator === '<=') { lower = lowerLT(lt, c, options) - if (lower === c) + if (lower === c && lower !== lt) return false } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) return false diff --git a/tools/node_modules/eslint/node_modules/write/LICENSE b/tools/node_modules/eslint/node_modules/write/LICENSE deleted file mode 100644 index 943e71d05511e2..00000000000000 --- a/tools/node_modules/eslint/node_modules/write/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/write/README.md b/tools/node_modules/eslint/node_modules/write/README.md deleted file mode 100644 index 31c95974bb7a0f..00000000000000 --- a/tools/node_modules/eslint/node_modules/write/README.md +++ /dev/null @@ -1,178 +0,0 @@ -# write [![NPM version](https://img.shields.io/npm/v/write.svg?style=flat)](https://www.npmjs.com/package/write) [![NPM monthly downloads](https://img.shields.io/npm/dm/write.svg?style=flat)](https://npmjs.org/package/write) [![NPM total downloads](https://img.shields.io/npm/dt/write.svg?style=flat)](https://npmjs.org/package/write) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/write.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/write) - -> Write data to a file, replacing the file if it already exists and creating any intermediate directories if they don't already exist. Thin wrapper around node's native fs methods. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save write -``` - -## Usage - -```js -var writeFile = require('write'); -``` - -## API - -### [writeFile](index.js#L40) - -Asynchronously writes data to a file, replacing the file if it already exists and creating any intermediate directories if they don't already exist. Data can be a string or a buffer. Returns a promise if a callback function is not passed. - -**Params** - -* `filepath` **{string|Buffer|integer}**: filepath or file descriptor. -* `data` **{string|Buffer|Uint8Array}**: String to write to disk. -* `options` **{object}**: Options to pass to [fs.writeFile](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback) and/or [mkdirp](https://github.com/substack/node-mkdirp) -* `callback` **{Function}**: (optional) If no callback is provided, a promise is returned. - -**Example** - -```js -var writeFile = require('write'); -writeFile('foo.txt', 'This is content...', function(err) { - if (err) console.log(err); -}); - -// promise -writeFile('foo.txt', 'This is content...') - .then(function() { - // do stuff - }); -``` - -### [.promise](index.js#L82) - -The promise version of [writeFile](#writefile). Returns a promise. - -**Params** - -* `filepath` **{string|Buffer|integer}**: filepath or file descriptor. -* `val` **{string|Buffer|Uint8Array}**: String or buffer to write to disk. -* `options` **{object}**: Options to pass to [fs.writeFile](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback) and/or [mkdirp](https://github.com/substack/node-mkdirp) -* `returns` **{Promise}** - -**Example** - -```js -var writeFile = require('write'); -writeFile.promise('foo.txt', 'This is content...') - .then(function() { - // do stuff - }); -``` - -### [.sync](index.js#L120) - -The synchronous version of [writeFile](#writefile). Returns undefined. - -**Params** - -* `filepath` **{string|Buffer|integer}**: filepath or file descriptor. -* `data` **{string|Buffer|Uint8Array}**: String or buffer to write to disk. -* `options` **{object}**: Options to pass to [fs.writeFileSync](https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options) and/or [mkdirp](https://github.com/substack/node-mkdirp) -* `returns` **{undefined}** - -**Example** - -```js -var writeFile = require('write'); -writeFile.sync('foo.txt', 'This is content...'); -``` - -### [.stream](index.js#L151) - -Uses `fs.createWriteStream` to write data to a file, replacing the file if it already exists and creating any intermediate directories if they don't already exist. Data can be a string or a buffer. Returns a new [WriteStream](https://nodejs.org/api/fs.html#fs_class_fs_writestream) object. - -**Params** - -* `filepath` **{string|Buffer|integer}**: filepath or file descriptor. -* `options` **{object}**: Options to pass to [mkdirp](https://github.com/substack/node-mkdirp) and [fs.createWriteStream](https://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options) -* `returns` **{Stream}**: Returns a new [WriteStream](https://nodejs.org/api/fs.html#fs_class_fs_writestream) object. (See [Writable Stream](https://nodejs.org/api/stream.html#stream_class_stream_writable)). - -**Example** - -```js -var fs = require('fs'); -var writeFile = require('write'); -fs.createReadStream('README.md') - .pipe(writeFile.stream('a/b/c/other-file.md')) - .on('close', function() { - // do stuff - }); -``` - -## Release history - -### v1.0.2 - 2017-07-11 - -* improved documentation - -### v1.0.0 - 2017-07-09 - -**Added** - -* [promise support](#promise) - -**Changed** - -* The main export will now return a promise if no callback is passed - -## About - -### Related projects - -* [delete](https://www.npmjs.com/package/delete): Delete files and folders and any intermediate directories if they exist (sync and async). | [homepage](https://github.com/jonschlinkert/delete "Delete files and folders and any intermediate directories if they exist (sync and async).") -* [read-data](https://www.npmjs.com/package/read-data): Read JSON or YAML files. | [homepage](https://github.com/jonschlinkert/read-data "Read JSON or YAML files.") -* [read-yaml](https://www.npmjs.com/package/read-yaml): Very thin wrapper around js-yaml for directly reading in YAML files. | [homepage](https://github.com/jonschlinkert/read-yaml "Very thin wrapper around js-yaml for directly reading in YAML files.") -* [write-data](https://www.npmjs.com/package/write-data): Write a YAML or JSON file to disk. Automatically detects the format to write based… [more](https://github.com/jonschlinkert/write-data) | [homepage](https://github.com/jonschlinkert/write-data "Write a YAML or JSON file to disk. Automatically detects the format to write based on extension. Or pass `ext` on the options.") -* [write-json](https://www.npmjs.com/package/write-json): Write a JSON file to disk, also creates intermediate directories in the destination path if… [more](https://github.com/jonschlinkert/write-json) | [homepage](https://github.com/jonschlinkert/write-json "Write a JSON file to disk, also creates intermediate directories in the destination path if they don't already exist.") -* [write-yaml](https://www.npmjs.com/package/write-yaml): Write YAML. Converts JSON to YAML writes it to the specified file. | [homepage](https://github.com/jonschlinkert/write-yaml "Write YAML. Converts JSON to YAML writes it to the specified file.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 33 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [tunnckoCore](https://github.com/tunnckoCore) | - -### Building docs - -_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ - -To generate the readme, run the following command: - -```sh -$ npm install -g verbose/verb#dev verb-generate-readme && verb -``` - -### Running tests - -Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: - -```sh -$ npm install && npm test -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT License](LICENSE). - -*** - -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 11, 2017._ \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/write/index.js b/tools/node_modules/eslint/node_modules/write/index.js deleted file mode 100644 index b2b4b4380a359c..00000000000000 --- a/tools/node_modules/eslint/node_modules/write/index.js +++ /dev/null @@ -1,160 +0,0 @@ -/*! - * write - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var fs = require('fs'); -var path = require('path'); -var mkdirp = require('mkdirp'); - -/** - * Asynchronously writes data to a file, replacing the file if it already - * exists and creating any intermediate directories if they don't already - * exist. Data can be a string or a buffer. Returns a promise if a callback - * function is not passed. - * - * ```js - * var writeFile = require('write'); - * writeFile('foo.txt', 'This is content...', function(err) { - * if (err) console.log(err); - * }); - * - * // promise - * writeFile('foo.txt', 'This is content...') - * .then(function() { - * // do stuff - * }); - * ``` - * @name writeFile - * @param {string|Buffer|integer} `filepath` filepath or file descriptor. - * @param {string|Buffer|Uint8Array} `data` String to write to disk. - * @param {object} `options` Options to pass to [fs.writeFile][fs]{#fs_fs_writefile_file_data_options_callback} and/or [mkdirp][] - * @param {Function} `callback` (optional) If no callback is provided, a promise is returned. - * @api public - */ - -function writeFile(filepath, data, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - if (typeof cb !== 'function') { - return writeFile.promise.apply(null, arguments); - } - - if (typeof filepath !== 'string') { - cb(new TypeError('expected filepath to be a string')); - return; - } - - mkdirp(path.dirname(filepath), options, function(err) { - if (err) { - cb(err); - return; - } - fs.writeFile(filepath, data, options, cb); - }); -}; - -/** - * The promise version of [writeFile](#writefile). Returns a promise. - * - * ```js - * var writeFile = require('write'); - * writeFile.promise('foo.txt', 'This is content...') - * .then(function() { - * // do stuff - * }); - * ``` - * @name .promise - * @param {string|Buffer|integer} `filepath` filepath or file descriptor. - * @param {string|Buffer|Uint8Array} `val` String or buffer to write to disk. - * @param {object} `options` Options to pass to [fs.writeFile][fs]{#fs_fs_writefile_file_data_options_callback} and/or [mkdirp][] - * @return {Promise} - * @api public - */ - -writeFile.promise = function(filepath, val, options) { - if (typeof filepath !== 'string') { - return Promise.reject(new TypeError('expected filepath to be a string')); - } - - return new Promise(function(resolve, reject) { - mkdirp(path.dirname(filepath), options, function(err) { - if (err) { - reject(err); - return; - } - - fs.writeFile(filepath, val, options, function(err) { - if (err) { - reject(err); - return; - } - resolve(val); - }); - }); - }); -}; - -/** - * The synchronous version of [writeFile](#writefile). Returns undefined. - * - * ```js - * var writeFile = require('write'); - * writeFile.sync('foo.txt', 'This is content...'); - * ``` - * @name .sync - * @param {string|Buffer|integer} `filepath` filepath or file descriptor. - * @param {string|Buffer|Uint8Array} `data` String or buffer to write to disk. - * @param {object} `options` Options to pass to [fs.writeFileSync][fs]{#fs_fs_writefilesync_file_data_options} and/or [mkdirp][] - * @return {undefined} - * @api public - */ - -writeFile.sync = function(filepath, data, options) { - if (typeof filepath !== 'string') { - throw new TypeError('expected filepath to be a string'); - } - mkdirp.sync(path.dirname(filepath), options); - fs.writeFileSync(filepath, data, options); -}; - -/** - * Uses `fs.createWriteStream` to write data to a file, replacing the - * file if it already exists and creating any intermediate directories - * if they don't already exist. Data can be a string or a buffer. Returns - * a new [WriteStream](https://nodejs.org/api/fs.html#fs_class_fs_writestream) - * object. - * - * ```js - * var fs = require('fs'); - * var writeFile = require('write'); - * fs.createReadStream('README.md') - * .pipe(writeFile.stream('a/b/c/other-file.md')) - * .on('close', function() { - * // do stuff - * }); - * ``` - * @name .stream - * @param {string|Buffer|integer} `filepath` filepath or file descriptor. - * @param {object} `options` Options to pass to [mkdirp][] and [fs.createWriteStream][fs]{#fs_fs_createwritestream_path_options} - * @return {Stream} Returns a new [WriteStream](https://nodejs.org/api/fs.html#fs_class_fs_writestream) object. (See [Writable Stream](https://nodejs.org/api/stream.html#stream_class_stream_writable)). - * @api public - */ - -writeFile.stream = function(filepath, options) { - mkdirp.sync(path.dirname(filepath), options); - return fs.createWriteStream(filepath, options); -}; - -/** - * Expose `writeFile` - */ - -module.exports = writeFile; diff --git a/tools/node_modules/eslint/node_modules/write/package.json b/tools/node_modules/eslint/node_modules/write/package.json deleted file mode 100644 index 4805b30afd5c42..00000000000000 --- a/tools/node_modules/eslint/node_modules/write/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/write/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Charlike Mike Reagent", - "url": "https://i.am.charlike.online" - }, - { - "name": "Jon Schlinkert", - "url": "http://twitter.com/jonschlinkert" - } - ], - "dependencies": { - "mkdirp": "^0.5.1" - }, - "deprecated": false, - "description": "Write data to a file, replacing the file if it already exists and creating any intermediate directories if they don't already exist. Thin wrapper around node's native fs methods.", - "devDependencies": { - "async-each": "^1.0.1", - "delete": "^1.1.0", - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/jonschlinkert/write", - "keywords": [ - "file", - "filepath", - "files", - "filesystem", - "folder", - "fs", - "fs.writeFile", - "fs.writeFileSync", - "path", - "write" - ], - "license": "MIT", - "main": "index.js", - "name": "write", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/write.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "run": true, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "delete", - "read-data", - "read-yaml", - "write-data", - "write-json", - "write-yaml" - ] - }, - "reflinks": [ - "verb" - ], - "lint": { - "reflinks": true - } - }, - "version": "1.0.3" -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/yallist/LICENSE b/tools/node_modules/eslint/node_modules/yallist/LICENSE new file mode 100644 index 00000000000000..19129e315fe593 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yallist/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/yallist/README.md b/tools/node_modules/eslint/node_modules/yallist/README.md new file mode 100644 index 00000000000000..f5861018696688 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yallist/README.md @@ -0,0 +1,204 @@ +# yallist + +Yet Another Linked List + +There are many doubly-linked list implementations like it, but this +one is mine. + +For when an array would be too big, and a Map can't be iterated in +reverse order. + + +[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist) + +## basic usage + +```javascript +var yallist = require('yallist') +var myList = yallist.create([1, 2, 3]) +myList.push('foo') +myList.unshift('bar') +// of course pop() and shift() are there, too +console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo'] +myList.forEach(function (k) { + // walk the list head to tail +}) +myList.forEachReverse(function (k, index, list) { + // walk the list tail to head +}) +var myDoubledList = myList.map(function (k) { + return k + k +}) +// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo'] +// mapReverse is also a thing +var myDoubledListReverse = myList.mapReverse(function (k) { + return k + k +}) // ['foofoo', 6, 4, 2, 'barbar'] + +var reduced = myList.reduce(function (set, entry) { + set += entry + return set +}, 'start') +console.log(reduced) // 'startfoo123bar' +``` + +## api + +The whole API is considered "public". + +Functions with the same name as an Array method work more or less the +same way. + +There's reverse versions of most things because that's the point. + +### Yallist + +Default export, the class that holds and manages a list. + +Call it with either a forEach-able (like an array) or a set of +arguments, to initialize the list. + +The Array-ish methods all act like you'd expect. No magic length, +though, so if you change that it won't automatically prune or add +empty spots. + +### Yallist.create(..) + +Alias for Yallist function. Some people like factories. + +#### yallist.head + +The first node in the list + +#### yallist.tail + +The last node in the list + +#### yallist.length + +The number of nodes in the list. (Change this at your peril. It is +not magic like Array length.) + +#### yallist.toArray() + +Convert the list to an array. + +#### yallist.forEach(fn, [thisp]) + +Call a function on each item in the list. + +#### yallist.forEachReverse(fn, [thisp]) + +Call a function on each item in the list, in reverse order. + +#### yallist.get(n) + +Get the data at position `n` in the list. If you use this a lot, +probably better off just using an Array. + +#### yallist.getReverse(n) + +Get the data at position `n`, counting from the tail. + +#### yallist.map(fn, thisp) + +Create a new Yallist with the result of calling the function on each +item. + +#### yallist.mapReverse(fn, thisp) + +Same as `map`, but in reverse. + +#### yallist.pop() + +Get the data from the list tail, and remove the tail from the list. + +#### yallist.push(item, ...) + +Insert one or more items to the tail of the list. + +#### yallist.reduce(fn, initialValue) + +Like Array.reduce. + +#### yallist.reduceReverse + +Like Array.reduce, but in reverse. + +#### yallist.reverse + +Reverse the list in place. + +#### yallist.shift() + +Get the data from the list head, and remove the head from the list. + +#### yallist.slice([from], [to]) + +Just like Array.slice, but returns a new Yallist. + +#### yallist.sliceReverse([from], [to]) + +Just like yallist.slice, but the result is returned in reverse. + +#### yallist.toArray() + +Create an array representation of the list. + +#### yallist.toArrayReverse() + +Create a reversed array representation of the list. + +#### yallist.unshift(item, ...) + +Insert one or more items to the head of the list. + +#### yallist.unshiftNode(node) + +Move a Node object to the front of the list. (That is, pull it out of +wherever it lives, and make it the new head.) + +If the node belongs to a different list, then that list will remove it +first. + +#### yallist.pushNode(node) + +Move a Node object to the end of the list. (That is, pull it out of +wherever it lives, and make it the new tail.) + +If the node belongs to a list already, then that list will remove it +first. + +#### yallist.removeNode(node) + +Remove a node from the list, preserving referential integrity of head +and tail and other nodes. + +Will throw an error if you try to have a list remove a node that +doesn't belong to it. + +### Yallist.Node + +The class that holds the data and is actually the list. + +Call with `var n = new Node(value, previousNode, nextNode)` + +Note that if you do direct operations on Nodes themselves, it's very +easy to get into weird states where the list is broken. Be careful :) + +#### node.next + +The next node in the list. + +#### node.prev + +The previous node in the list. + +#### node.value + +The data the node contains. + +#### node.list + +The list to which this node belongs. (Null if it does not belong to +any list.) diff --git a/tools/node_modules/eslint/node_modules/yallist/iterator.js b/tools/node_modules/eslint/node_modules/yallist/iterator.js new file mode 100644 index 00000000000000..d41c97a19f9849 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yallist/iterator.js @@ -0,0 +1,8 @@ +'use strict' +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value + } + } +} diff --git a/tools/node_modules/eslint/node_modules/yallist/package.json b/tools/node_modules/eslint/node_modules/yallist/package.json new file mode 100644 index 00000000000000..2d0ad3cb6e2f0c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yallist/package.json @@ -0,0 +1,39 @@ +{ + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/yallist/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Yet Another Linked List", + "devDependencies": { + "tap": "^12.1.0" + }, + "directories": { + "test": "test" + }, + "files": [ + "yallist.js", + "iterator.js" + ], + "homepage": "https://github.com/isaacs/yallist#readme", + "license": "ISC", + "main": "yallist.js", + "name": "yallist", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/yallist.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100" + }, + "version": "4.0.0" +} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/yallist/yallist.js b/tools/node_modules/eslint/node_modules/yallist/yallist.js new file mode 100644 index 00000000000000..4e83ab1c542a51 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yallist/yallist.js @@ -0,0 +1,426 @@ +'use strict' +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } + + self.tail = null + self.head = null + self.length = 0 + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } + + return self +} + +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } + + var next = node.next + var prev = node.prev + + if (next) { + next.prev = prev + } + + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + + node.list.length-- + node.next = null + node.prev = null + node.list = null + + return next +} + +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node + } + + this.head = node + if (!this.tail) { + this.tail = node + } + this.length++ +} + +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } + + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} + +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } + + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res +} + +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } + + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res +} + +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} + +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} + +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } + + return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } + + return acc +} + +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} + +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} + +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1 + } + if (start < 0) { + start = this.length + start; + } + + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next + } + + var ret = [] + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value) + walker = this.removeNode(walker) + } + if (walker === null) { + walker = this.tail + } + + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev + } + + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]) + } + return ret; +} + +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} + +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self) + + if (inserted.next === null) { + self.tail = inserted + } + if (inserted.prev === null) { + self.head = inserted + } + + self.length++ + + return inserted +} + +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} + +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} + +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } + + this.list = list + this.value = value + + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } + + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } +} + +try { + // add if support for Symbol.iterator is present + require('./iterator.js')(Yallist) +} catch (er) {} diff --git a/tools/node_modules/eslint/package.json b/tools/node_modules/eslint/package.json index b0e760690be546..745ba37cea22ac 100644 --- a/tools/node_modules/eslint/package.json +++ b/tools/node_modules/eslint/package.json @@ -12,7 +12,7 @@ "bundleDependencies": false, "dependencies": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", + "@eslint/eslintrc": "^0.2.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -23,10 +23,10 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", + "espree": "^7.3.1", "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -155,5 +155,5 @@ "test:cli": "mocha", "webpack": "node Makefile.js webpack" }, - "version": "7.14.0" + "version": "7.15.0" } \ No newline at end of file