diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 95% rename from .eslintrc.js rename to .eslintrc.cjs index a802f3d4..8e81d422 100644 --- a/.eslintrc.js +++ b/.eslintrc.cjs @@ -1,4 +1,7 @@ module.exports = { + "parserOptions": { + "sourceType": "module", + }, "env": { "node": true, "es2021": true @@ -73,7 +76,8 @@ module.exports = { "settings": { "jsdoc": { "tagNamePreference": { - "return": "returns" + "return": "returns", + "augments": "extends" } } }, diff --git a/index.js b/index.js deleted file mode 100644 index 21360bc5..00000000 --- a/index.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @module @ui5/fs - * @public - */ -module.exports = { - /** - * @public - * @alias module:@ui5/fs.adapters - * @namespace - */ - adapters: { - /** - * @type {typeof import('./lib/adapters/AbstractAdapter')} - */ - AbstractAdapter: "./lib/adapters/AbstractAdapter", - /** - * @type {typeof import('./lib/adapters/FileSystem')} - */ - FileSystem: "./lib/adapters/FileSystem", - /** - * @type {typeof import('./lib/adapters/Memory')} - */ - Memory: "./lib/adapters/Memory" - }, - /** - * @public - * @alias module:@ui5/fs.readers - * @namespace - */ - readers: { - /** - * @type {typeof import('./lib/readers/Filter')} - */ - Filter: "./lib/readers/Filter", - /** - * @type {typeof import('./lib/readers/Transformer')} - */ - Transformer: "./lib/readers/Transformer", - }, - /** - * @type {typeof import('./lib/AbstractReader')} - */ - AbstractReader: "./lib/AbstractReader", - /** - * @type {typeof import('./lib/AbstractReaderWriter')} - */ - AbstractReaderWriter: "./lib/AbstractReaderWriter", - /** - * @type {typeof import('./lib/DuplexCollection')} - */ - DuplexCollection: "./lib/DuplexCollection", - /** - * @type {import('./lib/fsInterface')} - */ - fsInterface: "./lib/fsInterface", - /** - * @type {typeof import('./lib/ReaderCollection')} - */ - ReaderCollection: "./lib/ReaderCollection", - /** - * @type {typeof import('./lib/ReaderCollectionPrioritized')} - */ - ReaderCollectionPrioritized: "./lib/ReaderCollectionPrioritized", - /** - * @type {typeof import('./lib/Resource')} - */ - Resource: "./lib/Resource", - /** - * @type {typeof import('./lib/ResourceTagCollection')} - */ - ResourceTagCollection: "./lib/ResourceTagCollection", - /** - * @type {import('./lib/resourceFactory')} - */ - resourceFactory: "./lib/resourceFactory" -}; - -function exportModules(exportRoot, modulePaths) { - for (const moduleName of Object.keys(modulePaths)) { - if (typeof modulePaths[moduleName] === "object") { - exportRoot[moduleName] = {}; - exportModules(exportRoot[moduleName], modulePaths[moduleName]); - } else { - Object.defineProperty(exportRoot, moduleName, { - get() { - return require(modulePaths[moduleName]); - } - }); - } - } -} - -exportModules(module.exports, JSON.parse(JSON.stringify(module.exports))); diff --git a/jsdoc-plugin.cjs b/jsdoc-plugin.cjs new file mode 100644 index 00000000..cd7ef446 --- /dev/null +++ b/jsdoc-plugin.cjs @@ -0,0 +1,9 @@ +/* + * This plugin fixes unexpected JSDoc behavior that prevents us from using types that start with an at-sign (@). + * JSDoc doesn't see "{@" as a valid type expression, probably as there's also {@link ...}. + */ +exports.handlers = { + jsdocCommentFound: function(e) { + e.comment = e.comment.replace(/{@ui5\//g, "{ @ui5/"); + } +}; diff --git a/jsdoc-plugin.js b/jsdoc-plugin.js deleted file mode 100644 index bf94fbc6..00000000 --- a/jsdoc-plugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Removes JSDoc comments with TypeScript import() declarations (used in index.js) - */ - -const IMPORT_PATTERN = /{(?:typeof )?import\(["'][^"']*["']\)[ .|}><,)=#\n]/; - -exports.handlers = { - jsdocCommentFound: function(e) { - if (IMPORT_PATTERN.test(e.comment)) { - e.comment = ""; - } - } -}; diff --git a/jsdoc.json b/jsdoc.json index 802c699b..7733f0ba 100644 --- a/jsdoc.json +++ b/jsdoc.json @@ -3,12 +3,12 @@ "allowUnknownTags": false }, "source": { - "include": ["README.md", "index.js"], + "include": ["README.md"], "includePattern": ".+\\.js$", "excludePattern": "(node_modules(\\\\|/))" }, "plugins": [ - "./jsdoc-plugin" + "./jsdoc-plugin.cjs" ], "opts": { "encoding": "utf8", diff --git a/lib/AbstractReader.js b/lib/AbstractReader.js index 6937fec8..d08d33a2 100644 --- a/lib/AbstractReader.js +++ b/lib/AbstractReader.js @@ -1,12 +1,13 @@ -const randomInt = require("random-int"); -const Trace = require("./tracing/Trace"); +import randomInt from "random-int"; +import Trace from "./tracing/Trace.js"; /** * Abstract resource locator * - * @public * @abstract - * @memberof module:@ui5/fs + * @public + * @class + * @alias @ui5/fs/AbstractReader */ class AbstractReader { /** @@ -33,7 +34,7 @@ class AbstractReader { * virtual directory structure * @param {object} [options] glob options * @param {boolean} [options.nodir=true] Do not match directories - * @returns {Promise} Promise resolving to list of resources + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ byGlob(virPattern, options = {nodir: true}) { const trace = new Trace(virPattern); @@ -60,7 +61,7 @@ class AbstractReader { * @param {string} virPath Virtual path * @param {object} [options] Options * @param {boolean} [options.nodir=true] Do not match directories - * @returns {Promise} Promise resolving to a single resource + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ byPath(virPath, options = {nodir: true}) { const trace = new Trace(virPath); @@ -70,17 +71,16 @@ class AbstractReader { }); } - /** - * Create a [Filter-Reader]{@link module:@ui5/fs.readers.Filter} from the current reader + * Create a [Filter-Reader]{@link @ui5/fs/readers/Filter} from the current reader. * * @public - * @param {module:@ui5/fs.readers.Filter~callback} callback + * @param {@ui5/fs/readers/Filter~callback} callback * Filter function. Will be called for every resource passed through this reader. - * @returns {module:@ui5/fs.reader.Filter} Filter instance + * @returns {Promise<@ui5/fs/readers/Filter>} Promise resolving with filter instance */ - filter(callback) { - const Filter = require("./readers/Filter"); + async filter(callback) { + const {default: Filter} = await import("./readers/Filter.js"); return new Filter({ reader: this, callback @@ -88,33 +88,34 @@ class AbstractReader { } /** - * Create a [Transformer-Reader]{@link module:@ui5/fs.readers.Transformer} from the current reader + * Create a [Transformer-Reader]{@link @ui5/fs/readers/Transformer} from the current reader. * * @private - * @param {module:@ui5/fs.readers.Transformer~callback} callback + * @param {@ui5/fs/readers/Transformer~callback} callback * Callback to check and eventually transform any resource passed through the reader - * @returns {module:@ui5/fs.reader.Transformer} Transformer instance + * @returns {Promise<@ui5/fs/readers/Transformer>} Promise resolving with transformer instance */ - transform(callback) { - const Transformer = require("./readers/Transformer"); + async transform(callback) { + const {default: Transformer} = await import("./readers/Transformer.js"); return new Transformer({ reader: this, callback }); } + /** - * Create an abstraction of this reader instance where all requests are prefixed with + * Create a [Link-Reader]{@link @ui5/fs/readers/Link} where all requests are prefixed with * /resources/. * * This simulates "flat" resource access, which is for example common for projects of type - * "application" + * "application". * * @public * @param {string} namespace Project namespace - * @returns {module:@ui5/fs.reader.AbstractReader} Reader instance + * @returns {Promise<@ui5/fs/readers/Link>} Promise resolving with reader instance */ - flatten(namespace) { - const Link = require("./readers/Link"); + async flatten(namespace) { + const {default: Link} = await import("./readers/Link.js"); return new Link({ reader: this, pathMapping: { @@ -132,8 +133,8 @@ class AbstractReader { * @param {string|string[]} virPattern glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ _byGlob(virPattern, options, trace) { throw new Error("Function '_byGlob' is not implemented"); @@ -146,8 +147,8 @@ class AbstractReader { * @protected * @param {string} pattern glob pattern * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ _runGlob(pattern, options, trace) { throw new Error("Function '_runGlob' is not implemented"); @@ -160,12 +161,12 @@ class AbstractReader { * @protected * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ _byPath(virPath, options, trace) { throw new Error("Function '_byPath' is not implemented"); } } -module.exports = AbstractReader; +export default AbstractReader; diff --git a/lib/AbstractReaderWriter.js b/lib/AbstractReaderWriter.js index 1e8aeed4..b16a8e1f 100644 --- a/lib/AbstractReaderWriter.js +++ b/lib/AbstractReaderWriter.js @@ -1,12 +1,13 @@ -const AbstractReader = require("./AbstractReader"); +import AbstractReader from "./AbstractReader.js"; /** * Abstract resource locator * - * @public * @abstract - * @memberof module:@ui5/fs - * @augments module:@ui5/fs.AbstractReader + * @public + * @class + * @alias @ui5/fs/AbstractReaderWriter + * @extends @ui5/fs/AbstractReader */ class AbstractReaderWriter extends AbstractReader { /** @@ -25,7 +26,7 @@ class AbstractReaderWriter extends AbstractReader { * Writes the content of a resource to a path. * * @public - * @param {module:@ui5/fs.Resource} resource Resource to write + * @param {@ui5/fs/Resource} resource Resource to write * @param {object} [options] * @param {boolean} [options.readOnly=false] Whether the resource content shall be written read-only * Do not use in conjunction with the drain option. @@ -48,7 +49,7 @@ class AbstractReaderWriter extends AbstractReader { * * @abstract * @protected - * @param {module:@ui5/fs.Resource} resource Resource to write + * @param {@ui5/fs/Resource} resource Resource to write * @param {object} [options] Write options, see above * @returns {Promise} Promise resolving once data has been written */ @@ -57,4 +58,4 @@ class AbstractReaderWriter extends AbstractReader { } } -module.exports = AbstractReaderWriter; +export default AbstractReaderWriter; diff --git a/lib/DuplexCollection.js b/lib/DuplexCollection.js index dbd3df42..32d7e78d 100644 --- a/lib/DuplexCollection.js +++ b/lib/DuplexCollection.js @@ -1,20 +1,21 @@ -const AbstractReaderWriter = require("./AbstractReaderWriter"); -const ReaderCollectionPrioritized = require("./ReaderCollectionPrioritized"); +import AbstractReaderWriter from "./AbstractReaderWriter.js"; +import ReaderCollectionPrioritized from "./ReaderCollectionPrioritized.js"; /** * Wrapper to keep readers and writers together * * @public - * @memberof module:@ui5/fs - * @augments module:@ui5/fs.AbstractReaderWriter + * @class + * @alias @ui5/fs/DuplexCollection + * @extends @ui5/fs/AbstractReaderWriter */ class DuplexCollection extends AbstractReaderWriter { /** * The Constructor. * * @param {object} parameters - * @param {module:@ui5/fs.AbstractReader} parameters.reader Single reader or collection of readers - * @param {module:@ui5/fs.AbstractReaderWriter} parameters.writer + * @param {@ui5/fs/AbstractReader} parameters.reader Single reader or collection of readers + * @param {@ui5/fs/AbstractReaderWriter} parameters.writer * A ReaderWriter instance which is only used for writing files * @param {string} [parameters.name=""] The collection name */ @@ -39,8 +40,8 @@ class DuplexCollection extends AbstractReaderWriter { * @param {string|string[]} virPattern glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving with a list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving with a list of resources */ _byGlob(virPattern, options, trace) { return this._combo._byGlob(virPattern, options, trace); @@ -53,7 +54,7 @@ class DuplexCollection extends AbstractReaderWriter { * @param {string} virPattern glob pattern for virtual directory structure * @param {object} [options] glob options * @param {boolean} [options.nodir=true] Do not match directories - * @returns {Promise} Promise resolving to list of resources + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ byGlobSource(virPattern, options = {nodir: true}) { return this._reader.byGlob(virPattern, options).then((resources) => { @@ -71,8 +72,8 @@ class DuplexCollection extends AbstractReaderWriter { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ _byPath(virPath, options, trace) { return this._combo._byPath(virPath, options, trace); @@ -82,7 +83,7 @@ class DuplexCollection extends AbstractReaderWriter { * Writes the content of a resource to a path. * * @private - * @param {module:@ui5/fs.Resource} resource The Resource to write + * @param {@ui5/fs/Resource} resource The Resource to write * @returns {Promise} Promise resolving once data has been written */ _write(resource) { @@ -90,4 +91,4 @@ class DuplexCollection extends AbstractReaderWriter { } } -module.exports = DuplexCollection; +export default DuplexCollection; diff --git a/lib/ReaderCollection.js b/lib/ReaderCollection.js index b862df3e..7ed207b7 100644 --- a/lib/ReaderCollection.js +++ b/lib/ReaderCollection.js @@ -1,11 +1,12 @@ -const AbstractReader = require("./AbstractReader"); +import AbstractReader from "./AbstractReader.js"; /** * Resource Locator ReaderCollection * * @public - * @memberof module:@ui5/fs - * @augments module:@ui5/fs.AbstractReader + * @class + * @alias @ui5/fs/ReaderCollection + * @extends @ui5/fs/AbstractReader */ class ReaderCollection extends AbstractReader { /** @@ -13,7 +14,7 @@ class ReaderCollection extends AbstractReader { * * @param {object} parameters Parameters * @param {string} parameters.name The collection name - * @param {module:@ui5/fs.AbstractReader[]} parameters.readers List of resource readers (all tried in parallel) + * @param {@ui5/fs/AbstractReader[]} parameters.readers List of resource readers (all tried in parallel) */ constructor({name, readers}) { super(); @@ -28,8 +29,8 @@ class ReaderCollection extends AbstractReader { * @param {string|string[]} pattern glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ _byGlob(pattern, options, trace) { return Promise.all(this._readers.map(function(resourceLocator) { @@ -46,8 +47,8 @@ class ReaderCollection extends AbstractReader { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ _byPath(virPath, options, trace) { const that = this; @@ -79,4 +80,4 @@ class ReaderCollection extends AbstractReader { } } -module.exports = ReaderCollection; +export default ReaderCollection; diff --git a/lib/ReaderCollectionPrioritized.js b/lib/ReaderCollectionPrioritized.js index 69f170a0..ad7cb404 100644 --- a/lib/ReaderCollectionPrioritized.js +++ b/lib/ReaderCollectionPrioritized.js @@ -1,11 +1,12 @@ -const AbstractReader = require("./AbstractReader"); +import AbstractReader from "./AbstractReader.js"; /** * Prioritized Resource Locator Collection * * @public - * @memberof module:@ui5/fs - * @augments module:@ui5/fs.AbstractReader + * @class + * @alias @ui5/fs/ReaderCollectionPrioritized + * @extends @ui5/fs/AbstractReader */ class ReaderCollectionPrioritized extends AbstractReader { /** @@ -13,7 +14,7 @@ class ReaderCollectionPrioritized extends AbstractReader { * * @param {object} parameters * @param {string} parameters.name The collection name - * @param {module:@ui5/fs.AbstractReader[]} parameters.readers Prioritized list of resource readers + * @param {@ui5/fs/AbstractReader[]} parameters.readers Prioritized list of resource readers * (first is tried first) */ constructor({readers, name}) { @@ -29,8 +30,8 @@ class ReaderCollectionPrioritized extends AbstractReader { * @param {string|string[]} pattern glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ _byGlob(pattern, options, trace) { return Promise.all(this._readers.map(function(resourceLocator) { @@ -61,8 +62,8 @@ class ReaderCollectionPrioritized extends AbstractReader { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ _byPath(virPath, options, trace) { const that = this; @@ -83,4 +84,4 @@ class ReaderCollectionPrioritized extends AbstractReader { } } -module.exports = ReaderCollectionPrioritized; +export default ReaderCollectionPrioritized; diff --git a/lib/Resource.js b/lib/Resource.js index ac3b22ef..dc4308fe 100644 --- a/lib/Resource.js +++ b/lib/Resource.js @@ -1,6 +1,6 @@ -const stream = require("stream"); -const clone = require("clone"); -const path = require("path"); +import stream from "node:stream"; +import clone from "clone"; +import path from "node:path"; const fnTrue = () => true; const fnFalse = () => false; @@ -9,14 +9,15 @@ const fnFalse = () => false; * Resource * * @public - * @memberof module:@ui5/fs + * @class + * @alias @ui5/fs/Resource */ class Resource { /** * Function for dynamic creation of content streams * * @public - * @callback module:@ui5/fs.Resource~createStream + * @callback @ui5/fs/Resource~createStream * @returns {stream.Readable} A readable stream of a resources content */ @@ -34,11 +35,11 @@ class Resource { * (cannot be used in conjunction with parameters buffer, stream or createStream) * @param {Stream} [parameters.stream] Readable stream of the content of this resource * (cannot be used in conjunction with parameters buffer, string or createStream) - * @param {module:@ui5/fs.Resource~createStream} [parameters.createStream] Function callback that returns a readable + * @param {@ui5/fs/Resource~createStream} [parameters.createStream] Function callback that returns a readable * stream of the content of this resource (cannot be used in conjunction with parameters buffer, * string or stream). * In some cases this is the most memory-efficient way to supply resource content - * @param {module:@ui5/project.specifications.Project} [parameters.project] Project this resource is associated with + * @param {@ui5/project/specifications/Project} [parameters.project] Project this resource is associated with * @param {object} [parameters.source] Experimental, internal parameter. Do not use */ constructor({path, statInfo, buffer, string, createStream, stream, project, source}) { @@ -163,8 +164,8 @@ class Resource { * Gets a readable stream for the resource content. * * Repetitive calls of this function are only possible if new content has been set in the meantime (through - * [setStream]{@link module:@ui5/fs.Resource#setStream}, [setBuffer]{@link module:@ui5/fs.Resource#setBuffer} - * or [setString]{@link module:@ui5/fs.Resource#setString}). This + * [setStream]{@link @ui5/fs/Resource#setStream}, [setBuffer]{@link @ui5/fs/Resource#setBuffer} + * or [setString]{@link @ui5/fs/Resource#setString}). This * is to prevent consumers from accessing drained streams. * * @public @@ -203,7 +204,7 @@ class Resource { * Sets a readable stream as content. * * @public - * @param {stream.Readable|module:@ui5/fs.Resource~createStream} stream Readable stream of the resource content or + * @param {stream.Readable|@ui5/fs/Resource~createStream} stream Readable stream of the resource content or callback for dynamic creation of a readable stream */ setStream(stream) { @@ -292,7 +293,7 @@ class Resource { * Returns a clone of the resource. The clones content is independent from that of the original resource * * @public - * @returns {Promise} Promise resolving with the clone + * @returns {Promise<@ui5/fs/Resource>} Promise resolving with the clone */ async clone() { const options = await this._getCloneOptions(); @@ -321,7 +322,7 @@ class Resource { * Retrieve the project assigned to the resource * * @public - * @returns {module:@ui5/project.specifications.Project} Project this resource is associated with + * @returns {@ui5/project/specifications/Project} Project this resource is associated with */ getProject() { return this.__project; @@ -331,7 +332,7 @@ class Resource { * Assign a project to the resource * * @public - * @param {module:@ui5/project.specifications.Project} project Project this resource is associated with + * @param {@ui5/project/specifications/Project} project Project this resource is associated with */ setProject(project) { if (this.__project) { @@ -426,4 +427,4 @@ class Resource { } } -module.exports = Resource; +export default Resource; diff --git a/lib/ResourceFacade.js b/lib/ResourceFacade.js index 6497ff15..db06fcd2 100644 --- a/lib/ResourceFacade.js +++ b/lib/ResourceFacade.js @@ -1,8 +1,9 @@ /** - * A [Resource]{module:@ui5/project.Resource} with a different path than it's original + * A [Resource]{@ui5/project.Resource} with a different path than it's original * * @public - * @memberof module:@ui5/fs + * @class + * @alias @ui5/fs/ResourceFacade */ class ResourceFacade { /** @@ -11,7 +12,7 @@ class ResourceFacade { * @public * @param {object} parameters Parameters * @param {string} parameters.path Virtual path - * @param {module:@ui5/fs.Resource} parameters.resource Resource to cover + * @param {@ui5/fs/Resource} parameters.resource Resource to cover */ constructor({path, resource}) { if (!path) { @@ -49,7 +50,7 @@ class ResourceFacade { * A ResourceFacade becomes a Resource * * @public - * @returns {Promise} Promise resolving with the clone + * @returns {Promise<@ui5/fs/Resource>} Promise resolving with the clone */ async clone() { // Cloning resolves the facade @@ -107,8 +108,8 @@ class ResourceFacade { * Gets a readable stream for the resource content. * * Repetitive calls of this function are only possible if new content has been set in the meantime (through - * [setStream]{@link module:@ui5/fs.Resource#setStream}, [setBuffer]{@link module:@ui5/fs.Resource#setBuffer} - * or [setString]{@link module:@ui5/fs.Resource#setString}). This + * [setStream]{@link @ui5/fs/Resource#setStream}, [setBuffer]{@link @ui5/fs/Resource#setBuffer} + * or [setString]{@link @ui5/fs/Resource#setString}). This * is to prevent consumers from accessing drained streams. * * @public @@ -122,7 +123,7 @@ class ResourceFacade { * Sets a readable stream as content. * * @public - * @param {stream.Readable|module:@ui5/fs.Resource~createStream} stream Readable stream of the resource content or + * @param {stream.Readable|@ui5/fs/Resource~createStream} stream Readable stream of the resource content or callback for dynamic creation of a readable stream */ setStream(stream) { @@ -171,18 +172,32 @@ class ResourceFacade { return this._resource.getPathTree(); } - getSource() { - return this._resource.getSource(); - } - + /** + * Retrieve the project assigned to the resource + * + * @public + * @returns {@ui5/project/specifications/Project} Project this resource is associated with + */ getProject() { return this._resource.getProject(); } + /** + * Assign a project to the resource + * + * @public + * @param {@ui5/project/specifications/Project} project Project this resource is associated with + */ setProject(project) { return this._resource.setProject(project); } + /** + * Check whether a project has been assigned to the resource + * + * @public + * @returns {boolean} True if the resource is associated with a project + */ hasProject() { return this._resource.hasProject(); } @@ -190,6 +205,10 @@ class ResourceFacade { getConcealedResource() { return this._resource; } + + getSource() { + return this._resource.getSource(); + } } -module.exports = ResourceFacade; +export default ResourceFacade; diff --git a/lib/ResourceTagCollection.js b/lib/ResourceTagCollection.js index 4adc38a9..142a412a 100644 --- a/lib/ResourceTagCollection.js +++ b/lib/ResourceTagCollection.js @@ -1,7 +1,14 @@ const tagNamespaceRegExp = /^[a-z][a-z0-9]+$/; // part before the colon const tagNameRegExp = /^[A-Z][A-Za-z0-9]+$/; // part after the colon -const ResourceFacade = require("./ResourceFacade"); - +import ResourceFacade from "./ResourceFacade.js"; + +/** + * A ResourceTagCollection + * + * @private + * @class + * @alias @ui5/fs/internal/ResourceTagCollection + */ class ResourceTagCollection { constructor({allowedTags = [], allowedNamespaces = [], tags}) { this._allowedTags = allowedTags; // Allowed tags are validated during use @@ -114,4 +121,4 @@ class ResourceTagCollection { } } -module.exports = ResourceTagCollection; +export default ResourceTagCollection; diff --git a/lib/WriterCollection.js b/lib/WriterCollection.js index f8322cc6..21680a46 100644 --- a/lib/WriterCollection.js +++ b/lib/WriterCollection.js @@ -1,13 +1,14 @@ -const AbstractReaderWriter = require("./AbstractReaderWriter"); -const ReaderCollection = require("./ReaderCollection"); -const escapeStringRegExp = require("escape-string-regexp"); +import AbstractReaderWriter from "./AbstractReaderWriter.js"; +import ReaderCollection from "./ReaderCollection.js"; +import escapeStringRegExp from "escape-string-regexp"; /** * Resource Locator WriterCollection * * @public - * @memberof module:@ui5/fs - * @augments module:@ui5/fs.AbstractReaderWriter + * @class + * @alias @ui5/fs/WriterCollection + * @extends @ui5/fs/AbstractReaderWriter */ class WriterCollection extends AbstractReaderWriter { /** @@ -15,7 +16,7 @@ class WriterCollection extends AbstractReaderWriter { * * @param {object} parameters Parameters * @param {string} parameters.name The collection name - * @param {object.} parameters.writerMapping + * @param {object.} parameters.writerMapping * Mapping of virtual base paths to writers. Path are matched greedy * * @example @@ -72,8 +73,8 @@ class WriterCollection extends AbstractReaderWriter { * @param {string|string[]} pattern glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ _byGlob(pattern, options, trace) { return this._readerCollection._byGlob(pattern, options, trace); @@ -85,8 +86,8 @@ class WriterCollection extends AbstractReaderWriter { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ _byPath(virPath, options, trace) { return this._readerCollection._byPath(virPath, options, trace); @@ -96,7 +97,7 @@ class WriterCollection extends AbstractReaderWriter { * Writes the content of a resource to a path. * * @private - * @param {module:@ui5/fs.Resource} resource The Resource to write + * @param {@ui5/fs/Resource} resource The Resource to write * @param {object} [options] Write options, see above * @returns {Promise} Promise resolving once data has been written */ @@ -114,4 +115,4 @@ class WriterCollection extends AbstractReaderWriter { } } -module.exports = WriterCollection; +export default WriterCollection; diff --git a/lib/adapters/AbstractAdapter.js b/lib/adapters/AbstractAdapter.js index 6b40429e..1c166a93 100644 --- a/lib/adapters/AbstractAdapter.js +++ b/lib/adapters/AbstractAdapter.js @@ -1,16 +1,18 @@ -const log = require("@ui5/logger").getLogger("resources:adapters:AbstractAdapter"); -const minimatch = require("minimatch"); -const micromatch = require("micromatch"); -const AbstractReaderWriter = require("../AbstractReaderWriter"); -const Resource = require("../Resource"); +import logger from "@ui5/logger"; +const log = logger.getLogger("resources:adapters:AbstractAdapter"); +import minimatch from "minimatch"; +import micromatch from "micromatch"; +import AbstractReaderWriter from "../AbstractReaderWriter.js"; +import Resource from "../Resource.js"; /** * Abstract Resource Adapter * * @abstract * @public - * @memberof module:@ui5/fs.adapters - * @augments module:@ui5/fs.AbstractReaderWriter + * @class + * @alias @ui5/fs/adapters/AbstractAdapter + * @extends @ui5/fs/AbstractReaderWriter */ class AbstractAdapter extends AbstractReaderWriter { /** @@ -45,8 +47,8 @@ class AbstractAdapter extends AbstractReaderWriter { * glob patterns for virtual directory structure * @param {object} [options={}] glob options * @param {boolean} [options.nodir=true] Do not match directories - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ _byGlob(virPattern, options = {nodir: true}, trace) { const excludes = this._excludesNegated; @@ -203,4 +205,4 @@ class AbstractAdapter extends AbstractReaderWriter { } } -module.exports = AbstractAdapter; +export default AbstractAdapter; diff --git a/lib/adapters/FileSystem.js b/lib/adapters/FileSystem.js index ba3e61c9..e6dd0502 100644 --- a/lib/adapters/FileSystem.js +++ b/lib/adapters/FileSystem.js @@ -1,13 +1,14 @@ -const log = require("@ui5/logger").getLogger("resources:adapters:FileSystem"); -const path = require("path"); -const {promisify} = require("util"); -const fs = require("graceful-fs"); +import logger from "@ui5/logger"; +const log = logger.getLogger("resources:adapters:FileSystem"); +import path from "node:path"; +import {promisify} from "node:util"; +import fs from "graceful-fs"; const copyFile = promisify(fs.copyFile); const chmod = promisify(fs.chmod); -const globby = require("globby"); -const makeDir = require("make-dir"); -const {PassThrough} = require("stream"); -const AbstractAdapter = require("./AbstractAdapter"); +import globby from "globby"; +import makeDir from "make-dir"; +import {PassThrough} from "node:stream"; +import AbstractAdapter from "./AbstractAdapter.js"; const READ_ONLY_MODE = 0o444; @@ -15,8 +16,9 @@ const READ_ONLY_MODE = 0o444; * File system resource adapter * * @public - * @alias module:@ui5/fs.adapters.FileSystem - * @augments module:@ui5/fs.adapters.AbstractAdapter + * @class + * @alias @ui5/fs/adapters/FileSystem + * @extends @ui5/fs/adapters/AbstractAdapter */ class FileSystem extends AbstractAdapter { /** @@ -40,8 +42,8 @@ class FileSystem extends AbstractAdapter { * @param {Array} patterns Array of glob patterns * @param {object} [options={}] glob options * @param {boolean} [options.nodir=true] Do not match directories - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ async _runGlob(patterns, options = {nodir: true}, trace) { const opt = { @@ -124,8 +126,8 @@ class FileSystem extends AbstractAdapter { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource or null if not found + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource or null if not found */ _byPath(virPath, options, trace) { if (this.isPathExcluded(virPath)) { @@ -192,7 +194,7 @@ class FileSystem extends AbstractAdapter { * Writes the content of a resource to a path. * * @private - * @param {module:@ui5/fs.Resource} resource Resource to write + * @param {@ui5/fs/Resource} resource Resource to write * @param {object} [options] * @param {boolean} [options.readOnly] Whether the resource content shall be written read-only * Do not use in conjunction with the drain option. @@ -287,4 +289,4 @@ class FileSystem extends AbstractAdapter { } } -module.exports = FileSystem; +export default FileSystem; diff --git a/lib/adapters/Memory.js b/lib/adapters/Memory.js index 977b50b3..fbd51306 100644 --- a/lib/adapters/Memory.js +++ b/lib/adapters/Memory.js @@ -1,13 +1,15 @@ -const log = require("@ui5/logger").getLogger("resources:adapters:Memory"); -const micromatch = require("micromatch"); -const AbstractAdapter = require("./AbstractAdapter"); +import logger from "@ui5/logger"; +const log = logger.getLogger("resources:adapters:Memory"); +import micromatch from "micromatch"; +import AbstractAdapter from "./AbstractAdapter.js"; /** * Virtual resource Adapter * * @public - * @memberof module:@ui5/fs.adapters - * @augments module:@ui5/fs.adapters.AbstractAdapter + * @class + * @alias @ui5/fs/adapters/Memory + * @extends @ui5/fs/adapters/AbstractAdapter */ class Memory extends AbstractAdapter { /** @@ -32,8 +34,8 @@ class Memory extends AbstractAdapter { * @param {Array} patterns array of glob patterns * @param {object} [options={}] glob options * @param {boolean} [options.nodir=true] Do not match directories - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ async _runGlob(patterns, options = {nodir: true}, trace) { if (patterns[0] === "" && !options.nodir) { // Match virtual root directory @@ -80,8 +82,8 @@ class Memory extends AbstractAdapter { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing.Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ _byPath(virPath, options, trace) { if (this.isPathExcluded(virPath)) { @@ -111,7 +113,7 @@ class Memory extends AbstractAdapter { * Writes the content of a resource to a path. * * @private - * @param {module:@ui5/fs.Resource} resource The Resource to write + * @param {@ui5/fs/Resource} resource The Resource to write * @returns {Promise} Promise resolving once data has been written */ _write(resource) { @@ -155,4 +157,4 @@ class Memory extends AbstractAdapter { } } -module.exports = Memory; +export default Memory; diff --git a/lib/fsInterface.js b/lib/fsInterface.js index 23123ea3..e055c78f 100644 --- a/lib/fsInterface.js +++ b/lib/fsInterface.js @@ -2,12 +2,18 @@ function toPosix(inputPath) { return inputPath.replace(/\\/g, "/"); } +/** + * @public + * @module @ui5/fs/fsInterface + */ + /** * Wraps readers to access them through a [Node.js fs]{@link https://nodejs.org/api/fs.html} styled interface. * * @public - * @alias module:@ui5/fs.fsInterface - * @param {module:@ui5/fs.AbstractReader} reader Resource Reader or Collection + * @function default + * @static + * @param {@ui5/fs/AbstractReader} reader Resource Reader or Collection * * @returns {object} Object with [Node.js fs]{@link https://nodejs.org/api/fs.html} styled functions * [readFile]{@link https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback}, @@ -15,7 +21,7 @@ function toPosix(inputPath) { * [readdir]{@link https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback} and * [mkdir]{@link https://nodejs.org/api/fs.html#fs_fs_mkdir_path_options_callback} */ -module.exports = (reader) => { +function fsInterface(reader) { return { readFile(fsPath, options, callback) { if (typeof options === "function") { @@ -82,4 +88,5 @@ module.exports = (reader) => { setTimeout(callback, 0); } }; -}; +} +export default fsInterface; diff --git a/lib/readers/Filter.js b/lib/readers/Filter.js index 4108ede7..c16be3d7 100644 --- a/lib/readers/Filter.js +++ b/lib/readers/Filter.js @@ -1,19 +1,21 @@ -const AbstractReader = require("../AbstractReader"); +import AbstractReader from "../AbstractReader.js"; /** * A reader that allows dynamic filtering of resources passed through it * * @public - * @memberof module:@ui5/fs - * @augments module:@ui5/fs.AbstractReader + * @class + * @hideconstructor + * @alias @ui5/fs/readers/Filter + * @extends @ui5/fs/AbstractReader */ class Filter extends AbstractReader { /** * Filter callback * * @public - * @callback module:@ui5/fs.readers.Filter~callback - * @param {module:@ui5/fs.Resource} resource Resource to test + * @callback @ui5/fs/readers/Filter~callback + * @param {@ui5/fs/Resource} resource Resource to test * @returns {boolean} Whether to keep the resource */ @@ -21,8 +23,8 @@ class Filter extends AbstractReader { * Constructor * * @param {object} parameters Parameters - * @param {module:@ui5/fs.AbstractReader} parameters.reader The resource reader to wrap - * @param {module:@ui5/fs.readers.Filter~callback} parameters.callback + * @param {@ui5/fs/AbstractReader} parameters.reader The resource reader to wrap + * @param {@ui5/fs/readers/Filter~callback} parameters.callback * Filter function. Will be called for every resource read through this reader. */ constructor({reader, callback}) { @@ -44,8 +46,8 @@ class Filter extends AbstractReader { * @param {string|string[]} pattern glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing/Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ async _byGlob(pattern, options, trace) { const result = await this._reader._byGlob(pattern, options, trace); @@ -58,8 +60,8 @@ class Filter extends AbstractReader { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing/Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ async _byPath(virPath, options, trace) { const result = await this._reader._byPath(virPath, options, trace); @@ -70,4 +72,4 @@ class Filter extends AbstractReader { } } -module.exports = Filter; +export default Filter; diff --git a/lib/readers/Link.js b/lib/readers/Link.js index da7e7c5e..6db4766c 100644 --- a/lib/readers/Link.js +++ b/lib/readers/Link.js @@ -1,21 +1,24 @@ -const AbstractReader = require("../AbstractReader"); -const ResourceFacade = require("../ResourceFacade"); -const resourceFactory = require("../resourceFactory"); -const log = require("@ui5/logger").getLogger("resources:readers:Link"); +import AbstractReader from "../AbstractReader.js"; +import ResourceFacade from "../ResourceFacade.js"; +import {prefixGlobPattern} from "../resourceFactory.js"; +import logger from "@ui5/logger"; +const log = logger.getLogger("resources:readers:Link"); /** * A reader that allows modification of all resources passed through it. * - * @private - * @memberof module:@ui5/fs.readers - * @augments module:@ui5/fs.AbstractReader + * @public + * @class + * @hideconstructor + * @alias @ui5/fs/readers/Link + * @extends @ui5/fs/AbstractReader */ class Link extends AbstractReader { /** - * Path mapping for a [Link]{@link module:@ui5/fs.readers.Link} + * Path mapping for a [Link]{@link @ui5/fs/readers/Link} * * @private - * @typedef {object} module:@ui5/fs.readers.Link.PathMapping + * @typedef {object} @ui5/fs/readers/Link/PathMapping * @property {string} linkPath Input path to rewrite * @property {string} targetPath Path to rewrite to */ @@ -25,8 +28,8 @@ class Link extends AbstractReader { * * @private * @param {object} parameters Parameters - * @param {module:@ui5/fs.AbstractReader} parameters.reader The resource reader to wrap - * @param {module:@ui5/fs.readers.Link.PathMapping} parameters.pathMapping + * @param {@ui5/fs/AbstractReader} parameters.reader The resource reader to wrap + * @param {@ui5/fs/readers/Link/PathMapping} parameters.pathMapping */ constructor({reader, pathMapping}) { super(); @@ -48,8 +51,8 @@ class Link extends AbstractReader { * @param {string|string[]} patterns glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing/Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ async _byGlob(patterns, options, trace) { if (!(patterns instanceof Array)) { @@ -59,7 +62,7 @@ class Link extends AbstractReader { if (pattern.startsWith(this._pathMapping.linkPath)) { pattern = pattern.substr(this._pathMapping.linkPath.length); } - return resourceFactory.prefixGlobPattern(pattern, this._pathMapping.targetPath); + return prefixGlobPattern(pattern, this._pathMapping.targetPath); }); // Flatten prefixed patterns @@ -84,8 +87,8 @@ class Link extends AbstractReader { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing/Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ async _byPath(virPath, options, trace) { if (!virPath.startsWith(this._pathMapping.linkPath)) { @@ -120,4 +123,4 @@ class Link extends AbstractReader { } } -module.exports = Link; +export default Link; diff --git a/lib/readers/Transformer.js b/lib/readers/Transformer.js index e8202b6c..4f8902e0 100644 --- a/lib/readers/Transformer.js +++ b/lib/readers/Transformer.js @@ -1,21 +1,22 @@ -const AbstractReader = require("../AbstractReader"); +import AbstractReader from "../AbstractReader.js"; /** * A reader that allows modification of all resources passed through it. * - * @public - * @memberof module:@ui5/fs.readers - * @augments module:@ui5/fs.AbstractReader + * @private + * @class + * @alias @ui5/fs/readers/Transformer + * @extends @ui5/fs/AbstractReader */ class Transformer extends AbstractReader { /** * Callback to check and eventually transform a resource * * @public - * @callback module:@ui5/fs.readers.Transformer~callback + * @callback @ui5/fs/readers/Transformer~callback * @param {string} resourcePath Path of the resource to process. * This can be used to decide whether the resource should be transformed - * @param {module:@ui5/fs.readers.Transformer~getResource} + * @param {@ui5/fs/readers/Transformer~getResource} * Function to retrieve the given resource instance in order to transform it * @returns {Promise} Promise resolving once the transformation is done */ @@ -25,16 +26,16 @@ class Transformer extends AbstractReader { * resource which then takes its place in the result set of the reader * * @public - * @callback module:@ui5/fs.readers.Transformer~getResource - * @returns {Promise} Promise resolving to the resource + * @callback @ui5/fs/readers/Transformer~getResource + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to the resource */ /** * Constructor * * @param {object} parameters Parameters - * @param {module:@ui5/fs.AbstractReader} parameters.reader The resource reader to wrap - * @param {module:@ui5/fs.readers.Transformer~callback} parameters.callback + * @param {@ui5/fs/AbstractReader} parameters.reader The resource reader to wrap + * @param {@ui5/fs/readers/Transformer~callback} parameters.callback * Filter function. Will be called for every resource read through this reader. */ constructor({reader, callback}) { @@ -56,8 +57,8 @@ class Transformer extends AbstractReader { * @param {string|string[]} pattern glob pattern as string or an array of * glob patterns for virtual directory structure * @param {object} options glob options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to list of resources + * @param {@ui5/fs/tracing/Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource[]>} Promise resolving to list of resources */ async _byGlob(pattern, options, trace) { const result = await this._reader._byGlob(pattern, options, trace); @@ -65,7 +66,7 @@ class Transformer extends AbstractReader { let resourceClone; await this._callback(resource.getPath(), async function() { // Make sure to only clone once - resourceClone = resourceClone || await resource.clone(); + resourceClone = resourceClone || (await resource.clone()); return resourceClone; }); return resourceClone || resource; @@ -78,8 +79,8 @@ class Transformer extends AbstractReader { * @private * @param {string} virPath Virtual path * @param {object} options Options - * @param {module:@ui5/fs.tracing.Trace} trace Trace instance - * @returns {Promise} Promise resolving to a single resource + * @param {@ui5/fs/tracing/Trace} trace Trace instance + * @returns {Promise<@ui5/fs/Resource>} Promise resolving to a single resource */ async _byPath(virPath, options, trace) { const resource = await this._reader._byPath(virPath, options, trace); @@ -87,7 +88,7 @@ class Transformer extends AbstractReader { if (resource) { await this._callback(resource.getPath(), async function() { // Make sure to only clone once - resourceClone = resourceClone || await resource.clone(); + resourceClone = resourceClone || (await resource.clone()); return resourceClone; }); } @@ -95,4 +96,4 @@ class Transformer extends AbstractReader { } } -module.exports = Transformer; +export default Transformer; diff --git a/lib/resourceFactory.js b/lib/resourceFactory.js index aec991ec..a9950bab 100644 --- a/lib/resourceFactory.js +++ b/lib/resourceFactory.js @@ -1,178 +1,184 @@ +import path from "node:path"; +import minimatch from "minimatch"; +import DuplexCollection from "./DuplexCollection.js"; +import FileSystem from "./adapters/FileSystem.js"; +import MemAdapter from "./adapters/Memory.js"; +import ReaderCollection from "./ReaderCollection.js"; +import ReaderCollectionPrioritized from "./ReaderCollectionPrioritized.js"; +import Resource from "./Resource.js"; +import WriterCollection from "./WriterCollection.js"; + /** - * Resource Factory - * + * @module @ui5/fs/resourceFactory + * @description A collection of resource related APIs * @public - * @namespace - * @alias module:@ui5/fs.resourceFactory */ -const resourceFactory = { - /** - * Creates a resource ReaderWriter. - * - * If a file system base path is given, file system resource ReaderWriter is returned. - * In any other case a virtual one. - * - * @public - * @param {object} parameters Parameters - * @param {string} parameters.virBasePath Virtual base path - * @param {string} [parameters.fsBasePath] File system base path - * @param {string[]} [parameters.excludes] List of glob patterns to exclude - * @param {object} [parameters.project] Experimental, internal parameter. Do not use - * @returns {module:@ui5/fs.adapters.FileSystem|module:@ui5/fs.adapters.Memory} File System- or Virtual Adapter - */ - createAdapter({fsBasePath, virBasePath, project, excludes}) { - if (fsBasePath) { - const FsAdapter = require("./adapters/FileSystem"); - return new FsAdapter({fsBasePath, virBasePath, project, excludes}); - } else { - const MemAdapter = require("./adapters/Memory"); - return new MemAdapter({virBasePath, project, excludes}); - } - }, - - /** - * Creates an adapter and wraps it in a ReaderCollection - * - * @public - * @param {object} parameters Parameters - * @param {string} parameters.virBasePath Virtual base path - * @param {string} parameters.fsBasePath File system base path - * @param {object} [parameters.project] Experimental, internal parameter. Do not use - * @param {string[]} [parameters.excludes] List of glob patterns to exclude - * @param {string} [parameters.name] Name for the reader collection - * @returns {module:@ui5/fs.ReaderCollection} Reader collection wrapping an adapter - */ - createReader({fsBasePath, virBasePath, project, excludes = [], name}) { - const normalizedExcludes = excludes.map((pattern) => { - return resourceFactory.prefixGlobPattern(pattern, virBasePath); - }); - if (!fsBasePath) { - // Creating a reader with a memory adapter seems pointless right now - // since there would be no way to fill the adapter with resources - throw new Error(`Missing parameter "fsBasePath"`); - } - const ReaderCollection = require("./ReaderCollection"); - return new ReaderCollection({ - name, - readers: [resourceFactory.createAdapter({ - fsBasePath, - virBasePath, - project, - excludes: normalizedExcludes - })] - }); - }, - /** - * Creates a ReaderCollection - * - * @public - * @param {object} parameters Parameters - * @param {string} parameters.name The collection name - * @param {module:@ui5/fs.AbstractReader[]} parameters.readers List of resource readers (all tried in parallel) - */ - createReaderCollection({name, readers}) { - const ReaderCollection = require("./ReaderCollection"); - return new ReaderCollection({ - name, - readers - }); - }, +/** + * Creates a resource ReaderWriter. + * + * If a file system base path is given, file system resource ReaderWriter is returned. + * In any other case a virtual one. + * + * @public + * @param {object} parameters Parameters + * @param {string} parameters.virBasePath Virtual base path + * @param {string} [parameters.fsBasePath] File system base path + * @param {string[]} [parameters.excludes] List of glob patterns to exclude + * @param {object} [parameters.project] Experimental, internal parameter. Do not use + * @returns {@ui5/fs/adapters/FileSystem|@ui5/fs/adapters/Memory} File System- or Virtual Adapter + */ +export function createAdapter({fsBasePath, virBasePath, project, excludes}) { + if (fsBasePath) { + const FsAdapter = FileSystem; + return new FsAdapter({fsBasePath, virBasePath, project, excludes}); + } else { + return new MemAdapter({virBasePath, project, excludes}); + } +} - /** - * Creates a ReaderCollection - * - * @public - * @param {object} parameters - * @param {string} parameters.name The collection name - * @param {module:@ui5/fs.AbstractReader[]} parameters.readers Prioritized list of resource readers - * (first is tried first) - */ - createReaderCollectionPrioritized({name, readers}) { - const ReaderCollectionPrioritized = require("./ReaderCollectionPrioritized"); - return new ReaderCollectionPrioritized({ - name, - readers - }); - }, +/** + * Creates an adapter and wraps it in a ReaderCollection + * + * @public + * @param {object} parameters Parameters + * @param {string} parameters.virBasePath Virtual base path + * @param {string} parameters.fsBasePath File system base path + * @param {object} [parameters.project] Experimental, internal parameter. Do not use + * @param {string[]} [parameters.excludes] List of glob patterns to exclude + * @param {string} [parameters.name] Name for the reader collection + * @returns {@ui5/fs/ReaderCollection} Reader collection wrapping an adapter + */ +export function createReader({fsBasePath, virBasePath, project, excludes = [], name}) { + const normalizedExcludes = excludes.map((pattern) => { + return prefixGlobPattern(pattern, virBasePath); + }); + if (!fsBasePath) { + // Creating a reader with a memory adapter seems pointless right now + // since there would be no way to fill the adapter with resources + throw new Error(`Missing parameter "fsBasePath"`); + } + return new ReaderCollection({ + name, + readers: [createAdapter({ + fsBasePath, + virBasePath, + project, + excludes: normalizedExcludes + })] + }); +} - createWriterCollection({name, writerMapping}) { - const WriterCollection = require("./WriterCollection"); - return new WriterCollection({ - name, - writerMapping - }); - }, +/** + * Creates a ReaderCollection + * + * @public + * @param {object} parameters Parameters + * @param {string} parameters.name The collection name + * @param {@ui5/fs/AbstractReader[]} parameters.readers List of resource readers (all tried in parallel) + * @returns {@ui5/fs/ReaderCollection} Reader collection wrapping provided readers + */ +export function createReaderCollection({name, readers}) { + return new ReaderCollection({ + name, + readers + }); +} - /** - * Creates a Resource. Accepts the same parameters as the Resource constructor. - * - * @public - * @param {object} parameters Parameters to be passed to the resource constructor - * @returns {module:@ui5/fs.Resource} Resource - */ - createResource(parameters) { - const Resource = require("./Resource"); - return new Resource(parameters); - }, +/** + * Creates a ReaderCollectionPrioritized + * + * @public + * @param {object} parameters + * @param {string} parameters.name The collection name + * @param {@ui5/fs/AbstractReader[]} parameters.readers Prioritized list of resource readers + * (first is tried first) + * @returns {@ui5/fs/ReaderCollectionPrioritized} Reader collection wrapping provided readers + */ +export function createReaderCollectionPrioritized({name, readers}) { + return new ReaderCollectionPrioritized({ + name, + readers + }); +} - /** - * Creates a Workspace - * - * A workspace is a DuplexCollection which reads from the project sources. It is used during the build process - * to write modified files into a separate writer, this is usually a Memory adapter. If a file already exists it is - * fetched from the memory to work on it in further build steps. - * - * @public - * @param {object} parameters - * @param {module:@ui5/fs.AbstractReader} parameters.reader Single reader or collection of readers - * @param {module:@ui5/fs.AbstractReaderWriter} [parameters.writer] A ReaderWriter instance which is - * only used for writing files. If not supplied, a Memory adapter will be created. - * @param {string} [parameters.name="vir & fs source"] Name of the collection - * @param {string} [parameters.virBasePath="/"] Virtual base path - * @returns {module:@ui5/fs.DuplexCollection} DuplexCollection which wraps the provided resource locators - */ - createWorkspace({reader, writer, virBasePath = "/", name = "vir & fs source"}) { - const DuplexCollection = require("./DuplexCollection"); +/** + * Creates a WriterCollection + * + * @public + * @param {object} parameters + * @param {string} parameters.name The collection name + * @param {object.} parameters.writerMapping Mapping of virtual base + * paths to writers. Path are matched greedy + * @returns {@ui5/fs/WriterCollection} Writer collection wrapping provided writers + */ +export function createWriterCollection({name, writerMapping}) { + return new WriterCollection({ + name, + writerMapping + }); +} - if (!writer) { - const MemAdapter = require("./adapters/Memory"); - writer = new MemAdapter({ - virBasePath - }); - } +/** + * Creates a Resource. Accepts the same parameters as the Resource constructor. + * + * @public + * @param {object} parameters Parameters to be passed to the resource constructor + * @returns {@ui5/fs/Resource} Resource + */ +export function createResource(parameters) { + return new Resource(parameters); +} - return new DuplexCollection({ - reader, - writer, - name +/** + * Creates a Workspace + * + * A workspace is a DuplexCollection which reads from the project sources. It is used during the build process + * to write modified files into a separate writer, this is usually a Memory adapter. If a file already exists it is + * fetched from the memory to work on it in further build steps. + * + * @public + * @param {object} parameters + * @param {@ui5/fs/AbstractReader} parameters.reader Single reader or collection of readers + * @param {@ui5/fs/AbstractReaderWriter} [parameters.writer] A ReaderWriter instance which is + * only used for writing files. If not supplied, a Memory adapter will be created. + * @param {string} [parameters.name="vir & fs source"] Name of the collection + * @param {string} [parameters.virBasePath="/"] Virtual base path + * @returns {@ui5/fs/DuplexCollection} DuplexCollection which wraps the provided resource locators + */ +export function createWorkspace({reader, writer, virBasePath = "/", name = "vir & fs source"}) { + if (!writer) { + writer = new MemAdapter({ + virBasePath }); - }, + } + + return new DuplexCollection({ + reader, + writer, + name + }); +} - /** - * Normalizes virtual glob patterns by prefixing them with - * a given virtual base directory path - * - * @param {string} virPattern glob pattern for virtual directory structure - * @param {string} virBaseDir virtual base directory path to prefix the given patterns with - * @returns {string[]} A list of normalized glob patterns - */ - prefixGlobPattern(virPattern, virBaseDir) { - const path = require("path"); - const minimatch = require("minimatch"); - const mm = new minimatch.Minimatch(virPattern); +/** + * Normalizes virtual glob patterns by prefixing them with + * a given virtual base directory path + * + * @param {string} virPattern glob pattern for virtual directory structure + * @param {string} virBaseDir virtual base directory path to prefix the given patterns with + * @returns {string[]} A list of normalized glob patterns + */ +export function prefixGlobPattern(virPattern, virBaseDir) { + const mm = new minimatch.Minimatch(virPattern); - const resultGlobs = []; - for (let i = 0; i < mm.globSet.length; i++) { - let resultPattern = path.posix.join(virBaseDir, mm.globSet[i]); + const resultGlobs = []; + for (let i = 0; i < mm.globSet.length; i++) { + let resultPattern = path.posix.join(virBaseDir, mm.globSet[i]); - if (mm.negate) { - resultPattern = "!" + resultPattern; - } - resultGlobs.push(resultPattern); + if (mm.negate) { + resultPattern = "!" + resultPattern; } - return Array.prototype.concat.apply([], resultGlobs); + resultGlobs.push(resultPattern); } -}; - -module.exports = resourceFactory; + return Array.prototype.concat.apply([], resultGlobs); +} diff --git a/lib/tracing/Trace.js b/lib/tracing/Trace.js index c8031708..6e9bcc3a 100644 --- a/lib/tracing/Trace.js +++ b/lib/tracing/Trace.js @@ -1,14 +1,15 @@ -const log = require("@ui5/logger").getLogger("resources:tracing:Trace"); -const logGlobs = require("@ui5/logger").getLogger("resources:tracing:Trace:globs"); -const logPaths = require("@ui5/logger").getLogger("resources:tracing:Trace:paths"); -const prettyHrtime = require("pretty-hrtime"); -const summaryTrace = require("./traceSummary"); +import logger from "@ui5/logger"; +const log = logger.getLogger("resources:tracing:Trace"); +const logGlobs = logger.getLogger("resources:tracing:Trace:globs"); +const logPaths = logger.getLogger("resources:tracing:Trace:paths"); +import prettyHrtime from "pretty-hrtime"; +import summaryTrace from "./traceSummary.js"; const hasOwnProperty = Object.prototype.hasOwnProperty; /** * Trace * - * @memberof module:@ui5/fs.tracing + * @private * @class */ class Trace { @@ -93,4 +94,4 @@ class Trace { } } -module.exports = Trace; +export default Trace; diff --git a/lib/tracing/traceSummary.js b/lib/tracing/traceSummary.js index 8a6840a1..2bb1c5bb 100644 --- a/lib/tracing/traceSummary.js +++ b/lib/tracing/traceSummary.js @@ -1,5 +1,7 @@ -const log = require("@ui5/logger").getLogger("resources:tracing:total"); -const prettyHrtime = require("pretty-hrtime"); +import logger from "@ui5/logger"; +const log = logger.getLogger("resources:tracing:total"); + +import prettyHrtime from "pretty-hrtime"; const hasOwnProperty = Object.prototype.hasOwnProperty; let timeoutId; let active = false; @@ -114,8 +116,7 @@ function collection(name) { } } - -module.exports = { +export default { pathCall: pathCall, globCall: globCall, collection: collection, diff --git a/package-lock.json b/package-lock.json index 4cb6affc..1d4e6da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,8 @@ "random-int": "^2.0.1" }, "devDependencies": { - "ava": "^3.15.0", + "@istanbuljs/esm-loader-hook": "^0.2.0", + "ava": "^4.3.3", "chai": "^4.3.4", "chai-fs": "^2.0.0", "chokidar-cli": "^3.0.0", @@ -32,12 +33,12 @@ "eslint-config-google": "^0.14.0", "eslint-plugin-ava": "^13.2.0", "eslint-plugin-jsdoc": "^37.6.3", + "esmock": "^2.0.0", "jsdoc": "^3.6.7", - "mock-require": "^3.0.3", "nyc": "^15.1.0", "open-cli": "^6.0.1", "rimraf": "^3.0.2", - "sinon": "^11.1.2", + "sinon": "^14.0.0", "tap-nyan": "^1.1.0", "tap-xunit": "^2.4.1" }, @@ -250,6 +251,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-simple-access": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", @@ -460,27 +470,6 @@ "node": ">=6.9.0" } }, - "node_modules/@concordance/react": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@concordance/react/-/react-2.0.0.tgz", - "integrity": "sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1" - }, - "engines": { - "node": ">=6.12.3 <7 || >=8.9.4 <9 || >=10.0.0" - } - }, - "node_modules/@concordance/react/node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@es-joy/jsdoccomment": { "version": "0.20.1", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", @@ -580,6 +569,22 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@istanbuljs/esm-loader-hook": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/esm-loader-hook/-/esm-loader-hook-0.2.0.tgz", + "integrity": "sha512-pw8o3zWCen4sgiNJq69Pcl1Og7Bx4WP3ho7py2FLqZ56Hnz812yN2WwdViCx9tn9U5EWtzF4aqHDRnD7vDs92g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.7", + "@istanbuljs/load-nyc-config": "^1.1.0", + "@istanbuljs/schema": "^0.1.3", + "babel-plugin-istanbul": "^6.0.0", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=16.12.0" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -703,15 +708,6 @@ "node": ">= 8" } }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -722,9 +718,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" @@ -747,18 +743,6 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -951,15 +935,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -969,12 +944,12 @@ } }, "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", + "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -1103,15 +1078,6 @@ "node": "*" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/async-arrays": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-arrays/-/async-arrays-1.0.1.tgz", @@ -1125,73 +1091,315 @@ } }, "node_modules/ava": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-3.15.0.tgz", - "integrity": "sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.3.tgz", + "integrity": "sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w==", "dev": true, "dependencies": { - "@concordance/react": "^2.0.0", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "ansi-styles": "^5.0.0", + "acorn": "^8.7.1", + "acorn-walk": "^8.2.0", + "ansi-styles": "^6.1.0", "arrgv": "^1.0.2", - "arrify": "^2.0.1", - "callsites": "^3.1.0", - "chalk": "^4.1.0", - "chokidar": "^3.4.3", + "arrify": "^3.0.0", + "callsites": "^4.0.0", + "cbor": "^8.1.0", + "chalk": "^5.0.1", + "chokidar": "^3.5.3", "chunkd": "^2.0.1", - "ci-info": "^2.0.0", + "ci-info": "^3.3.1", "ci-parallel-vars": "^1.0.1", "clean-yaml-object": "^0.1.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", + "cli-truncate": "^3.1.0", + "code-excerpt": "^4.0.0", "common-path-prefix": "^3.0.0", - "concordance": "^5.0.1", - "convert-source-map": "^1.7.0", + "concordance": "^5.0.4", "currently-unhandled": "^0.4.1", - "debug": "^4.3.1", - "del": "^6.0.0", - "emittery": "^0.8.0", - "equal-length": "^1.0.0", - "figures": "^3.2.0", - "globby": "^11.0.1", - "ignore-by-default": "^2.0.0", - "import-local": "^3.0.2", - "indent-string": "^4.0.0", + "debug": "^4.3.4", + "del": "^6.1.1", + "emittery": "^0.11.0", + "figures": "^4.0.1", + "globby": "^13.1.1", + "ignore-by-default": "^2.1.0", + "indent-string": "^5.0.0", "is-error": "^2.2.2", "is-plain-object": "^5.0.0", "is-promise": "^4.0.0", - "lodash": "^4.17.20", - "matcher": "^3.0.0", - "md5-hex": "^3.0.1", - "mem": "^8.0.0", + "matcher": "^5.0.0", + "mem": "^9.0.2", "ms": "^2.1.3", - "ora": "^5.2.0", - "p-event": "^4.2.0", - "p-map": "^4.0.0", - "picomatch": "^2.2.2", - "pkg-conf": "^3.1.0", - "plur": "^4.0.0", + "p-event": "^5.0.1", + "p-map": "^5.4.0", + "picomatch": "^2.3.1", + "pkg-conf": "^4.0.0", + "plur": "^5.1.0", "pretty-ms": "^7.0.1", - "read-pkg": "^5.2.0", "resolve-cwd": "^3.0.0", "slash": "^3.0.0", - "source-map-support": "^0.5.19", - "stack-utils": "^2.0.3", - "strip-ansi": "^6.0.0", - "supertap": "^2.0.0", + "stack-utils": "^2.0.5", + "strip-ansi": "^7.0.1", + "supertap": "^3.0.1", "temp-dir": "^2.0.0", - "trim-off-newlines": "^1.0.1", - "update-notifier": "^5.0.1", - "write-file-atomic": "^3.0.3", - "yargs": "^16.2.0" + "write-file-atomic": "^4.0.1", + "yargs": "^17.5.1" }, "bin": { - "ava": "cli.js" + "ava": "entrypoints/cli.mjs" + }, + "engines": { + "node": ">=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=18" + }, + "peerDependencies": { + "@ava/typescript": "*" + }, + "peerDependenciesMeta": { + "@ava/typescript": { + "optional": true + } + } + }, + "node_modules/ava/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ava/node_modules/arrify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", + "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "dev": true, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/callsites": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", + "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==", + "dev": true, "engines": { - "node": ">=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0 <15 || >=15" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ava/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ava/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/ava/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ava/node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ava/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/balanced-match": { @@ -1199,26 +1407,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1240,17 +1428,6 @@ "node": "*" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1263,40 +1440,6 @@ "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", "dev": true }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1346,78 +1489,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -1514,6 +1585,18 @@ "node": ">= 10" } }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, "node_modules/chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -1710,15 +1793,6 @@ "node": ">=6" } }, - "node_modules/chokidar-cli/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/chokidar-cli/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -1843,9 +1917,9 @@ "dev": true }, "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", + "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", "dev": true }, "node_modules/ci-parallel-vars": { @@ -1872,56 +1946,70 @@ "node": ">=0.10.0" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/cliui": { @@ -1943,25 +2031,16 @@ "node": ">=0.8" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, "node_modules/code-excerpt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz", - "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", "dev": true, "dependencies": { - "convert-to-spaces": "^1.0.1" + "convert-to-spaces": "^2.0.1" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/color-convert": { @@ -2032,23 +2111,6 @@ "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" } }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2064,12 +2126,12 @@ } }, "node_modules/convert-to-spaces": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", - "integrity": "sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true, "engines": { - "node": ">= 4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/core-util-is": { @@ -2126,15 +2188,6 @@ "node": ">= 8" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -2213,18 +2266,6 @@ "node": ">=0.10.0" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -2237,15 +2278,6 @@ "node": ">=0.12" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2257,37 +2289,13 @@ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=0.8" + "node": ">=8" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -2396,18 +2404,6 @@ "node": ">=6.0.0" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -2453,10 +2449,10 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "node_modules/electron-to-chromium": { @@ -2466,12 +2462,12 @@ "dev": true }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.11.0.tgz", + "integrity": "sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -2482,15 +2478,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhance-visitors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", @@ -2512,15 +2499,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/equal-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz", - "integrity": "sha512-TK2m7MvWPt/v3dan0BCNp99pytIE5UGrUj7F0KZirNX8xz8fDFUAZfgm8uB5FuQq9u0sMeDocYBfEhsd1nwGoA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2551,15 +2529,6 @@ "node": ">=6" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2867,6 +2836,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esmock": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esmock/-/esmock-2.0.0.tgz", + "integrity": "sha512-dMnO7V+Y2M7pqoAzn42rXfyc3tZvzhK8T9rxAPxYmmxT1imsOv4A02eaHoqXOn2TBd1JAv794mJLWIV64zibQQ==", + "dev": true, + "dependencies": { + "resolvewithplus": "^1.0.0" + }, + "engines": { + "node": ">=14.16.0" + } + }, "node_modules/espree": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", @@ -3015,27 +2996,31 @@ } }, "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz", + "integrity": "sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==", "dev": true, "dependencies": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/file-entry-cache": { @@ -3221,10 +3206,13 @@ } }, "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, "node_modules/get-func-name": { "version": "2.0.0", @@ -3253,18 +3241,6 @@ "node": ">=8" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3302,21 +3278,6 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -3345,28 +3306,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -3428,15 +3367,6 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -3465,12 +3395,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -3530,34 +3454,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/import-modules": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", @@ -3603,15 +3499,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -3648,18 +3535,6 @@ "node": ">=8" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -3720,43 +3595,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3765,15 +3603,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -3835,12 +3664,12 @@ "dev": true }, "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3867,12 +3696,6 @@ "node": ">=8" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -4096,18 +3919,6 @@ "node": ">=4" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -4144,15 +3955,6 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4171,18 +3973,6 @@ "node": ">=14.14.0" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4212,50 +4002,15 @@ } }, "node_modules/load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", + "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - }, "engines": { - "node": ">=6" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/locate-path": { @@ -4306,22 +4061,6 @@ "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", "dev": true }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4343,15 +4082,6 @@ "get-func-name": "^2.0.0" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4464,15 +4194,30 @@ } }, "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", + "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", "dev": true, "dependencies": { - "escape-string-regexp": "^4.0.0" + "escape-string-regexp": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/matcher/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/md5-hex": { @@ -4494,16 +4239,16 @@ "dev": true }, "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", + "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", "dev": true, "dependencies": { "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sindresorhus/mem?sponsor=1" @@ -4573,21 +4318,15 @@ } }, "node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/min-indent": { @@ -4651,31 +4390,6 @@ "node": ">=10" } }, - "node_modules/mock-require": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.3.tgz", - "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==", - "dev": true, - "dependencies": { - "get-caller-file": "^1.0.2", - "normalize-path": "^2.1.1" - }, - "engines": { - "node": ">=4.3.0" - } - }, - "node_modules/mock-require/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -4750,6 +4464,15 @@ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "engines": { + "node": ">=12.19" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -4780,15 +4503,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/npmlog": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", @@ -4888,15 +4602,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/nyc/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", @@ -4969,30 +4674,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -5045,38 +4726,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -5087,29 +4736,20 @@ } }, "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", + "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, "dependencies": { - "p-timeout": "^3.1.0" + "p-timeout": "^5.0.2" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5153,15 +4793,15 @@ } }, "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -5188,30 +4828,6 @@ "node": ">=8" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5340,72 +4956,102 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/pkg-conf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", + "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", "dev": true, + "dependencies": { + "find-up": "^6.0.0", + "load-json-file": "^7.0.0" + }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", - "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "node_modules/pkg-conf/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, "dependencies": { - "find-up": "^3.0.0", - "load-json-file": "^5.2.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-conf/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-conf/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-dir": { @@ -5430,15 +5076,15 @@ } }, "node_modules/plur": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", + "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", "dev": true, "dependencies": { - "irregular-plurals": "^3.2.0" + "irregular-plurals": "^3.3.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5477,15 +5123,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -5527,16 +5164,6 @@ "node": ">=8" } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -5546,18 +5173,6 @@ "node": ">=6" } }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/query-ast": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/query-ast/-/query-ast-1.0.4.tgz", @@ -5603,36 +5218,6 @@ "node": ">=8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -5750,30 +5335,6 @@ "node": ">=0.1.14" } }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -5786,12 +5347,6 @@ "node": ">=4" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5869,26 +5424,13 @@ "node": ">=4" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/resolvewithplus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolvewithplus/-/resolvewithplus-1.0.0.tgz", + "integrity": "sha512-rjEDkAH90XUQb5RN/+yxbcngIGTzusussygz7Cx9UC63ESsgOgsHhpnvUJKEJQLN/6M/9xPMGkAPEh21CKErsQ==", "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, "engines": { - "node": ">=8" + "node": ">=12.16.0" } }, "node_modules/reusify": { @@ -5993,27 +5535,6 @@ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", @@ -6079,16 +5600,16 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sinon": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", - "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", + "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^7.1.2", - "@sinonjs/samsam": "^6.0.2", + "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/samsam": "^6.1.1", "diff": "^5.0.0", - "nise": "^5.1.0", + "nise": "^5.1.1", "supports-color": "^7.2.0" }, "funding": { @@ -6098,59 +5619,40 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6169,16 +5671,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -6363,19 +5855,57 @@ } }, "node_modules/supertap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz", - "integrity": "sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", + "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", "dev": true, "dependencies": { - "arrify": "^2.0.1", - "indent-string": "^4.0.0", - "js-yaml": "^3.14.0", + "indent-string": "^5.0.0", + "js-yaml": "^3.14.1", "serialize-error": "^7.0.1", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/supertap/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/supertap/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supertap/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/supports-color": { @@ -6748,15 +6278,6 @@ "node": ">=4" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6800,15 +6321,6 @@ "node": ">=8" } }, - "node_modules/trim-off-newlines": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", - "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6860,46 +6372,6 @@ "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", "dev": true }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6909,18 +6381,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6951,15 +6411,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/well-known-symbols": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", @@ -6998,18 +6449,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wolfy87-eventemitter": { "version": "5.2.9", "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", @@ -7093,15 +6532,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/xmlbuilder": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", @@ -7193,15 +6623,6 @@ "node": ">=6" } }, - "node_modules/yargs/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/yargs/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -7380,6 +6801,12 @@ "@babel/types": "^7.18.0" } }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + }, "@babel/helper-simple-access": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", @@ -7536,23 +6963,6 @@ "to-fast-properties": "^2.0.0" } }, - "@concordance/react": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@concordance/react/-/react-2.0.0.tgz", - "integrity": "sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA==", - "dev": true, - "requires": { - "arrify": "^1.0.1" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - } - } - }, "@es-joy/jsdoccomment": { "version": "0.20.1", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", @@ -7630,6 +7040,19 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@istanbuljs/esm-loader-hook": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/esm-loader-hook/-/esm-loader-hook-0.2.0.tgz", + "integrity": "sha512-pw8o3zWCen4sgiNJq69Pcl1Og7Bx4WP3ho7py2FLqZ56Hnz812yN2WwdViCx9tn9U5EWtzF4aqHDRnD7vDs92g==", + "dev": true, + "requires": { + "@babel/core": "^7.8.7", + "@istanbuljs/load-nyc-config": "^1.1.0", + "@istanbuljs/schema": "^0.1.3", + "babel-plugin-istanbul": "^6.0.0", + "test-exclude": "^6.0.0" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -7725,12 +7148,6 @@ "fastq": "^1.6.0" } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -7741,9 +7158,9 @@ } }, "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -7766,15 +7183,6 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, "@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -7945,24 +7353,15 @@ "uri-js": "^4.2.2" } }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", + "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", "dev": true }, "anymatch": { @@ -8058,12 +7457,6 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "async-arrays": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-arrays/-/async-arrays-1.0.1.tgz", @@ -8074,67 +7467,217 @@ } }, "ava": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-3.15.0.tgz", - "integrity": "sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.3.tgz", + "integrity": "sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w==", "dev": true, "requires": { - "@concordance/react": "^2.0.0", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "ansi-styles": "^5.0.0", + "acorn": "^8.7.1", + "acorn-walk": "^8.2.0", + "ansi-styles": "^6.1.0", "arrgv": "^1.0.2", - "arrify": "^2.0.1", - "callsites": "^3.1.0", - "chalk": "^4.1.0", - "chokidar": "^3.4.3", + "arrify": "^3.0.0", + "callsites": "^4.0.0", + "cbor": "^8.1.0", + "chalk": "^5.0.1", + "chokidar": "^3.5.3", "chunkd": "^2.0.1", - "ci-info": "^2.0.0", + "ci-info": "^3.3.1", "ci-parallel-vars": "^1.0.1", "clean-yaml-object": "^0.1.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", + "cli-truncate": "^3.1.0", + "code-excerpt": "^4.0.0", "common-path-prefix": "^3.0.0", - "concordance": "^5.0.1", - "convert-source-map": "^1.7.0", + "concordance": "^5.0.4", "currently-unhandled": "^0.4.1", - "debug": "^4.3.1", - "del": "^6.0.0", - "emittery": "^0.8.0", - "equal-length": "^1.0.0", - "figures": "^3.2.0", - "globby": "^11.0.1", - "ignore-by-default": "^2.0.0", - "import-local": "^3.0.2", - "indent-string": "^4.0.0", + "debug": "^4.3.4", + "del": "^6.1.1", + "emittery": "^0.11.0", + "figures": "^4.0.1", + "globby": "^13.1.1", + "ignore-by-default": "^2.1.0", + "indent-string": "^5.0.0", "is-error": "^2.2.2", "is-plain-object": "^5.0.0", "is-promise": "^4.0.0", - "lodash": "^4.17.20", - "matcher": "^3.0.0", - "md5-hex": "^3.0.1", - "mem": "^8.0.0", + "matcher": "^5.0.0", + "mem": "^9.0.2", "ms": "^2.1.3", - "ora": "^5.2.0", - "p-event": "^4.2.0", - "p-map": "^4.0.0", - "picomatch": "^2.2.2", - "pkg-conf": "^3.1.0", - "plur": "^4.0.0", + "p-event": "^5.0.1", + "p-map": "^5.4.0", + "picomatch": "^2.3.1", + "pkg-conf": "^4.0.0", + "plur": "^5.1.0", "pretty-ms": "^7.0.1", - "read-pkg": "^5.2.0", "resolve-cwd": "^3.0.0", "slash": "^3.0.0", - "source-map-support": "^0.5.19", - "stack-utils": "^2.0.3", - "strip-ansi": "^6.0.0", - "supertap": "^2.0.0", + "stack-utils": "^2.0.5", + "strip-ansi": "^7.0.1", + "supertap": "^3.0.1", "temp-dir": "^2.0.0", - "trim-off-newlines": "^1.0.1", - "update-notifier": "^5.0.1", - "write-file-atomic": "^3.0.3", - "yargs": "^16.2.0" + "write-file-atomic": "^4.0.1", + "yargs": "^17.5.1" + }, + "dependencies": { + "aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "arrify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", + "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "dev": true + }, + "callsites": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", + "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==", + "dev": true + }, + "chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true + }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "requires": { + "escape-string-regexp": "5.0.0" + } + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, + "globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "dependencies": { + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, + "p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "requires": { + "aggregate-error": "^4.0.0" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "balanced-match": { @@ -8142,12 +7685,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -8163,17 +7700,6 @@ "array-events": "^0.2.0" } }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -8186,30 +7712,6 @@ "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", "dev": true }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -8240,54 +7742,6 @@ "picocolors": "^1.0.0" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, "caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -8352,6 +7806,15 @@ "lodash": "^4.17.15" } }, + "cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "requires": { + "nofilter": "^3.1.0" + } + }, "chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -8494,12 +7957,6 @@ "locate-path": "^3.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -8605,9 +8062,9 @@ "dev": true }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", + "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", "dev": true }, "ci-parallel-vars": { @@ -8628,35 +8085,48 @@ "integrity": "sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==", "dev": true }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "cliui": { @@ -8675,22 +8145,13 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "code-excerpt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz", - "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", "dev": true, "requires": { - "convert-to-spaces": "^1.0.1" + "convert-to-spaces": "^2.0.1" } }, "color-convert": { @@ -8752,20 +8213,6 @@ "well-known-symbols": "^2.0.0" } }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -8781,9 +8228,9 @@ } }, "convert-to-spaces": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", - "integrity": "sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true }, "core-util-is": { @@ -8825,12 +8272,6 @@ "which": "^2.0.1" } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -8890,15 +8331,6 @@ } } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -8908,12 +8340,6 @@ "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -8929,29 +8355,6 @@ "strip-bom": "^4.0.0" } }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - } - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, "del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -9039,15 +8442,6 @@ "esutils": "^2.0.2" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -9095,10 +8489,10 @@ } } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "electron-to-chromium": { @@ -9108,9 +8502,9 @@ "dev": true }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.11.0.tgz", + "integrity": "sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g==", "dev": true }, "emoji-regex": { @@ -9118,15 +8512,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "enhance-visitors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", @@ -9142,12 +8527,6 @@ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true }, - "equal-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz", - "integrity": "sha512-TK2m7MvWPt/v3dan0BCNp99pytIE5UGrUj7F0KZirNX8xz8fDFUAZfgm8uB5FuQq9u0sMeDocYBfEhsd1nwGoA==", - "dev": true - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9175,12 +8554,6 @@ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -9396,6 +8769,15 @@ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, + "esmock": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esmock/-/esmock-2.0.0.tgz", + "integrity": "sha512-dMnO7V+Y2M7pqoAzn42rXfyc3tZvzhK8T9rxAPxYmmxT1imsOv4A02eaHoqXOn2TBd1JAv794mJLWIV64zibQQ==", + "dev": true, + "requires": { + "resolvewithplus": "^1.0.0" + } + }, "espree": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", @@ -9516,18 +8898,19 @@ } }, "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz", + "integrity": "sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "dependencies": { "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true } } @@ -9661,9 +9044,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-func-name": { @@ -9684,15 +9067,6 @@ "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -9721,15 +9095,6 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -9749,25 +9114,6 @@ "slash": "^3.0.0" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -9816,12 +9162,6 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -9844,12 +9184,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -9883,22 +9217,6 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, "import-modules": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", @@ -9932,12 +9250,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -9968,15 +9280,6 @@ "binary-extensions": "^2.0.0" } }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, "is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -10016,39 +9319,11 @@ "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -10092,9 +9367,9 @@ "dev": true }, "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true }, "is-windows": { @@ -10112,12 +9387,6 @@ "is-docker": "^2.0.0" } }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -10296,18 +9565,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -10338,15 +9595,6 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -10359,15 +9607,6 @@ "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==", "dev": true }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -10394,41 +9633,10 @@ } }, "load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true - } - } + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", + "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", + "dev": true }, "locate-path": { "version": "5.0.0", @@ -10475,16 +9683,6 @@ "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", "dev": true }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -10503,12 +9701,6 @@ "get-func-name": "^2.0.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -10592,12 +9784,20 @@ "dev": true }, "matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", + "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", "dev": true, "requires": { - "escape-string-regexp": "^4.0.0" + "escape-string-regexp": "^5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + } } }, "md5-hex": { @@ -10616,13 +9816,13 @@ "dev": true }, "mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", + "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", "dev": true, "requires": { "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" + "mimic-fn": "^4.0.0" } }, "meow": { @@ -10673,15 +9873,9 @@ } }, "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true }, "min-indent": { @@ -10729,27 +9923,6 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "mock-require": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.3.tgz", - "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==", - "dev": true, - "requires": { - "get-caller-file": "^1.0.2", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -10809,6 +9982,12 @@ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, + "nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -10835,12 +10014,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, "npmlog": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", @@ -10922,12 +10095,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", @@ -10990,23 +10157,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } - } - }, "open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -11044,29 +10194,6 @@ "word-wrap": "^1.2.3" } }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -11074,20 +10201,14 @@ "dev": true }, "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", + "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, "requires": { - "p-timeout": "^3.1.0" + "p-timeout": "^5.0.2" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -11116,13 +10237,10 @@ } }, "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "dev": true }, "p-try": { "version": "2.2.0", @@ -11142,26 +10260,6 @@ "release-zalgo": "^1.0.0" } }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11250,54 +10348,63 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, "pkg-conf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", - "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", + "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", "dev": true, "requires": { - "find-up": "^3.0.0", - "load-json-file": "^5.2.0" + "find-up": "^6.0.0", + "load-json-file": "^7.0.0" }, "dependencies": { "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^4.0.0" } }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true } } @@ -11321,12 +10428,12 @@ } }, "plur": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", + "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", "dev": true, "requires": { - "irregular-plurals": "^3.2.0" + "irregular-plurals": "^3.3.0" } }, "postcss": { @@ -11346,12 +10453,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true - }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -11381,31 +10482,12 @@ "fromentries": "^1.2.0" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, "query-ast": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/query-ast/-/query-ast-1.0.4.tgz", @@ -11431,32 +10513,6 @@ "resolved": "https://registry.npmjs.org/random-int/-/random-int-2.0.1.tgz", "integrity": "sha512-YALjWK2Rt9EMIv9BF/3mvlzFWQathsvb5UZmN1QmhfIOfcQYXc/UcLzg0ablqesSBpBVLt2Tlwv/eTuBh4LXUQ==" }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true - } - } - }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -11546,24 +10602,6 @@ "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", "dev": true }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -11573,12 +10611,6 @@ "es6-error": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11640,24 +10672,11 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } + "resolvewithplus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolvewithplus/-/resolvewithplus-1.0.0.tgz", + "integrity": "sha512-rjEDkAH90XUQb5RN/+yxbcngIGTzusussygz7Cx9UC63ESsgOgsHhpnvUJKEJQLN/6M/9xPMGkAPEh21CKErsQ==", + "dev": true }, "reusify": { "version": "1.0.4", @@ -11722,23 +10741,6 @@ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, "serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", @@ -11788,16 +10790,16 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sinon": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", - "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", + "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==", "dev": true, "requires": { "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^7.1.2", - "@sinonjs/samsam": "^6.0.2", + "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/samsam": "^6.1.1", "diff": "^5.0.0", - "nise": "^5.1.0", + "nise": "^5.1.1", "supports-color": "^7.2.0" } }, @@ -11807,38 +10809,19 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true } } @@ -11855,16 +10838,6 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -12005,16 +10978,38 @@ } }, "supertap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz", - "integrity": "sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", + "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", "dev": true, "requires": { - "arrify": "^2.0.1", - "indent-string": "^4.0.0", - "js-yaml": "^3.14.0", + "indent-string": "^5.0.0", + "js-yaml": "^3.14.1", "serialize-error": "^7.0.1", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "supports-color": { @@ -12326,12 +11321,6 @@ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12364,12 +11353,6 @@ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, - "trim-off-newlines": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", - "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12412,37 +11395,6 @@ "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", "dev": true }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -12452,15 +11404,6 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -12488,15 +11431,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, "well-known-symbols": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", @@ -12526,15 +11460,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, "wolfy87-eventemitter": { "version": "5.2.9", "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", @@ -12602,12 +11527,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, "xmlbuilder": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", @@ -12662,12 +11581,6 @@ "yargs-parser": "^20.2.2" }, "dependencies": { - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", diff --git a/package.json b/package.json index 1c6fa766..8e09c8dc 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,20 @@ "development", "tool" ], - "main": "index.js", + "type": "module", + "exports": { + "./adapters/*": "./lib/adapters/*.js", + "./AbstractReader": "./lib/AbstractReader.js", + "./AbstractReaderWriter": "./lib/AbstractReaderWriter.js", + "./DuplexCollection": "./lib/DuplexCollection.js", + "./fsInterface": "./lib/fsInterface.js", + "./ReaderCollection": "./lib/ReaderCollection.js", + "./ReaderCollectionPrioritized": "./lib/ReaderCollectionPrioritized.js", + "./Resource": "./lib/Resource.js", + "./resourceFactory": "./lib/resourceFactory.js", + "./package.json": "./package.json", + "./internal/ResourceTagCollection": "./lib/ResourceTagCollection.js" + }, "engines": { "node": ">= 16.13.2", "npm": ">= 8" @@ -27,11 +40,11 @@ "lint": "eslint ./", "unit": "rimraf test/tmp && ava", "unit-verbose": "rimraf test/tmp && cross-env UI5_LOG_LVL=verbose ava --verbose --serial", - "unit-watch": "rimraf test/tmp && ava --watch", - "unit-nyan": "rimraf test/tmp && ava --tap | tnyan", - "unit-xunit": "rimraf test/tmp && ava --tap | tap-xunit --dontUseCommentsAsTestNames=true > test-results.xml", + "unit-watch": "npm run unit -- --watch", + "unit-nyan": "npm run unit -- --tap | tnyan", + "unit-xunit": "rimraf test/tmp && ava --node-arguments=\"--experimental-loader=@istanbuljs/esm-loader-hook\" --tap | tap-xunit --dontUseCommentsAsTestNames=true > test-results.xml", "unit-inspect": "cross-env UI5_LOG_LVL=verbose ava debug --break", - "coverage": "nyc npm run unit", + "coverage": "rimraf test/tmp && nyc ava --node-arguments=\"--experimental-loader=@istanbuljs/esm-loader-hook\"", "coverage-xunit": "nyc --reporter=text --reporter=text-summary --reporter=cobertura npm run unit-xunit", "jsdoc": "npm run jsdoc-generate && open-cli jsdocs/index.html", "jsdoc-generate": "jsdoc -c ./jsdoc.json -t $(node -p 'path.dirname(require.resolve(\"docdash\"))') ./lib/ || (echo 'Error during JSDoc generation! Check log.' && exit 1)", @@ -40,10 +53,9 @@ "version": "git-chglog --sort semver --next-tag v$npm_package_version -o CHANGELOG.md && git add CHANGELOG.md", "postversion": "git push --follow-tags", "release-note": "git-chglog --sort semver -c .chglog/release-config.yml v$npm_package_version", - "depcheck": "depcheck --ignores docdash" + "depcheck": "depcheck --ignores @ui5/fs,docdash,@istanbuljs/esm-loader-hook" }, "files": [ - "index.js", "CHANGELOG.md", "CONTRIBUTING.md", "jsdoc.json", @@ -57,6 +69,10 @@ ], "ignoredByWatcher": [ "test/tmp/**" + ], + "nodeArguments": [ + "--loader=esmock", + "--no-warnings" ] }, "nyc": { @@ -70,8 +86,8 @@ "jsdocs/**", "coverage/**", "test/**", - ".eslintrc.js", - "jsdoc-plugin.js" + ".eslintrc.cjs", + "jsdoc-plugin.cjs" ], "check-coverage": true, "statements": 85, @@ -116,7 +132,8 @@ "random-int": "^2.0.1" }, "devDependencies": { - "ava": "^3.15.0", + "@istanbuljs/esm-loader-hook": "^0.2.0", + "ava": "^4.3.3", "chai": "^4.3.4", "chai-fs": "^2.0.0", "chokidar-cli": "^3.0.0", @@ -125,14 +142,14 @@ "docdash": "^1.2.0", "eslint": "^8.7.0", "eslint-config-google": "^0.14.0", - "eslint-plugin-jsdoc": "^37.6.3", "eslint-plugin-ava": "^13.2.0", + "eslint-plugin-jsdoc": "^37.6.3", + "esmock": "^2.0.0", "jsdoc": "^3.6.7", - "mock-require": "^3.0.3", "nyc": "^15.1.0", "open-cli": "^6.0.1", "rimraf": "^3.0.2", - "sinon": "^11.1.2", + "sinon": "^14.0.0", "tap-nyan": "^1.1.0", "tap-xunit": "^2.4.1" } diff --git a/test/lib/AbstractReader.js b/test/lib/AbstractReader.js index 987e467b..c5d9c009 100644 --- a/test/lib/AbstractReader.js +++ b/test/lib/AbstractReader.js @@ -1,5 +1,5 @@ -const test = require("ava"); -const AbstractReader = require("../../lib/AbstractReader"); +import test from "ava"; +import AbstractReader from "../../lib/AbstractReader.js"; test("AbstractReader: constructor throws an error", (t) => { t.throws(() => { diff --git a/test/lib/AbstractReaderWriter.js b/test/lib/AbstractReaderWriter.js index f9c04ec0..1cb5cec2 100644 --- a/test/lib/AbstractReaderWriter.js +++ b/test/lib/AbstractReaderWriter.js @@ -1,5 +1,5 @@ -const test = require("ava"); -const AbstractReaderWriter = require("../../lib/AbstractReaderWriter"); +import test from "ava"; +import AbstractReaderWriter from "../../lib/AbstractReaderWriter.js"; test("AbstractReaderWriter: constructor throws an error", (t) => { t.throws(() => { @@ -9,3 +9,17 @@ test("AbstractReaderWriter: constructor throws an error", (t) => { message: "Class 'AbstractReaderWriter' is abstract" }); }); + +test("Incomplete AbstractReaderWriter subclass: Abstract functions throw error", (t) => { + class Dummy extends AbstractReaderWriter {} + + const instance = new Dummy(); + + t.throws(() => { + instance._write(); + }, { + instanceOf: Error, + message: "Not implemented" + }); +}); + diff --git a/test/lib/DuplexCollection.js b/test/lib/DuplexCollection.js index bd55223e..2f85f67b 100644 --- a/test/lib/DuplexCollection.js +++ b/test/lib/DuplexCollection.js @@ -1,8 +1,8 @@ -const test = require("ava"); -const sinon = require("sinon"); -const DuplexCollection = require("../../lib/DuplexCollection"); -const ReaderCollectionPrioritized = require("../../lib/ReaderCollectionPrioritized"); -const Resource = require("../../lib/Resource"); +import test from "ava"; +import sinon from "sinon"; +import DuplexCollection from "../../lib/DuplexCollection.js"; +import ReaderCollectionPrioritized from "../../lib/ReaderCollectionPrioritized.js"; +import Resource from "../../lib/Resource.js"; test("DuplexCollection: constructor", (t) => { const duplexCollection = new DuplexCollection({ diff --git a/test/lib/ReaderCollection.js b/test/lib/ReaderCollection.js index 8b84c564..6e06ca51 100644 --- a/test/lib/ReaderCollection.js +++ b/test/lib/ReaderCollection.js @@ -1,7 +1,7 @@ -const test = require("ava"); -const sinon = require("sinon"); -const ReaderCollection = require("../../lib/ReaderCollection"); -const Resource = require("../../lib/Resource"); +import test from "ava"; +import sinon from "sinon"; +import ReaderCollection from "../../lib/ReaderCollection.js"; +import Resource from "../../lib/Resource.js"; test("ReaderCollection: constructor", (t) => { const readerCollection = new ReaderCollection({ diff --git a/test/lib/Resource.js b/test/lib/Resource.js index d23a969b..ada09b7a 100644 --- a/test/lib/Resource.js +++ b/test/lib/Resource.js @@ -1,17 +1,15 @@ -const test = require("ava"); -const Stream = require("stream"); -const fs = require("fs"); -const path = require("path"); -const {promisify} = require("util"); -const stat = promisify(fs.stat); -const Resource = require("../../lib/Resource"); +import test from "ava"; +import {Stream, Transform} from "node:stream"; +import {promises as fs, createReadStream} from "node:fs"; +import path from "node:path"; +import Resource from "../../lib/Resource.js"; function createBasicResource() { const fsPath = path.join("test", "fixtures", "application.a", "webapp", "index.html"); const resource = new Resource({ path: "/app/index.html", createStream: function() { - return fs.createReadStream(fsPath); + return createReadStream(fsPath); }, project: {}, statInfo: {}, @@ -174,7 +172,6 @@ test("Resource: size modification", async (t) => { string: "Content" }).getSize(), 7, "size when passing string to constructor"); - // buffer resource.setBuffer(Buffer.from("Super")); @@ -183,7 +180,6 @@ test("Resource: size modification", async (t) => { const clonedResource1 = await resource.clone(); t.is(await clonedResource1.getSize(), 5, "size after cloning the resource"); - // buffer with alloc const buf = Buffer.alloc(1234); buf.write("some string", 0, "utf8"); @@ -327,7 +323,6 @@ test("getStream with Buffer content: Subsequent content requests should throw er test("getStream with Stream content: Subsequent content requests should throw error due to drained " + "content", async (t) => { const resource = createBasicResource(); - const {Transform} = require("stream"); const tStream = new Transform({ transform(chunk, encoding, callback) { this.push(chunk.toString()); @@ -349,7 +344,6 @@ test("getStream with Stream content: Subsequent content requests should throw er test("getBuffer from Stream content: Subsequent content requests should not throw error due to drained " + "content", async (t) => { const resource = createBasicResource(); - const {Transform} = require("stream"); const tStream = new Transform({ transform(chunk, encoding, callback) { this.push(chunk.toString()); @@ -370,6 +364,38 @@ test("getBuffer from Stream content: Subsequent content requests should not thro await t.notThrowsAsync(p2); }); +test("Resource: getProject", (t) => { + t.plan(1); + const resource = new Resource({ + path: "my/path/to/resource", + project: {getName: () => "Mock Project"} + }); + const project = resource.getProject(); + t.is(project.getName(), "Mock Project"); +}); + +test("Resource: setProject", (t) => { + t.plan(1); + const resource = new Resource({ + path: "my/path/to/resource" + }); + const project = {getName: () => "Mock Project"}; + resource.setProject(project); + t.is(resource.getProject().getName(), "Mock Project"); +}); + +test("Resource: reassign with setProject", (t) => { + t.plan(2); + const resource = new Resource({ + path: "my/path/to/resource", + project: {getName: () => "Mock Project"} + }); + const project = {getName: () => "New Mock Project"}; + const error = t.throws(() => resource.setProject(project)); + t.is(error.message, "Unable to assign project New Mock Project to resource my/path/to/resource: " + + "Resource is already associated to project " + project); +}); + test("Resource: constructor with stream", async (t) => { const stream = new Stream.Readable(); stream._read = function() {}; @@ -395,13 +421,13 @@ test("Resource: constructor with stream", async (t) => { test("integration stat - resource size", async (t) => { const fsPath = path.join("test", "fixtures", "application.a", "webapp", "index.html"); - const statInfo = await stat(fsPath); + const statInfo = await fs.stat(fsPath); const resource = new Resource({ path: fsPath, statInfo, createStream: () => { - return fs.createReadStream(fsPath); + return createReadStream(fsPath); } }); t.is(await resource.getSize(), 91); diff --git a/test/lib/ResourceFacade.js b/test/lib/ResourceFacade.js index 16e934d3..982f6e4e 100644 --- a/test/lib/ResourceFacade.js +++ b/test/lib/ResourceFacade.js @@ -1,7 +1,7 @@ -const test = require("ava"); -const sinon = require("sinon"); -const Resource = require("../../lib/Resource"); -const ResourceFacade = require("../../lib/ResourceFacade"); +import test from "ava"; +import sinon from "sinon"; +import Resource from "../../lib/Resource.js"; +import ResourceFacade from "../../lib/ResourceFacade.js"; test.afterEach.always( (t) => { sinon.restore(); diff --git a/test/lib/ResourceTagCollection.js b/test/lib/ResourceTagCollection.js index b719d65c..1329187c 100644 --- a/test/lib/ResourceTagCollection.js +++ b/test/lib/ResourceTagCollection.js @@ -1,8 +1,7 @@ -const test = require("ava"); -const sinon = require("sinon"); - -const Resource = require("../../lib/Resource"); -const ResourceTagCollection = require("../../lib/ResourceTagCollection"); +import test from "ava"; +import sinon from "sinon"; +import Resource from "../../lib/Resource.js"; +import ResourceTagCollection from "../../lib/ResourceTagCollection.js"; test.afterEach.always((t) => { sinon.restore(); diff --git a/test/lib/WriterCollection.js b/test/lib/WriterCollection.js index 22452e6d..f2efabeb 100644 --- a/test/lib/WriterCollection.js +++ b/test/lib/WriterCollection.js @@ -1,7 +1,7 @@ -const test = require("ava"); -const sinon = require("sinon"); -const WriterCollection = require("../../lib/WriterCollection"); -const Resource = require("../../lib/Resource"); +import test from "ava"; +import sinon from "sinon"; +import WriterCollection from "../../lib/WriterCollection.js"; +import Resource from "../../lib/Resource.js"; test("Constructor: Path mapping regex", (t) => { const myWriter = {}; diff --git a/test/lib/adapters/FileSystem_read.js b/test/lib/adapters/FileSystem_read.js index 12fc5c95..a58de145 100644 --- a/test/lib/adapters/FileSystem_read.js +++ b/test/lib/adapters/FileSystem_read.js @@ -1,8 +1,8 @@ -const test = require("ava"); -const {resourceFactory} = require("../../../"); +import test from "ava"; +import {createAdapter} from "../../../lib/resourceFactory.js"; test("glob resources from application.a w/ virtual base path prefix", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); @@ -12,7 +12,7 @@ test("glob resources from application.a w/ virtual base path prefix", async (t) }); test("glob resources from application.a w/o virtual base path prefix", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); @@ -22,7 +22,7 @@ test("glob resources from application.a w/o virtual base path prefix", async (t) }); test("glob virtual directory w/o virtual base path prefix", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); @@ -32,7 +32,7 @@ test("glob virtual directory w/o virtual base path prefix", async (t) => { }); test("glob virtual directory w/o virtual base path prefix and multiple patterns", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); @@ -45,7 +45,7 @@ test("glob virtual directory w/o virtual base path prefix and multiple patterns" }); test("glob virtual directory w/ virtual base path prefix", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/one/two/" }); @@ -55,7 +55,7 @@ test("glob virtual directory w/ virtual base path prefix", async (t) => { }); test("glob virtual directory w/o virtual base path prefix and nodir: true", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); @@ -65,7 +65,7 @@ test("glob virtual directory w/o virtual base path prefix and nodir: true", asyn }); test("glob virtual directory w/o virtual base path prefix and nodir: true and multiple patterns", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); @@ -78,7 +78,7 @@ test("glob virtual directory w/o virtual base path prefix and nodir: true and mu }); test("glob virtual directory w/ virtual base path prefix and nodir: true", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/one/two/" }); @@ -88,7 +88,7 @@ test("glob virtual directory w/ virtual base path prefix and nodir: true", async }); test("glob resources from application.a with directory exclude", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); @@ -99,7 +99,7 @@ test("glob resources from application.a with directory exclude", async (t) => { }); test("byPath virtual directory", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/" }); @@ -121,13 +121,13 @@ test("static excludes: glob library src and test", async (t) => { "/test-resources/**", ]; - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes }); - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/test", virBasePath: "/test-resources/", excludes @@ -152,13 +152,13 @@ test("static excludes: glob library src and test with double negation", async (t // double negation has effect over preceding "/test-resources/**" exclude "!/test-resources/library/l/Test2.html", ]; - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes }); - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/test", virBasePath: "/test-resources/", excludes @@ -186,7 +186,7 @@ test("static excludes: glob library test with double negation", async (t) => { "!/test-resources/library/l/Test2.html", ]; - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/test", virBasePath: "/test-resources/", excludes @@ -201,7 +201,7 @@ test("static excludes: glob library test with double negation", async (t) => { }); test("static excludes: glob with virtual root exclude", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes: [ @@ -215,7 +215,7 @@ test("static excludes: glob with virtual root exclude", async (t) => { }); test("static excludes: glob with negated directory exclude, excluding resources", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes: [ @@ -229,7 +229,7 @@ test("static excludes: glob with negated directory exclude, excluding resources" }); test("static excludes: glob with negated directory exclude, not excluding resources", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes: [ @@ -243,7 +243,7 @@ test("static excludes: glob with negated directory exclude, not excluding resour }); test("static excludes: byPath exclude everything in sub-directory", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", excludes: ["/resources/app/**"] @@ -254,7 +254,7 @@ test("static excludes: byPath exclude everything in sub-directory", async (t) => }); test("static excludes: byPath exclude with negation", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", excludes: [ @@ -268,7 +268,7 @@ test("static excludes: byPath exclude with negation", async (t) => { }); test("static excludes: byPath exclude with unused negation", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", excludes: [ @@ -282,7 +282,7 @@ test("static excludes: byPath exclude with unused negation", async (t) => { }); test("static excludes: byPath exclude with negated directory pattern, excluding resources", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", excludes: [ @@ -295,7 +295,7 @@ test("static excludes: byPath exclude with negated directory pattern, excluding }); test("static excludes: byPath exclude with negated directory pattern, not excluding resources", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", excludes: [ @@ -308,7 +308,7 @@ test("static excludes: byPath exclude with negated directory pattern, not exclud }); test("byPath: exclude with unused negation", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ fsBasePath: "./test/fixtures/application.b/webapp", virBasePath: "/resources/app/", excludes: [ @@ -336,13 +336,13 @@ test("static excludes: glob library src and test with double negation (nodir: fa // double negation has effect over preceding "/test-resources/**" exclude "!/test-resources/library/l/Test2.html", ]; - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes }); - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/test", virBasePath: "/test-resources/", excludes @@ -360,7 +360,7 @@ test("static excludes: glob library src and test with double negation (nodir: fa }); test("static excludes: glob with virtual root exclude (nodir: false)", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes: [ @@ -373,7 +373,7 @@ test("static excludes: glob with virtual root exclude (nodir: false)", async (t) t.is(resources.length, 0, "Found no resources"); }); test("static excludes: glob with negated directory exclude, excluding resources (nodir: false)", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes: [ @@ -387,7 +387,7 @@ test("static excludes: glob with negated directory exclude, excluding resources }); test("static excludes: glob with negated directory exclude, not excluding resources (nodir: false)", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ fsBasePath: "./test/fixtures/library.l/src", virBasePath: "/resources/", excludes: [ diff --git a/test/lib/adapters/FileSystem_write.js b/test/lib/adapters/FileSystem_write.js index 5bac557c..27a21b37 100644 --- a/test/lib/adapters/FileSystem_write.js +++ b/test/lib/adapters/FileSystem_write.js @@ -1,27 +1,32 @@ -const path = require("path"); -const {promisify} = require("util"); -const fs = require("fs"); +import path from "node:path"; +import {promisify} from "node:util"; +import fs from "node:fs"; +import {fileURLToPath} from "node:url"; const fsAccess = promisify(fs.access); -const test = require("ava"); -const rimraf = promisify(require("rimraf")); -const chai = require("chai"); -chai.use(require("chai-fs")); +import makeDir from "make-dir"; +import test from "ava"; +import rimraf from "rimraf"; +const rimrafp = promisify(rimraf); +import chai from "chai"; +import chaifs from "chai-fs"; +chai.use(chaifs); const assert = chai.assert; -const ui5Fs = require("../../../"); +import {createAdapter} from "../../../lib/resourceFactory.js"; -test.beforeEach((t) => { +test.beforeEach(async (t) => { const tmpDirName = t.title.replace(/[^a-zA-Z0-9]/g, "_").toLowerCase(); // Generate tmp dir name from test name // Create a tmp directory for every test - t.context.tmpDirPath = path.join(__dirname, "..", "..", "tmp", "adapters", "FileSystemWrite", tmpDirName); + t.context.tmpDirPath = fileURLToPath(new URL("../../tmp/adapters/FileSystemWrite/" + tmpDirName, import.meta.url)); + await makeDir(t.context.tmpDirPath); t.context.readerWriters = { - source: ui5Fs.resourceFactory.createAdapter({ + source: createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }), - dest: ui5Fs.resourceFactory.createAdapter({ + dest: createAdapter({ fsBasePath: "./test/tmp/adapters/FileSystemWrite/" + tmpDirName, virBasePath: "/app/" }) @@ -30,10 +35,9 @@ test.beforeEach((t) => { test.afterEach.always((t) => { // Cleanup tmp directory - return rimraf(t.context.tmpDirPath); + return rimrafp(t.context.tmpDirPath); }); - test("Write resource", async (t) => { const readerWriters = t.context.readerWriters; const destFsPath = path.join(t.context.tmpDirPath, "index.html"); diff --git a/test/lib/adapters/Memory_read.js b/test/lib/adapters/Memory_read.js index 8d930547..09b99159 100644 --- a/test/lib/adapters/Memory_read.js +++ b/test/lib/adapters/Memory_read.js @@ -1,8 +1,8 @@ -const test = require("ava"); -const {resourceFactory} = require("../../../"); +import test from "ava"; +import {createAdapter, createResource} from "../../../lib/resourceFactory.js"; async function fillFromFs(readerWriter, {fsBasePath = "./test/fixtures/glob", virBasePath = "/app/"} = {}) { - const fsReader = resourceFactory.createAdapter({ + const fsReader = createAdapter({ fsBasePath, virBasePath, }); @@ -30,11 +30,11 @@ function matchGlobResult(t, resources, expectedResources) { } test("glob resources from application.a w/ virtual base path prefix", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); - const resource = resourceFactory.createResource({ + const resource = createResource({ path: "/app/index.html", string: "test" }); @@ -45,11 +45,11 @@ test("glob resources from application.a w/ virtual base path prefix", async (t) }); test("glob resources from application.a w/o virtual base path prefix", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); - const resource = resourceFactory.createResource({ + const resource = createResource({ path: "/app/index.html", string: "test" }); @@ -61,7 +61,7 @@ test("glob resources from application.a w/o virtual base path prefix", async (t) test("glob virtual directory w/o virtual base path prefix", async (t) => { // TODO: Add similar test (globbing on empty directory) for FS RL - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/one/two/" }); @@ -71,7 +71,7 @@ test("glob virtual directory w/o virtual base path prefix", async (t) => { test("glob virtual directory w/o virtual base path prefix and multiple patterns", async (t) => { // TODO: Add similar test (globbing on empty directory) for FS RL - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/one/two/" }); @@ -84,7 +84,7 @@ test("glob virtual directory w/o virtual base path prefix and multiple patterns" test("glob virtual directory w/ virtual base path prefix", async (t) => { // TODO: Add similar test (globbing on empty directory) for FS RL - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/one/two/" }); @@ -93,7 +93,7 @@ test("glob virtual directory w/ virtual base path prefix", async (t) => { }); test("glob virtual directory w/o virtual base path prefix and nodir: true", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/one/two/" }); @@ -102,7 +102,7 @@ test("glob virtual directory w/o virtual base path prefix and nodir: true", asyn }); test("glob virtual directory w/ virtual base path prefix and nodir: true", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/one/two/" }); @@ -111,7 +111,7 @@ test("glob virtual directory w/ virtual base path prefix and nodir: true", async }); test("glob virtual directory w/ virtual base path prefix and nodir: true and multiple patterns", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/one/two/" }); @@ -124,7 +124,7 @@ test("glob virtual directory w/ virtual base path prefix and nodir: true and mul /* Load more data from FS into memory */ test("glob all", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -134,7 +134,7 @@ test("glob all", async (t) => { test("glob all from root", async (t) => { t.plan(2); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -143,7 +143,7 @@ test("glob all from root", async (t) => { }); test("glob all with virtual path included", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -154,7 +154,7 @@ test("glob all with virtual path included", async (t) => { test("glob a specific filetype (yaml)", async (t) => { t.plan(2); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -167,7 +167,7 @@ test("glob a specific filetype (yaml)", async (t) => { test("glob two specific filetype (yaml and js)", async (t) => { t.plan(4); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -183,7 +183,7 @@ test("glob two specific filetype (yaml and js)", async (t) => { test("glob a specific filetype (json) with exclude pattern", async (t) => { t.plan(3); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -201,7 +201,7 @@ test("glob a specific filetype (json) with exclude pattern", async (t) => { test("glob a specific filetype (json) with multiple exclude pattern", async (t) => { t.plan(2); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -216,7 +216,7 @@ test("glob a specific filetype (json) with multiple exclude pattern", async (t) test("glob (normalized) root directory (=> fs root)", async (t) => { t.plan(2); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -232,7 +232,7 @@ test("glob (normalized) root directory (=> fs root)", async (t) => { test("glob root directory", async (t) => { t.plan(2); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -243,7 +243,7 @@ test("glob root directory", async (t) => { test("glob subdirectory", async (t) => { t.plan(3); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); await fillFromFs(readerWriter); @@ -257,7 +257,6 @@ test("glob subdirectory", async (t) => { t.is(resources[0].getStatInfo().isDirectory(), true); }); - function getPathFromResource(resource) { return resource.getPath(); } @@ -271,7 +270,7 @@ test("static excludes: glob library src and test", async (t) => { "/test-resources/**", ]; - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes }); @@ -280,7 +279,7 @@ test("static excludes: glob library src and test", async (t) => { virBasePath: "/resources/", }); - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ virBasePath: "/test-resources/", excludes }); @@ -308,7 +307,7 @@ test("static excludes: glob library src and test with double negation", async (t // double negation has effect over preceding "/test-resources/**" exclude "!/test-resources/library/l/Test2.html", ]; - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes }); @@ -317,7 +316,7 @@ test("static excludes: glob library src and test with double negation", async (t virBasePath: "/resources/", }); - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ virBasePath: "/test-resources/", excludes }); @@ -348,7 +347,7 @@ test("static excludes: glob library test with double negation", async (t) => { "!/test-resources/library/l/Test2.html", ]; - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ virBasePath: "/test-resources/", excludes }); @@ -366,7 +365,7 @@ test("static excludes: glob library test with double negation", async (t) => { }); test("static excludes: glob with virtual root exclude", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes: [ "/**" @@ -383,7 +382,7 @@ test("static excludes: glob with virtual root exclude", async (t) => { }); test("static excludes: glob with negated directory exclude, excluding resources", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes: [ "/!({pony,unicorn})/**" @@ -400,7 +399,7 @@ test("static excludes: glob with negated directory exclude, excluding resources" }); test("static excludes: glob with negated directory exclude, not excluding resources", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes: [ "/!(resources)/**" @@ -417,7 +416,7 @@ test("static excludes: glob with negated directory exclude, not excluding resour }); test("static excludes: byPath exclude everything in sub-directory", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/resources/app/", excludes: ["/resources/app/**"] }); @@ -431,7 +430,7 @@ test("static excludes: byPath exclude everything in sub-directory", async (t) => }); test("static excludes: byPath exclude with negation", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/resources/app/", excludes: [ "/resources/app/**", @@ -448,7 +447,7 @@ test("static excludes: byPath exclude with negation", async (t) => { }); test("static excludes: byPath exclude with unused negation", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/resources/app/", excludes: [ "!/resources/app/index.html", @@ -465,7 +464,7 @@ test("static excludes: byPath exclude with unused negation", async (t) => { }); test("static excludes: byPath exclude with negated directory pattern, excluding resources", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/resources/app/", excludes: [ "/!({pony,unicorn})/**" @@ -481,7 +480,7 @@ test("static excludes: byPath exclude with negated directory pattern, excluding }); test("static excludes: byPath exclude with negated directory pattern, not excluding resources", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/resources/app/", excludes: [ "/!(resources)/**" @@ -497,7 +496,7 @@ test("static excludes: byPath exclude with negated directory pattern, not exclud }); test("byPath: exclude with unused negation", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/resources/app/", excludes: [ "!/resources/app/i18n/**", @@ -528,7 +527,7 @@ test("static excludes: glob library src and test with double negation (nodir: fa // double negation has effect over preceding "/test-resources/**" exclude "!/test-resources/library/l/Test2.html", ]; - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes }); @@ -537,7 +536,7 @@ test("static excludes: glob library src and test with double negation (nodir: fa virBasePath: "/resources/", }); - const testReader = resourceFactory.createAdapter({ + const testReader = createAdapter({ virBasePath: "/test-resources/", excludes }); @@ -558,7 +557,7 @@ test("static excludes: glob library src and test with double negation (nodir: fa }); test("static excludes: glob with virtual root exclude (nodir: false)", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes: [ "/**" @@ -574,7 +573,7 @@ test("static excludes: glob with virtual root exclude (nodir: false)", async (t) t.is(resources.length, 0, "Found no resources"); }); test("static excludes: glob with negated directory exclude, excluding resources (nodir: false)", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes: [ "/!({pony,unicorn})/**" @@ -591,7 +590,7 @@ test("static excludes: glob with negated directory exclude, excluding resources }); test("static excludes: glob with negated directory exclude, not excluding resources (nodir: false)", async (t) => { - const srcReader = resourceFactory.createAdapter({ + const srcReader = createAdapter({ virBasePath: "/resources/", excludes: [ "/!(resources)/**" diff --git a/test/lib/adapters/Memory_write.js b/test/lib/adapters/Memory_write.js index ffbc54ff..f97e8c38 100644 --- a/test/lib/adapters/Memory_write.js +++ b/test/lib/adapters/Memory_write.js @@ -1,12 +1,12 @@ -const test = require("ava"); -const {resourceFactory} = require("../../../"); +import test from "ava"; +import {createAdapter, createResource} from "../../../lib/resourceFactory.js"; test("glob resources from application.a w/ virtual base path prefix", async (t) => { - const dest = resourceFactory.createAdapter({ + const dest = createAdapter({ virBasePath: "/app/" }); - const res = resourceFactory.createResource({ + const res = createResource({ path: "/app/index.html" }); await dest.write(res) @@ -17,11 +17,11 @@ test("glob resources from application.a w/ virtual base path prefix", async (t) }); test("glob resources from application.a w/o virtual base path prefix", async (t) => { - const dest = resourceFactory.createAdapter({ + const dest = createAdapter({ virBasePath: "/app/" }); - const res = resourceFactory.createResource({ + const res = createResource({ path: "/app/index.html" }); await dest.write(res) @@ -32,11 +32,11 @@ test("glob resources from application.a w/o virtual base path prefix", async (t) }); test("Write resource w/ virtual base path", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/" }); - const res = resourceFactory.createResource({ + const res = createResource({ path: "/app/test.html" }); await readerWriter.write(res); @@ -49,11 +49,11 @@ test("Write resource w/ virtual base path", async (t) => { }); test("Write resource w/o virtual base path", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/" }); - const res = resourceFactory.createResource({ + const res = createResource({ path: "/one/two/three/test.html" }); await readerWriter.write(res); @@ -74,11 +74,11 @@ test("Write resource w/o virtual base path", async (t) => { }); test("Write resource w/ deep virtual base path", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/a/" }); - const res = resourceFactory.createResource({ + const res = createResource({ path: "/app/a/one/two/three/test.html" }); await readerWriter.write(res); @@ -99,11 +99,11 @@ test("Write resource w/ deep virtual base path", async (t) => { }); test("Write resource w/ crazy virtual base path", async (t) => { - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/app/🐛/" }); - const res = resourceFactory.createResource({ + const res = createResource({ path: "/app/🐛/one\\/2/3️⃣/test" }); await readerWriter.write(res); diff --git a/test/lib/fsInterface.js b/test/lib/fsInterface.js index 11c697c7..4d00222b 100644 --- a/test/lib/fsInterface.js +++ b/test/lib/fsInterface.js @@ -1,13 +1,15 @@ -const test = require("ava"); -const {promisify} = require("util"); -const Buffer = require("buffer").Buffer; -const path = require("path"); -const fs = require("fs"); -const ui5Fs = require("../../"); -const fsInterface = ui5Fs.fsInterface; -const MemAdapter = ui5Fs.adapters.Memory; -const FsAdapter = ui5Fs.adapters.FileSystem; -const Resource = ui5Fs.Resource; +import test from "ava"; +import {promisify} from "node:util"; +import {Buffer} from "node:buffer"; +import path from "node:path"; +import {fileURLToPath} from "node:url"; +import fsSync from "node:fs"; +const stat = promisify(fsSync.stat); +import {readFile} from "node:fs/promises"; +import fsInterface from "../../lib/fsInterface.js"; +import MemAdapter from "../../lib/adapters/Memory.js"; +import FsAdapter from "../../lib/adapters/FileSystem.js"; +import Resource from "../../lib/Resource.js"; const assertReadFile = async (t, readFile, basepath, filepath, content) => { content = content || "content of " + filepath; @@ -31,6 +33,10 @@ const assertReadFile = async (t, readFile, basepath, filepath, content) => { t.deepEqual(content, content); }; +function getPath() { + return fileURLToPath(new URL("../fixtures/fsInterfáce", import.meta.url)); +} + test("MemAdapter: readFile", async (t) => { const memAdapter = new MemAdapter({ virBasePath: "/" @@ -50,7 +56,7 @@ test("MemAdapter: readFile", async (t) => { test("FsAdapter: readFile with non-ASCII characters in path", async (t) => { const fsAdapter = new FsAdapter({ virBasePath: "/", - fsBasePath: path.join(__dirname, "..", "fixtures", "fsInterfáce") + fsBasePath: getPath() }); const fs = fsInterface(fsAdapter); const readFile = promisify(fs.readFile); @@ -59,12 +65,10 @@ test("FsAdapter: readFile with non-ASCII characters in path", async (t) => { }); test("fs: readFile", async (t) => { - const readFile = promisify(fs.readFile); await assertReadFile(t, readFile, - path.join(__dirname, "..", "fixtures", "fsInterfáce"), path.join("/", "foo.txt"), "content"); + getPath(), path.join("/", "foo.txt"), "content"); }); - const assertStat = async (t, stat, basepath, filepath) => { const fullpath = path.join(basepath, filepath); const stats = await stat(fullpath); @@ -96,7 +100,7 @@ test("MemAdapter: stat", async (t) => { test("FsAdapter: stat", async (t) => { const fsAdapter = new FsAdapter({ virBasePath: "/", - fsBasePath: path.join(__dirname, "..", "fixtures", "fsInterfáce") + fsBasePath: getPath() }); const fs = fsInterface(fsAdapter); const stat = promisify(fs.stat); @@ -105,8 +109,7 @@ test("FsAdapter: stat", async (t) => { }); test("fs: stat", async (t) => { - const stat = promisify(fs.stat); - await assertStat(t, stat, path.join(__dirname, "..", "fixtures", "fsInterfáce"), path.join("/", "foo.txt")); + await assertStat(t, stat, getPath(), path.join("/", "foo.txt")); }); test("MemAdapter: mkdir", async (t) => { diff --git a/test/lib/glob.js b/test/lib/glob.js index 99169519..0bd19ecb 100644 --- a/test/lib/glob.js +++ b/test/lib/glob.js @@ -1,6 +1,5 @@ -const test = require("ava"); -const ui5Fs = require("../../"); -const FsAdapter = ui5Fs.adapters.FileSystem; +import test from "ava"; +import FsAdapter from "../../lib/adapters/FileSystem.js"; // Create readerWriter before running tests test.beforeEach((t) => { diff --git a/test/lib/index.js b/test/lib/index.js deleted file mode 100644 index 5a058674..00000000 --- a/test/lib/index.js +++ /dev/null @@ -1,18 +0,0 @@ -const test = require("ava"); -const index = require("../../index"); - -test("index.js exports all expected modules", (t) => { - t.truthy(index.adapters.AbstractAdapter, "Module exported"); - t.truthy(index.adapters.FileSystem, "Module exported"); - t.truthy(index.adapters.Memory, "Module exported"); - - t.truthy(index.AbstractReader, "Module exported"); - t.truthy(index.AbstractReaderWriter, "Module exported"); - t.truthy(index.DuplexCollection, "Module exported"); - t.truthy(index.fsInterface, "Module exported"); - t.truthy(index.ReaderCollection, "Module exported"); - t.truthy(index.ReaderCollectionPrioritized, "Module exported"); - t.truthy(index.Resource, "Module exported"); - t.truthy(index.ResourceTagCollection, "Module exported"); - t.truthy(index.resourceFactory, "Module exported"); -}); diff --git a/test/lib/package-exports.js b/test/lib/package-exports.js new file mode 100644 index 00000000..e5194bb9 --- /dev/null +++ b/test/lib/package-exports.js @@ -0,0 +1,75 @@ +import test from "ava"; +import {createRequire} from "node:module"; + +// Using CommonsJS require as importing json files causes an ExperimentalWarning +const require = createRequire(import.meta.url); + +// package.json should be exported to allow reading version (e.g. from @ui5/cli) +test("export of package.json", (t) => { + t.truthy(require("@ui5/fs/package.json").version); +}); + +// Check number of definied exports +test("check number of exports", (t) => { + const packageJson = require("@ui5/fs/package.json"); + t.is(Object.keys(packageJson.exports).length, 11); +}); + +// Public API contract (exported modules) +[ + { + exportedSpecifier: "@ui5/fs/adapters/AbstractAdapter", + mappedModule: "../../lib/adapters/AbstractAdapter.js" + }, + { + exportedSpecifier: "@ui5/fs/adapters/FileSystem", + mappedModule: "../../lib/adapters/FileSystem.js" + }, + { + exportedSpecifier: "@ui5/fs/adapters/Memory", + mappedModule: "../../lib/adapters/Memory.js" + }, + { + exportedSpecifier: "@ui5/fs/AbstractReader", + mappedModule: "../../lib/AbstractReader.js" + }, + { + exportedSpecifier: "@ui5/fs/AbstractReaderWriter", + mappedModule: "../../lib/AbstractReaderWriter.js" + }, + { + exportedSpecifier: "@ui5/fs/DuplexCollection", + mappedModule: "../../lib/DuplexCollection.js" + }, + { + exportedSpecifier: "@ui5/fs/fsInterface", + mappedModule: "../../lib/fsInterface.js" + }, + { + exportedSpecifier: "@ui5/fs/ReaderCollection", + mappedModule: "../../lib/ReaderCollection.js" + }, + { + exportedSpecifier: "@ui5/fs/ReaderCollectionPrioritized", + mappedModule: "../../lib/ReaderCollectionPrioritized.js" + }, + { + exportedSpecifier: "@ui5/fs/Resource", + mappedModule: "../../lib/Resource.js" + }, + { + exportedSpecifier: "@ui5/fs/resourceFactory", + mappedModule: "../../lib/resourceFactory.js" + }, + // Internal modules (only to be used by @ui5/* packages) + { + exportedSpecifier: "@ui5/fs/internal/ResourceTagCollection", + mappedModule: "../../lib/ResourceTagCollection.js" + }, +].forEach(({exportedSpecifier, mappedModule}) => { + test(`${exportedSpecifier}`, async (t) => { + const actual = await import(exportedSpecifier); + const expected = await import(mappedModule); + t.is(actual, expected, "Correct module exported"); + }); +}); diff --git a/test/lib/readers/Filter.js b/test/lib/readers/Filter.js index 8913941d..c48264b4 100644 --- a/test/lib/readers/Filter.js +++ b/test/lib/readers/Filter.js @@ -1,6 +1,6 @@ -const test = require("ava"); -const sinon = require("sinon"); -const Filter = require("../../../lib/readers/Filter"); +import test from "ava"; +import sinon from "sinon"; +import Filter from "../../../lib/readers/Filter.js"; test("_byGlob: Basic filter", async (t) => { const abstractReader = { diff --git a/test/lib/readers/Link.js b/test/lib/readers/Link.js index a576fef6..c37b5a4f 100644 --- a/test/lib/readers/Link.js +++ b/test/lib/readers/Link.js @@ -1,7 +1,7 @@ -const test = require("ava"); -const sinon = require("sinon"); -const Link = require("../../../lib/readers/Link"); -const ResourceFacade = require("../../../lib/ResourceFacade"); +import test from "ava"; +import sinon from "sinon"; +import Link from "../../../lib/readers/Link.js"; +import ResourceFacade from "../../../lib/ResourceFacade.js"; test("_byGlob: Basic Link", async (t) => { const dummyResourceA = { diff --git a/test/lib/readers/Transformer.js b/test/lib/readers/Transformer.js index 9eaeb811..099dc71d 100644 --- a/test/lib/readers/Transformer.js +++ b/test/lib/readers/Transformer.js @@ -1,6 +1,6 @@ -const test = require("ava"); -const sinon = require("sinon"); -const Transformer = require("../../../lib/readers/Transformer"); +import test from "ava"; +import sinon from "sinon"; +import Transformer from "../../../lib/readers/Transformer.js"; function getDummyResource(name) { return { diff --git a/test/lib/resourceFactory.js b/test/lib/resourceFactory.js index 1d96df72..7fee5343 100644 --- a/test/lib/resourceFactory.js +++ b/test/lib/resourceFactory.js @@ -1,15 +1,18 @@ -const test = require("ava"); -const resourceFactory = require("../../lib/resourceFactory"); -const FileSystem = require("../../lib/adapters/FileSystem"); -const Memory = require("../../lib/adapters/Memory"); -const ReaderCollection = require("../../lib/ReaderCollection"); +import test from "ava"; +import { + createAdapter, createReader, createReaderCollection, createReaderCollectionPrioritized, + createResource, createWriterCollection, createWorkspace, prefixGlobPattern} from "../../lib/resourceFactory.js"; +import FileSystem from "../../lib/adapters/FileSystem.js"; +import Memory from "../../lib/adapters/Memory.js"; +import ReaderCollection from "../../lib/ReaderCollection.js"; +import logger from "@ui5/logger"; // Set log level to silly to activate tracing -require("@ui5/logger").setLevel("silly"); +logger.setLevel("silly"); test("prefixGlobPattern", (t) => { t.deepEqual( - resourceFactory.prefixGlobPattern("{/sub-directory-1/,/sub-directory-2/}**", "/pony/path/a"), + prefixGlobPattern("{/sub-directory-1/,/sub-directory-2/}**", "/pony/path/a"), [ "/pony/path/a/sub-directory-1/**", "/pony/path/a/sub-directory-2/**" @@ -17,33 +20,33 @@ test("prefixGlobPattern", (t) => { "GLOBs correctly prefixed"); t.deepEqual( - resourceFactory.prefixGlobPattern("/pony-path/**", "/pony/path/a"), + prefixGlobPattern("/pony-path/**", "/pony/path/a"), ["/pony/path/a/pony-path/**"], "GLOBs correctly prefixed"); t.deepEqual( - resourceFactory.prefixGlobPattern("!/duck*path/**", "/pony/path/a"), + prefixGlobPattern("!/duck*path/**", "/pony/path/a"), ["!/pony/path/a/duck*path/**"], "GLOBs correctly prefixed"); t.deepEqual( - resourceFactory.prefixGlobPattern("!**.json", "/pony/path/a"), + prefixGlobPattern("!**.json", "/pony/path/a"), ["!/pony/path/a/**.json"], "GLOBs correctly prefixed"); t.deepEqual( - resourceFactory.prefixGlobPattern("!**.json", "/pony/path/a/"), // trailing slash + prefixGlobPattern("!**.json", "/pony/path/a/"), // trailing slash ["!/pony/path/a/**.json"], "GLOBs correctly prefixed"); t.deepEqual( - resourceFactory.prefixGlobPattern("pony-path/**", "/pony/path/a/"), // trailing slash + prefixGlobPattern("pony-path/**", "/pony/path/a/"), // trailing slash ["/pony/path/a/pony-path/**"], "GLOBs correctly prefixed"); }); test("createAdapter: FS Adapter", async (t) => { - const adapter = resourceFactory.createAdapter({ + const adapter = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", project: { @@ -60,7 +63,7 @@ test("createAdapter: FS Adapter", async (t) => { }); test("createAdapter: Memory", async (t) => { - const adapter = resourceFactory.createAdapter({ + const adapter = createAdapter({ virBasePath: "/resources/app/", project: { getName: () => "my.project" @@ -70,12 +73,12 @@ test("createAdapter: Memory", async (t) => { t.true(adapter instanceof Memory, "Returned a Memory adapter"); - const resource1 = resourceFactory.createResource({ + const resource1 = createResource({ path: "/resources/app/File.js" }); await adapter.write(resource1); - const resource2 = resourceFactory.createResource({ + const resource2 = createResource({ path: "/resources/app/index.html" }); await adapter.write(resource2); @@ -86,7 +89,7 @@ test("createAdapter: Memory", async (t) => { }); test("createReader", async (t) => { - const reader = resourceFactory.createReader({ + const reader = createReader({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", project: { @@ -104,24 +107,36 @@ test("createReader", async (t) => { t.is(resources[0].getPath(), "/resources/app/test.js", "Found correct resource"); }); +test("createReader: Throw error missing 'fsBasePath'", (t) => { + const error = t.throws(() => createReader({ + virBasePath: "/resources/app/", + project: { + getName: () => "my.project" + }, + excludes: ["**/*.html"], + name: "reader name" + })); + t.is(error.message, "Missing parameter \"fsBasePath\""); +}); + test("createReaderCollection", async (t) => { - const adapter = resourceFactory.createAdapter({ + const adapter = createAdapter({ virBasePath: "/resources/app/", project: { getName: () => "my.project" }, excludes: ["**/*.html"] }); - const resource1 = resourceFactory.createResource({ + const resource1 = createResource({ path: "/resources/app/File.js" }); - const resource2 = resourceFactory.createResource({ + const resource2 = createResource({ path: "/resources/app/index.html" }); await adapter.write(resource1); await adapter.write(resource2); - const reader = resourceFactory.createReaderCollection({ + const reader = createReaderCollection({ name: "reader name", readers: [adapter] }); @@ -134,24 +149,24 @@ test("createReaderCollection", async (t) => { }); test("createReaderCollectionPrioritized", async (t) => { - const ReaderCollectionPrioritized = require("../../lib/ReaderCollectionPrioritized"); - const adapter = resourceFactory.createAdapter({ + const {default: ReaderCollectionPrioritized} = await import("../../lib/ReaderCollectionPrioritized.js"); + const adapter = createAdapter({ virBasePath: "/resources/app/", project: { getName: () => "my.project" }, excludes: ["**/*.html"] }); - const resource1 = resourceFactory.createResource({ + const resource1 = createResource({ path: "/resources/app/File.js" }); - const resource2 = resourceFactory.createResource({ + const resource2 = createResource({ path: "/resources/app/index.html" }); await adapter.write(resource1); await adapter.write(resource2); - const reader = resourceFactory.createReaderCollectionPrioritized({ + const reader = createReaderCollectionPrioritized({ name: "reader name", readers: [adapter] }); @@ -164,27 +179,27 @@ test("createReaderCollectionPrioritized", async (t) => { }); test("createWriterCollection", async (t) => { - const WriterCollection = require("../../lib/WriterCollection"); - const adapter1 = resourceFactory.createAdapter({ + const {default: WriterCollection} = await import("../../lib/WriterCollection.js"); + const adapter1 = createAdapter({ virBasePath: "/", project: { getName: () => "my.project" } }); - const adapter2 = resourceFactory.createAdapter({ + const adapter2 = createAdapter({ virBasePath: "/", project: { getName: () => "my.other.project" } }); - const resource1 = resourceFactory.createResource({ + const resource1 = createResource({ path: "/resources/app/File.js" }); - const resource2 = resourceFactory.createResource({ + const resource2 = createResource({ path: "/resources/app2/index.html" }); - const writerCollection = resourceFactory.createWriterCollection({ + const writerCollection = createWriterCollection({ name: "writer collection name", writerMapping: { "/resources/app/": adapter1, @@ -203,31 +218,30 @@ test("createWriterCollection", async (t) => { t.is(resources2[0].getPath(), "/resources/app2/index.html", "Found correct resource"); }); - test("createWorkspace", async (t) => { - const DuplexCollection = require("../../lib/DuplexCollection"); - const reader = resourceFactory.createAdapter({ + const {default: DuplexCollection} = await import("../../lib/DuplexCollection.js"); + const reader = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/", project: { getName: () => "my.project" } }); - const readerWriter = resourceFactory.createAdapter({ + const readerWriter = createAdapter({ virBasePath: "/", project: { getName: () => "my.other.project" } }); - const writerCollection = resourceFactory.createWorkspace({ + const writerCollection = createWorkspace({ name: "writer collection name", reader, writer: readerWriter }); t.true(writerCollection instanceof DuplexCollection, "Returned a ReaderCollection"); - const resource1 = resourceFactory.createResource({ + const resource1 = createResource({ path: "/resources/app/File.js" }); @@ -236,3 +250,22 @@ test("createWorkspace", async (t) => { const resources = await writerCollection.byGlob("**/*"); t.is(resources.length, 3, "Found three resources"); }); + +test("createWorkspace: Without writer", async (t) => { + const {default: DuplexCollection} = await import("../../lib/DuplexCollection.js"); + const {default: Memory} = await import("../../lib/adapters/Memory.js"); + const reader = createAdapter({ + fsBasePath: "./test/fixtures/application.a/webapp", + virBasePath: "/resources/app/", + project: { + getName: () => "my.project" + } + }); + const writerCollection = createWorkspace({ + name: "writer collection name", + reader + }); + t.true(writerCollection instanceof DuplexCollection, "Returned a ReaderCollection"); + t.true(writerCollection._writer instanceof Memory, "Internal Writer is created and a MemAdapter"); +}); + diff --git a/test/lib/resources.js b/test/lib/resources.js index 4128bd63..06f0779b 100644 --- a/test/lib/resources.js +++ b/test/lib/resources.js @@ -1,10 +1,10 @@ -const test = require("ava"); -const chai = require("chai"); -chai.use(require("chai-fs")); +import test from "ava"; +import chai from "chai"; +import chaifs from "chai-fs"; +chai.use(chaifs); const assert = chai.assert; -const sinon = require("sinon"); - -const ui5Fs = require("../../"); +import sinon from "sinon"; +import {createAdapter} from "../../lib/resourceFactory.js"; test.afterEach.always((t) => { sinon.restore(); @@ -14,11 +14,11 @@ test.afterEach.always((t) => { Always make sure that every test writes to a separate file! By default, tests are running concurrent. */ test("Get resource from application.a (/index.html) and write it to /dest/ using a ReadableStream", async (t) => { - const source = ui5Fs.resourceFactory.createAdapter({ + const source = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); - const dest = ui5Fs.resourceFactory.createAdapter({ + const dest = createAdapter({ fsBasePath: "./test/tmp/readerWriters/application.a/simple-read-write", virBasePath: "/dest/" }); @@ -38,11 +38,11 @@ test("Get resource from application.a (/index.html) and write it to /dest/ using }); test("Filter resources", async (t) => { - const source = ui5Fs.resourceFactory.createAdapter({ + const source = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); - const filteredSource = source.filter((resource) => { + const filteredSource = await source.filter((resource) => { return resource.getPath().endsWith(".js"); }); const sourceResources = await source.byGlob("**"); @@ -55,11 +55,11 @@ test("Filter resources", async (t) => { }); test("Transform resources", async (t) => { - const source = ui5Fs.resourceFactory.createAdapter({ + const source = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/app/" }); - const transformedSource = source.transform(async (resourcePath, getResource) => { + const transformedSource = await source.transform(async (resourcePath, getResource) => { if (resourcePath === "/app/test.js") { const resource = await getResource(); resource.setPath("/app/transformed-test.js"); @@ -79,11 +79,11 @@ test("Transform resources", async (t) => { }); test("Flatten resources", async (t) => { - const source = ui5Fs.resourceFactory.createAdapter({ + const source = createAdapter({ fsBasePath: "./test/fixtures/application.a/webapp", virBasePath: "/resources/app/" }); - const transformedSource = source.flatten("app"); + const transformedSource = await source.flatten("app"); const resources = await transformedSource.byGlob("**/*.js"); t.is(resources.length, 1, "Found one resource via transformer"); diff --git a/test/lib/tracing/traceSummary.js b/test/lib/tracing/traceSummary.js index 63a785c2..94bbd746 100644 --- a/test/lib/tracing/traceSummary.js +++ b/test/lib/tracing/traceSummary.js @@ -1,7 +1,21 @@ -const test = require("ava"); -const sinon = require("sinon"); -const logger = require("@ui5/logger"); -const mock = require("mock-require"); +import test from "ava"; +import sinon from "sinon"; +import esmock from "esmock"; + +async function createMock(t, isLevelEnabled=true) { + t.context.loggerStub = { + silly: sinon.stub(), + isLevelEnabled: () => { + return isLevelEnabled; + } + }; + t.context.traceSummary = await esmock("../../../lib/tracing/traceSummary.js", { + "@ui5/logger": { + getLogger: sinon.stub().returns(t.context.loggerStub) + } + }); + return t.context; +} test.afterEach.always((t) => { sinon.restore(); @@ -10,17 +24,10 @@ test.afterEach.always((t) => { test.serial("traceSummary", async (t) => { t.plan(2); - const myLoggerInstance = { - silly: sinon.stub(), - isLevelEnabled: () => { - return true; - } - }; - sinon.stub(logger, "getLogger").returns(myLoggerInstance); + const {traceSummary, loggerStub} = await createMock(t); // Measure always constant time sinon.stub(process, "hrtime").returns([3, 426604599]); - const traceSummary = mock.reRequire("../../../lib/tracing/traceSummary"); const expectedReport = "==========================\n[=> TRACE SUMMARY:\n" + " 3.43 s elapsed time \n" + @@ -51,22 +58,14 @@ test.serial("traceSummary", async (t) => { // Print reporting and reset tracing await traceSummary.traceEnded(); - t.is(myLoggerInstance.silly.callCount, 1, "Logger has been called exactly once"); - t.deepEqual(myLoggerInstance.silly.getCall(0).args[0], expectedReport, "Correct report logged to the console"); + t.is(loggerStub.silly.callCount, 1, "Logger has been called exactly once"); + t.deepEqual(loggerStub.silly.getCall(0).args[0], expectedReport, "Correct report logged to the console"); }); test.serial("traceSummary no silly logging", async (t) => { t.plan(1); - const myLoggerInstance = { - silly: sinon.stub(), - isLevelEnabled: () => { - return false; - } - }; - sinon.stub(logger, "getLogger").returns(myLoggerInstance); - - const traceSummary = mock.reRequire("../../../lib/tracing/traceSummary"); + const {traceSummary, loggerStub} = await createMock(t, false); // Add collection, byPath call and byGlob call w/o having a an active tracing started yet. // Those calls will not be traced. @@ -88,5 +87,5 @@ test.serial("traceSummary no silly logging", async (t) => { // Print reporting and reset tracing await traceSummary.traceEnded(); - t.is(myLoggerInstance.silly.callCount, 0, "Logger has not been called (due to disabled silly logging)"); + t.is(loggerStub.silly.callCount, 0, "Logger has not been called (due to disabled silly logging)"); });