From 05e3013605e28e9ab5a785aa57616473d40e5710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20O=C3=9Fwald?= <1410947+matz3@users.noreply.github.com> Date: Mon, 24 Oct 2022 10:44:07 -0400 Subject: [PATCH] [BREAKING] Transform to native ESM (#501) BREAKING CHANGE: This package has been transformed to native ESM. Therefore it no longer provides a CommonJS export. If your project uses CommonJS, it needs to be converted to ESM or use a dynamic import. For more information see also: - https://sap.github.io/ui5-tooling/updates/migrate-v3/ - https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c Co-authored-by: Florian Vogt Co-authored-by: Yavor Ivanov --- .eslintrc.js => .eslintrc.cjs | 6 +- index.js | 35 - jsdoc-plugin.cjs | 9 + jsdoc-plugin.js | 13 - jsdoc.json | 4 +- lib/middleware/MiddlewareManager.js | 59 +- lib/middleware/MiddlewareUtil.js | 15 +- lib/middleware/connectUi5Proxy.js | 4 +- lib/middleware/csp.js | 13 +- lib/middleware/discovery.js | 2 +- lib/middleware/middlewareRepository.js | 47 +- lib/middleware/nonReadRequests.js | 2 +- lib/middleware/serveIndex.js | 9 +- .../{serveIndex.js => serveIndex.cjs} | 0 lib/middleware/serveResources.js | 17 +- lib/middleware/serveThemes.js | 16 +- lib/middleware/testRunner.js | 18 +- lib/middleware/versionInfo.js | 10 +- lib/server.js | 182 +- lib/sslUtil.js | 102 +- package-lock.json | 3233 ++++++----------- package.json | 43 +- test/lib/index.js | 8 - test/lib/package-exports.js | 52 + test/lib/server/acceptRemoteConnections.js | 17 +- test/lib/server/h2.js | 22 +- test/lib/server/main.js | 33 +- .../server/middleware/MiddlewareManager.js | 14 +- test/lib/server/middleware/MiddlewareUtil.js | 20 +- test/lib/server/middleware/csp.js | 7 +- .../server/middleware/middlewareRepository.js | 16 +- test/lib/server/middleware/nonReadRequests.js | 4 +- test/lib/server/middleware/serveIndex.js | 10 +- test/lib/server/middleware/serveResources.js | 96 +- test/lib/server/middleware/serveThemes.js | 364 +- test/lib/server/middleware/testRunner.js | 18 +- test/lib/server/middleware/versionInfo.js | 38 +- test/lib/server/ports.js | 197 +- test/lib/server/sslUtil.js | 89 +- 39 files changed, 2037 insertions(+), 2807 deletions(-) rename .eslintrc.js => .eslintrc.cjs (95%) delete mode 100644 index.js create mode 100644 jsdoc-plugin.cjs delete mode 100644 jsdoc-plugin.js rename lib/middleware/serveIndex/{serveIndex.js => serveIndex.cjs} (100%) delete mode 100644 test/lib/index.js create mode 100644 test/lib/package-exports.js 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 9dec3d7d..00000000 --- a/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @module @ui5/server - * @public - */ -module.exports = { - /** - * @type {import('./lib/server')} - */ - server: "./lib/server", - /** - * @type {import('./lib/sslUtil')} - */ - sslUtil: "./lib/sslUtil", - /** - * @type {import('./lib/middleware/middlewareRepository')} - */ - middlewareRepository: "./lib/middleware/middlewareRepository" -}; - -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 fb444739..55ea9518 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/middleware/MiddlewareManager.js b/lib/middleware/MiddlewareManager.js index b1521e2f..e1d4221d 100644 --- a/lib/middleware/MiddlewareManager.js +++ b/lib/middleware/MiddlewareManager.js @@ -1,20 +1,23 @@ -const middlewareRepository = require("./middlewareRepository"); -const MiddlewareUtil = require("./MiddlewareUtil"); +import middlewareRepository from "./middlewareRepository.js"; +import MiddlewareUtil from "./MiddlewareUtil.js"; const hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty); /** - * - * @typedef {object} middlewareResources - * @property {module:@ui5/fs.AbstractReader} all Reader or Collection to read resources of the + * @private + * @typedef {object} MiddlewareResources + * @property {@ui5/fs.AbstractReader} all Reader or Collection to read resources of the * root project and its dependencies - * @property {module:@ui5/fs.AbstractReader} rootProject Reader or Collection to read resources of + * @property {@ui5/fs.AbstractReader} rootProject Reader or Collection to read resources of * the project the server is started in + * @memberof @ui5/server/internal/MiddlewareManager */ /** + * The MiddlewareManager * - * - * @memberof module:@ui5/server.middleware + * @private + * @class + * @alias @ui5/server/internal/MiddlewareManager */ class MiddlewareManager { constructor({graph, resources, options = { @@ -33,6 +36,14 @@ class MiddlewareManager { this.middlewareUtil = new MiddlewareUtil(); } + /** + * Applies the middleware to + * + * @private + * @param {object} app The express application object + * @returns {Promise>} Promise resolving to an Array with a length of the number + * of added middlewares. The entries of the Array have a value of undefined. + */ async applyMiddleware(app) { await this.addStandardMiddleware(); await this.addCustomMiddleware(); @@ -43,6 +54,18 @@ class MiddlewareManager { }); } + /** + * Adds the given middleware configuration + * + * @private + * @param {string} configuredMiddlewareName The name of the middleware + * @param {object} [options] The Options of the middleware + * @param {object} [options.customMiddleware] The custom middleware + * @param {Function} [options.wrapperCallback] Callback called when middleware is called + * @param {string} [options.mountPath="/"] The path hosting the middleware + * @param {string} [options.beforeMiddleware] The name of the middleware called before the added middleware + * @param {string} [options.afterMiddleware] The name of the middleware called after the added middleware + */ async addMiddleware(configuredMiddlewareName, { customMiddleware, wrapperCallback, mountPath = "/", beforeMiddleware, afterMiddleware @@ -51,7 +74,7 @@ class MiddlewareManager { if (customMiddleware) { middlewareCallback = customMiddleware; } else { - const middlewareInfo = middlewareRepository.getMiddleware(configuredMiddlewareName); + const middlewareInfo = await middlewareRepository.getMiddleware(configuredMiddlewareName); if (wrapperCallback) { middlewareCallback = wrapperCallback(middlewareInfo); } else { @@ -98,6 +121,12 @@ class MiddlewareManager { }; } + /** + * Adds all registered standard middlewares + * + * @private + * @returns {Promise} Resolving to undefined once all standard middlewares are added + */ async addStandardMiddleware() { await this.addMiddleware("csp", { wrapperCallback: ({middleware: cspModule}) => { @@ -214,6 +243,12 @@ class MiddlewareManager { }); } + /** + * Adds all registered custom middlewares + * + * @private + * @returns {Promise} Resolving to undefined once all custom middlewares are added + */ async addCustomMiddleware() { const project = this.graph.getRoot(); const projectCustomMiddleware = project.getCustomMiddleware(); @@ -238,7 +273,7 @@ class MiddlewareManager { `defines neither a "beforeMiddleware" nor an "afterMiddleware" parameter. One must be defined.`); } await this.addMiddleware(middlewareDef.name, { - customMiddleware: ({resources, middlewareUtil}) => { + customMiddleware: async ({resources, middlewareUtil}) => { const customMiddleware = this.graph.getExtension(middlewareDef.name); const specVersion = customMiddleware.getSpecVersion(); const options = { @@ -254,7 +289,7 @@ class MiddlewareManager { // Supply interface to MiddlewareUtil instance starting with specVersion 2.0 params.middlewareUtil = middlewareUtil.getInterface(specVersion); } - return customMiddleware.getMiddleware()(params); + return (await customMiddleware.getMiddleware())(params); }, mountPath: middlewareDef.mountPath, beforeMiddleware: middlewareDef.beforeMiddleware, @@ -264,4 +299,4 @@ class MiddlewareManager { } } -module.exports = MiddlewareManager; +export default MiddlewareManager; diff --git a/lib/middleware/MiddlewareUtil.js b/lib/middleware/MiddlewareUtil.js index b1061920..48b3060a 100644 --- a/lib/middleware/MiddlewareUtil.js +++ b/lib/middleware/MiddlewareUtil.js @@ -1,3 +1,6 @@ +import parseurl from "parseurl"; +import mime from "mime-types"; + /** * Convenience functions for UI5 Server middleware. * An instance of this class is passed to every standard UI5 Server middleware. @@ -8,7 +11,9 @@ * version defined for the extension. * * @public - * @memberof module:@ui5/server.middleware + * @class + * @alias @ui5/server/middleware/MiddlewareUtil + * @hideconstructor */ class MiddlewareUtil { /** @@ -54,7 +59,6 @@ class MiddlewareUtil { * @public */ getPathname(req) { - const parseurl = require("parseurl"); let {pathname} = parseurl(req); pathname = decodeURIComponent(pathname); return pathname; @@ -75,7 +79,7 @@ class MiddlewareUtil { * @property {string} type Detected content-type for the given resource path * @property {string} charset Default charset for the detected content-type * @property {string} contentType Calculated content-type header value - * @memberof module:@ui5/server.middleware.MiddlewareUtil + * @memberof @ui5/server/middleware/MiddlewareUtil */ /** * Returns MIME information derived from a given resource path. @@ -84,11 +88,10 @@ class MiddlewareUtil { * Specification Version 2.0 and above. * * @param {object} resourcePath - * @returns {module:@ui5/server.middleware.MiddlewareUtil.MimeInfo} + * @returns {@ui5/server/middleware/MiddlewareUtil.MimeInfo} * @public */ getMimeInfo(resourcePath) { - const mime = require("mime-types"); const type = mime.lookup(resourcePath) || "application/octet-stream"; const charset = mime.charset(type); return { @@ -99,4 +102,4 @@ class MiddlewareUtil { } } -module.exports = MiddlewareUtil; +export default MiddlewareUtil; diff --git a/lib/middleware/connectUi5Proxy.js b/lib/middleware/connectUi5Proxy.js index 0aab2f52..6e3e43c7 100644 --- a/lib/middleware/connectUi5Proxy.js +++ b/lib/middleware/connectUi5Proxy.js @@ -1,4 +1,4 @@ -const ui5connect = require("connect-openui5"); +import ui5connect from "connect-openui5"; function createMiddleware() { return ui5connect.proxy({ @@ -6,4 +6,4 @@ function createMiddleware() { }); } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/csp.js b/lib/middleware/csp.js index 76f6cca8..87d1832d 100644 --- a/lib/middleware/csp.js +++ b/lib/middleware/csp.js @@ -1,8 +1,10 @@ -const parseurl = require("parseurl"); -const Router = require("router"); -const querystring = require("querystring"); +import parseurl from "parseurl"; +import Router from "router"; +import querystring from "node:querystring"; +import logger from "@ui5/logger"; +import bodyParser from "body-parser"; -const log = require("@ui5/logger").getLogger("server:middleware:csp"); +const log = logger.getLogger("server:middleware:csp"); const HEADER_CONTENT_SECURITY_POLICY = "Content-Security-Policy"; const HEADER_CONTENT_SECURITY_POLICY_REPORT_ONLY = "Content-Security-Policy-Report-Only"; @@ -77,7 +79,6 @@ function createMiddleware(sCspUrlParameterName, oConfig) { // .csplog // body parser is required to parse csp-report in body (json) if (serveCSPReports) { - const bodyParser = require("body-parser"); router.post("/.ui5/csp/report.csplog", bodyParser.json({type: "application/csp-report"})); } router.post("/.ui5/csp/report.csplog", function(req, res, next) { @@ -196,4 +197,4 @@ function createMiddleware(sCspUrlParameterName, oConfig) { return router; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/discovery.js b/lib/middleware/discovery.js index 6242085f..9af41284 100644 --- a/lib/middleware/discovery.js +++ b/lib/middleware/discovery.js @@ -112,4 +112,4 @@ function createMiddleware({resources}) { }; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/middlewareRepository.js b/lib/middleware/middlewareRepository.js index 0e3134e5..ff99ea77 100644 --- a/lib/middleware/middlewareRepository.js +++ b/lib/middleware/middlewareRepository.js @@ -1,34 +1,55 @@ const middlewareInfos = { compression: {path: "compression"}, cors: {path: "cors"}, - csp: {path: "./csp"}, - serveResources: {path: "./serveResources"}, - serveIndex: {path: "./serveIndex"}, - discovery: {path: "./discovery"}, - versionInfo: {path: "./versionInfo"}, - connectUi5Proxy: {path: "./connectUi5Proxy"}, - serveThemes: {path: "./serveThemes"}, - testRunner: {path: "./testRunner"}, - nonReadRequests: {path: "./nonReadRequests"} + csp: {path: "./csp.js"}, + serveResources: {path: "./serveResources.js"}, + serveIndex: {path: "./serveIndex.js"}, + discovery: {path: "./discovery.js"}, + versionInfo: {path: "./versionInfo.js"}, + connectUi5Proxy: {path: "./connectUi5Proxy.js"}, + serveThemes: {path: "./serveThemes.js"}, + testRunner: {path: "./testRunner.js"}, + nonReadRequests: {path: "./nonReadRequests.js"} }; -function getMiddleware(middlewareName) { +// see @ui5/server/internal/middlewareRepository#getMiddleware +async function getMiddleware(middlewareName) { const middlewareInfo = middlewareInfos[middlewareName]; if (!middlewareInfo) { throw new Error(`middlewareRepository: Unknown Middleware ${middlewareName}`); } try { - const middleware = require(middlewareInfo.path); + const {default: middleware} = await import(middlewareInfo.path); return { middleware }; } catch (err) { throw new Error( - `middlewareRepository: Failed to require middleware module for ${middlewareName}: ${err.message}`); + `middlewareRepository: Failed to require middleware module for ${middlewareName}:\n${err.stack}`); } } +/** + * @private + * @typedef {object} module:@ui5/server/internal/middlewareRepository~Middleware + * @property {object} middleware The middleware + */ -module.exports = { +/** + * @private + * @module @ui5/server/internal/middlewareRepository + * @borrows getMiddleware as getMiddleware + */ +export default { + + /** + * Determines the desired middleware + * + * @private + * @static + * @function + * @param {string} middlewareName The name of the middleware + * @returns {module:@ui5/server/internal/middlewareRepository~Middleware} The middleware + */ getMiddleware: getMiddleware }; diff --git a/lib/middleware/nonReadRequests.js b/lib/middleware/nonReadRequests.js index fac995af..bf2bb4c5 100644 --- a/lib/middleware/nonReadRequests.js +++ b/lib/middleware/nonReadRequests.js @@ -20,4 +20,4 @@ function createMiddleware() { }; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/serveIndex.js b/lib/middleware/serveIndex.js index 131994f0..ee758e5d 100644 --- a/lib/middleware/serveIndex.js +++ b/lib/middleware/serveIndex.js @@ -1,6 +1,7 @@ -const log = require("@ui5/logger").getLogger("server:middleware:serveIndex"); -const mime = require("mime-types"); -const serveIndex = require("./serveIndex/serveIndex.js"); +import logger from "@ui5/logger"; +const log = logger.getLogger("server:middleware:serveIndex"); +import mime from "mime-types"; +import serveIndex from "./serveIndex/serveIndex.cjs"; const KB = 1024; const MB = KB * KB; @@ -120,4 +121,4 @@ function createMiddleware({resources, middlewareUtil, simpleIndex = false, showH }; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/serveIndex/serveIndex.js b/lib/middleware/serveIndex/serveIndex.cjs similarity index 100% rename from lib/middleware/serveIndex/serveIndex.js rename to lib/middleware/serveIndex/serveIndex.cjs diff --git a/lib/middleware/serveResources.js b/lib/middleware/serveResources.js index 803b48af..062bd378 100644 --- a/lib/middleware/serveResources.js +++ b/lib/middleware/serveResources.js @@ -1,7 +1,8 @@ -const log = require("@ui5/logger").getLogger("server:middleware:serveResources"); -const replaceStream = require("replacestream"); -const etag = require("etag"); -const fresh = require("fresh"); +import logger from "@ui5/logger"; +const log = logger.getLogger("server:middleware:serveResources"); +import replaceStream from "replacestream"; +import etag from "etag"; +import fresh from "fresh"; const rProperties = /\.properties$/i; const rReplaceVersion = /\.(library|js|json)$/i; @@ -33,14 +34,16 @@ function createMiddleware({resources, middlewareUtil}) { return; } if (log.isLevelEnabled("verbose")) { - const treeify = require("treeify"); + const { + default: treeify + } = await import("treeify"); log.verbose("\n" + treeify.asTree(resource.getPathTree())); } const resourcePath = resource.getPath(); if (rProperties.test(resourcePath)) { // Special handling for *.properties files escape non ascii characters. - const nonAsciiEscaper = require("@ui5/builder").processors.nonAsciiEscaper; + const {default: nonAsciiEscaper} = await import("@ui5/builder/processors/nonAsciiEscaper"); const project = resource.getProject(); let propertiesFileSourceEncoding = project?.getPropertiesFileSourceEncoding(); @@ -98,4 +101,4 @@ function createMiddleware({resources, middlewareUtil}) { }; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/serveThemes.js b/lib/middleware/serveThemes.js index 09fbd5bd..7f24b4e9 100644 --- a/lib/middleware/serveThemes.js +++ b/lib/middleware/serveThemes.js @@ -1,9 +1,9 @@ -const themeBuilder = require("@ui5/builder").processors.themeBuilder; -const fsInterface = require("@ui5/fs").fsInterface; -const {basename, dirname} = require("path").posix; -const etag = require("etag"); -const fresh = require("fresh"); -const parseurl = require("parseurl"); +import {ThemeBuilder} from "@ui5/builder/processors/themeBuilder"; +import fsInterface from "@ui5/fs/fsInterface"; +import {basename, dirname} from "node:path/posix"; +import etag from "etag"; +import fresh from "fresh"; +import parseurl from "parseurl"; function isFresh(req, res) { return fresh(req.headers, { @@ -40,7 +40,7 @@ const themeResources = [ * @returns {Function} Returns a server middleware closure. */ function createMiddleware({resources, middlewareUtil}) { - const builder = new themeBuilder.ThemeBuilder({ + const builder = new ThemeBuilder({ fs: fsInterface(resources.all) }); const buildOptions = {}; @@ -120,4 +120,4 @@ function createMiddleware({resources, middlewareUtil}) { }; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/testRunner.js b/lib/middleware/testRunner.js index dd9cae64..c9a39a29 100644 --- a/lib/middleware/testRunner.js +++ b/lib/middleware/testRunner.js @@ -1,10 +1,11 @@ -const {promisify} = require("util"); -const fs = require("graceful-fs"); +import {promisify} from "node:util"; +import fs from "graceful-fs"; const readFile = promisify(fs.readFile); -const path = require("path"); -const mime = require("mime-types"); -const parseurl = require("parseurl"); -const log = require("@ui5/logger").getLogger("server:middleware:testRunner"); +import {fileURLToPath} from "node:url"; +import mime from "mime-types"; +import parseurl from "parseurl"; +import logger from "@ui5/logger"; +const log = logger.getLogger("server:middleware:testRunner"); const testRunnerResourceRegEx = /\/test-resources\/sap\/ui\/qunit\/(testrunner\.(html|css)|TestRunner.js)$/; const resourceCache = {}; @@ -40,7 +41,8 @@ function createMiddleware({resources}) { log.verbose(`Serving ${pathname}`); let pResource; if (!resourceCache[pathname]) { - pResource = readFile(path.join(__dirname, "testRunner", resourceName), {encoding: "utf8"}); + const filePath = fileURLToPath(new URL(`./testRunner/${resourceName}`, import.meta.url)); + pResource = readFile(filePath, {encoding: "utf8"}); resourceCache[pathname] = pResource; } else { pResource = resourceCache[pathname]; @@ -57,4 +59,4 @@ function createMiddleware({resources}) { }; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/middleware/versionInfo.js b/lib/middleware/versionInfo.js index 57f2a61e..4f402c6d 100644 --- a/lib/middleware/versionInfo.js +++ b/lib/middleware/versionInfo.js @@ -1,5 +1,5 @@ -const createVersionInfoProcessor = require("@ui5/builder").processors.versionInfoGenerator; -const createManifestProcessor = require("@ui5/builder").processors.manifestCreator; +import createVersionInfoProcessor from "@ui5/builder/processors/versionInfoGenerator"; +import createManifestProcessor from "@ui5/builder/processors/manifestCreator"; const MANIFEST_JSON = "manifest.json"; @@ -8,8 +8,8 @@ const MANIFEST_JSON = "manifest.json"; * * @module @ui5/server/middleware/versionInfo * @param {object} parameters Parameters - * @param {module:@ui5/server.middleware.MiddlewareManager.middlewareResources} parameters.resources Parameters - * @param {module:@ui5/project.graph.ProjectGraph} parameters.graph Project graph + * @param {@ui5/server.middleware.MiddlewareManager.middlewareResources} parameters.resources Parameters + * @param {@ui5/project.graph.ProjectGraph} parameters.graph Project graph * @returns {Function} Returns a server middleware closure. */ function createMiddleware({resources, graph}) { @@ -74,4 +74,4 @@ function createMiddleware({resources, graph}) { }; } -module.exports = createMiddleware; +export default createMiddleware; diff --git a/lib/server.js b/lib/server.js index aeaf6f2a..6e1455a6 100644 --- a/lib/server.js +++ b/lib/server.js @@ -1,11 +1,13 @@ -const express = require("express"); -const portscanner = require("portscanner"); +import express from "express"; +import portscanner from "portscanner"; +import MiddlewareManager from "./middleware/MiddlewareManager.js"; +import {createReaderCollection} from "@ui5/fs/resourceFactory"; +import ReaderCollectionPrioritized from "@ui5/fs/ReaderCollectionPrioritized"; -const MiddlewareManager = require("./middleware/MiddlewareManager"); - -const ui5Fs = require("@ui5/fs"); -const resourceFactory = ui5Fs.resourceFactory; -const ReaderCollectionPrioritized = ui5Fs.ReaderCollectionPrioritized; +/** + * @public + * @module @ui5/server + */ /** * Returns a promise resolving by starting the server. @@ -79,13 +81,14 @@ function _listen(app, port, changePortIfInUse, acceptRemoteConnections) { * @param {object} parameters.app The original express application * @param {string} parameters.key Path to private key to be used for https * @param {string} parameters.cert Path to certificate to be used for for https - * @returns {object} The express application with SSL support + * @returns {Promise} The express application with SSL support * @private */ -function _addSsl({app, key, cert}) { +async function _addSsl({app, key, cert}) { // Using spdy as http2 server as the native http2 implementation // from Node v8.4.0 doesn't seem to work with express - return require("spdy").createServer({cert, key}, app); + const {default: spdy} = await import("spdy"); + return spdy.createServer({cert, key}, app); } @@ -93,7 +96,7 @@ function _addSsl({app, key, cert}) { * SAP target CSP middleware options * * @public - * @typedef {object} module:@ui5/server.server.SAPTargetCSPOptions + * @typedef {object} module:@ui5/server.SAPTargetCSPOptions * @property {string} [defaultPolicy="sap-target-level-1"] * @property {string} [defaultPolicyIsReportOnly=true] * @property {string} [defaultPolicy2="sap-target-level-2"] @@ -103,94 +106,87 @@ function _addSsl({app, key, cert}) { /** + * Start a server for the given project (sub-)tree. + * * @public - * @namespace - * @alias module:@ui5/server.server + * @param {@ui5/project/graph/ProjectGraph} graph Project graph + * @param {object} options Options + * @param {number} options.port Port to listen to + * @param {boolean} [options.changePortIfInUse=false] If true, change the port if it is already in use + * @param {boolean} [options.h2=false] Whether HTTP/2 should be used - defaults to http + * @param {string} [options.key] Path to private key to be used for https + * @param {string} [options.cert] Path to certificate to be used for for https + * @param {boolean} [options.simpleIndex=false] Use a simplified view for the server directory listing + * @param {boolean} [options.acceptRemoteConnections=false] If true, listens to remote connections and + * not only to localhost connections + * @param {boolean|module:@ui5/server.SAPTargetCSPOptions} [options.sendSAPTargetCSP=false] + * If set to true or an object, then the default (or configured) + * set of security policies that SAP and UI5 aim for (AKA 'target policies'), + * are send for any requested *.html file + * @param {boolean} [options.serveCSPReports=false] Enable CSP reports serving for request url + * '/.ui5/csp/csp-reports.json' + * @returns {Promise} Promise resolving once the server is listening. + * It resolves with an object containing the port, + * h2-flag and a close function, + * which can be used to stop the server. */ -module.exports = { - /** - * Start a server for the given project (sub-)tree. - * - * @public - * @param {module:@ui5/project.graph.ProjectGraph} graph Project graph - * @param {object} options Options - * @param {number} options.port Port to listen to - * @param {boolean} [options.changePortIfInUse=false] If true, change the port if it is already in use - * @param {boolean} [options.h2=false] Whether HTTP/2 should be used - defaults to http - * @param {string} [options.key] Path to private key to be used for https - * @param {string} [options.cert] Path to certificate to be used for for https - * @param {boolean} [options.simpleIndex=false] Use a simplified view for the server directory listing - * @param {boolean} [options.acceptRemoteConnections=false] If true, listens to remote connections and - * not only to localhost connections - * @param {boolean|module:@ui5/server.server.SAPTargetCSPOptions} [options.sendSAPTargetCSP=false] - * If set to true or an object, then the default (or configured) - * set of security policies that SAP and UI5 aim for (AKA 'target policies'), - * are send for any requested *.html file - * @param {boolean} [options.serveCSPReports=false] Enable CSP reports serving for request url - * '/.ui5/csp/csp-reports.json' - * @returns {Promise} Promise resolving once the server is listening. - * It resolves with an object containing the port, - * h2-flag and a close function, - * which can be used to stop the server. - */ - async serve(graph, { - port: requestedPort, changePortIfInUse = false, h2 = false, key, cert, - acceptRemoteConnections = false, sendSAPTargetCSP = false, simpleIndex = false, serveCSPReports = false - }) { - const rootProject = graph.getRoot(); - - const readers = []; - await graph.traverseBreadthFirst(async function({project: dep}) { - if (dep.getName() === rootProject.getName()) { - // Ignore root project - return; - } - readers.push(dep.getReader({style: "runtime"})); - }); - - const dependencies = resourceFactory.createReaderCollection({ - name: `Dependency reader collection for project ${rootProject.getName()}`, - readers - }); - - const rootReader = rootProject.getReader({style: "runtime"}); +export async function serve(graph, { + port: requestedPort, changePortIfInUse = false, h2 = false, key, cert, + acceptRemoteConnections = false, sendSAPTargetCSP = false, simpleIndex = false, serveCSPReports = false +}) { + const rootProject = graph.getRoot(); + + const readers = []; + await graph.traverseBreadthFirst(async function({project: dep}) { + if (dep.getName() === rootProject.getName()) { + // Ignore root project + return; + } + readers.push(await dep.getReader({style: "runtime"})); + }); - // TODO change to ReaderCollection once duplicates are sorted out - const combo = new ReaderCollectionPrioritized({ - name: "server - prioritize workspace over dependencies", - readers: [rootReader, dependencies] - }); - const resources = { - rootProject: rootReader, - dependencies: dependencies, - all: combo - }; - - const middlewareManager = new MiddlewareManager({ - graph, - resources, - options: { - sendSAPTargetCSP, - serveCSPReports, - simpleIndex - } - }); + const dependencies = createReaderCollection({ + name: `Dependency reader collection for project ${rootProject.getName()}`, + readers + }); - let app = express(); - await middlewareManager.applyMiddleware(app); + const rootReader = await rootProject.getReader({style: "runtime"}); - if (h2) { - app = _addSsl({app, key, cert}); + // TODO change to ReaderCollection once duplicates are sorted out + const combo = new ReaderCollectionPrioritized({ + name: "server - prioritize workspace over dependencies", + readers: [rootReader, dependencies] + }); + const resources = { + rootProject: rootReader, + dependencies: dependencies, + all: combo + }; + + const middlewareManager = new MiddlewareManager({ + graph, + resources, + options: { + sendSAPTargetCSP, + serveCSPReports, + simpleIndex } + }); - const {port, server} = await _listen(app, requestedPort, changePortIfInUse, acceptRemoteConnections); + let app = express(); + await middlewareManager.applyMiddleware(app); - return { - h2, - port, - close: function(callback) { - server.close(callback); - } - }; + if (h2) { + app = await _addSsl({app, key, cert}); } -}; + + const {port, server} = await _listen(app, requestedPort, changePortIfInUse, acceptRemoteConnections); + + return { + h2, + port, + close: function(callback) { + server.close(callback); + } + }; +} diff --git a/lib/sslUtil.js b/lib/sslUtil.js index 4d12c0fa..18e56af6 100644 --- a/lib/sslUtil.js +++ b/lib/sslUtil.js @@ -1,58 +1,63 @@ -const os = require("os"); -const fs = require("fs"); -const log = require("@ui5/logger").getLogger("server:sslUtil"); -const {promisify} = require("util"); +import os from "node:os"; +import fs from "node:fs"; +import logger from "@ui5/logger"; +const log = logger.getLogger("server:sslUtil"); +import {promisify} from "node:util"; const stat = promisify(fs.stat); -const path = require("path"); +import path from "node:path"; const readFile = promisify(fs.readFile); const writeFile = promisify(fs.writeFile); -const makeDir = require("make-dir"); -const sslUtil = { - /** - * Creates a new SSL certificate or validates an existing one. - * - * @module @ui5/server/sslUtil - * @param {string} [keyPath=$HOME/.ui5/server/server.key] Path to private key to be used for https. - * Defaults to $HOME/.ui5/server/server.key - * @param {string} [certPath=$HOME/.ui5/server/server.crt] Path to certificate to be used for for https. - * Defaults to $HOME/.ui5/server/server.crt - * @returns {Promise} Resolves with an sslObject containing cert and key - */ - getSslCertificate: function( - keyPath = path.join(os.homedir(), ".ui5/server/server.key"), - certPath = path.join(os.homedir(), ".ui5/server/server.crt") - ) { - // checks the certificates if they are present - return Promise.all([ - fileExists(keyPath).then((bExists) => { - if (!bExists) { - log.verbose(`No SSL private key found at ${keyPath}`); - return false; - } - return readFile(keyPath); - }), - fileExists(certPath).then((bExists) => { - if (!bExists) { - log.verbose(`No SSL certificate found at ${certPath}`); - return false; - } - return readFile(certPath); - }) - ]).then(function([key, cert]) { - if (key && cert) { - return {key, cert}; + +/** + * @private + * @module @ui5/server/internal/sslUtil + */ + +/** + * Creates a new SSL certificate or validates an existing one. + * + * @private + * @static + * @param {string} [keyPath=$HOME/.ui5/server/server.key] Path to private key to be used for https. + * Defaults to $HOME/.ui5/server/server.key + * @param {string} [certPath=$HOME/.ui5/server/server.crt] Path to certificate to be used for for https. + * Defaults to $HOME/.ui5/server/server.crt + * @returns {Promise} Resolves with an sslObject containing cert and key + */ +export function getSslCertificate( + keyPath = path.join(os.homedir(), ".ui5/server/server.key"), + certPath = path.join(os.homedir(), ".ui5/server/server.crt") +) { + // checks the certificates if they are present + return Promise.all([ + fileExists(keyPath).then((bExists) => { + if (!bExists) { + log.verbose(`No SSL private key found at ${keyPath}`); + return false; } - return createAndInstallCertificate(keyPath, certPath); - }); - } -}; + return readFile(keyPath); + }), + fileExists(certPath).then((bExists) => { + if (!bExists) { + log.verbose(`No SSL certificate found at ${certPath}`); + return false; + } + return readFile(certPath); + }) + ]).then(function([key, cert]) { + if (key && cert) { + return {key, cert}; + } + return createAndInstallCertificate(keyPath, certPath); + }); +} async function createAndInstallCertificate(keyPath, certPath) { - const yesno = require("yesno"); + const {default: yesno} = await import("yesno"); const ok = await yesno({ question: "No SSL certificates found. " + @@ -65,7 +70,7 @@ async function createAndInstallCertificate(keyPath, certPath) { } // In case certificate is not found, create a self-signed one and put it into the user's trust store - const devCert = require("devcert-sanscache"); + const {default: devCert} = await import("devcert-sanscache"); // Inform end user about entering his root password (needed for importing // the created certificate into the system) @@ -81,6 +86,9 @@ async function createAndInstallCertificate(keyPath, certPath) { } const {key, cert} = await devCert("UI5Tooling"); + + const {default: makeDir} = await import("make-dir"); + await Promise.all([ // Write certificates to the ui5 certificate folder // such that they are used by default upon next startup @@ -99,5 +107,3 @@ function fileExists(filePath) { } }); } - -module.exports = sslUtil; diff --git a/package-lock.json b/package-lock.json index fd78acae..9c3275db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "3.0.0-alpha.3", "license": "Apache-2.0", "dependencies": { - "@ui5/builder": "^3.0.0-alpha.11", - "@ui5/fs": "^3.0.0-alpha.6", - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/builder": "^3.0.0-alpha.12", + "@ui5/fs": "^3.0.0-alpha.7", + "@ui5/logger": "^3.0.1-alpha.3", "body-parser": "^1.19.1", "compression": "^1.7.4", "connect-openui5": "^0.10.2", @@ -33,8 +33,9 @@ "yesno": "^0.3.1" }, "devDependencies": { - "@ui5/project": "^3.0.0-alpha.9", - "ava": "^3.15.0", + "@istanbuljs/esm-loader-hook": "^0.2.0", + "@ui5/project": "^3.0.0-alpha.10", + "ava": "^4.3.3", "chokidar-cli": "^3.0.0", "cross-env": "^7.0.3", "depcheck": "^1.4.3", @@ -43,12 +44,12 @@ "eslint-config-google": "^0.14.0", "eslint-plugin-ava": "^13.0.2", "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", "supertest": "^6.2.1", "tap-nyan": "^1.1.0", "tap-xunit": "^2.4.1" @@ -262,6 +263,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", @@ -471,27 +481,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", @@ -573,6 +562,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", @@ -768,15 +773,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", @@ -787,9 +783,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" @@ -812,18 +808,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", @@ -874,13 +858,13 @@ "dev": true }, "node_modules/@ui5/builder": { - "version": "3.0.0-alpha.11", - "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-3.0.0-alpha.11.tgz", - "integrity": "sha512-lBSahG4bH1ac1/NJxE5YwiooqT5uqEoWXW0//EGFxv+krt010NbiB4sPM6G5qqOwP3t5Yp5/2+ET0vrnyjh80w==", + "version": "3.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-3.0.0-alpha.12.tgz", + "integrity": "sha512-sl7K2ygqZq3eeQK0hXIZqXgjMg5hQ3UA2/hmDd2Ry0UgzD6FNSj8VZSzpft1n533huD2BxjmiRhHCqxo9DM6UQ==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.14", - "@ui5/fs": "^3.0.0-alpha.6", - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/fs": "^3.0.0-alpha.7", + "@ui5/logger": "^3.0.1-alpha.3", "cheerio": "1.0.0-rc.9", "escape-unicode": "^0.2.0", "escope": "^4.0.0", @@ -903,11 +887,11 @@ } }, "node_modules/@ui5/fs": { - "version": "3.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-3.0.0-alpha.6.tgz", - "integrity": "sha512-7gBRYtUHLnmtf/5hp7YKJlER9rJ6XPoNn2BjaLOKpg/eoHluUigLPtqNqzrmhaBJ0HJ2LVURaJ/xK7eNUIJNVA==", + "version": "3.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-3.0.0-alpha.7.tgz", + "integrity": "sha512-lgkCG6YcJOMTK1BqbjhYYK/0KU7iH2MGOeweuOfvJNMjAkh/8w1yXHhMplD+5zz3H+pLir4rZh+/PlqyJ/bPmQ==", "dependencies": { - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/logger": "^3.0.1-alpha.3", "clone": "^2.1.0", "escape-string-regexp": "^4.0.0", "globby": "^11.1.0", @@ -924,9 +908,9 @@ } }, "node_modules/@ui5/logger": { - "version": "3.0.1-alpha.2", - "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-3.0.1-alpha.2.tgz", - "integrity": "sha512-xYrLuFYXWJvLwNA60gWqX203ZjDIYOH5xEpqLhl1QViFLNiByzNazj78ra9wueCIHNNbg8AMsyjC6krBVoYcKw==", + "version": "3.0.1-alpha.3", + "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-3.0.1-alpha.3.tgz", + "integrity": "sha512-oYO4jmen6Csuf9tw9SI/iKXGeMD1gA3ShQrtc1Uyjw/RgT9LGNRmWaqHtwws+Qlh2TPIz9gz9gYd3pdj5aE3Qw==", "dependencies": { "npmlog": "^6.0.2" }, @@ -936,14 +920,14 @@ } }, "node_modules/@ui5/project": { - "version": "3.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@ui5/project/-/project-3.0.0-alpha.9.tgz", - "integrity": "sha512-/xBr+3OyMXMNLEYjpOH9NobTFI+KdkSgihPulDd0l32JrKMQzZ53/knXsJmqaHS6qW6EWDfNGLt8ujHk+V1MLw==", + "version": "3.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@ui5/project/-/project-3.0.0-alpha.10.tgz", + "integrity": "sha512-eLnWMMhf908ZyNMSjy7O15867SAJM4hIAndbL8+/EyfY/yYowCE1Wiu884nNlJQk7O0wTwnSOoUctuxqoicM4w==", "dev": true, "dependencies": { - "@ui5/builder": "^3.0.0-alpha.10", - "@ui5/fs": "^3.0.0-alpha.6", - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/builder": "^3.0.0-alpha.12", + "@ui5/fs": "^3.0.0-alpha.7", + "@ui5/logger": "^3.0.1-alpha.3", "ajv": "^6.12.6", "ajv-errors": "^1.0.1", "chalk": "^4.1.2", @@ -1138,15 +1122,6 @@ "ajv": ">=5.0.0" } }, - "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", @@ -1156,12 +1131,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" @@ -1275,15 +1250,6 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, - "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": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -1307,73 +1273,324 @@ } }, "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": ">=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": ">=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0 <15 || >=15" + "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/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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": { @@ -1381,26 +1598,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", @@ -1410,17 +1607,6 @@ "node": ">=8" } }, - "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", @@ -1473,40 +1659,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, - "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", @@ -1556,30 +1708,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-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1654,54 +1782,6 @@ "rimraf": "bin.js" } }, - "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/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/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", @@ -1803,6 +1883,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/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1979,15 +2071,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "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", @@ -2078,9 +2161,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": { @@ -2107,56 +2190,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": { @@ -2178,25 +2275,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": { @@ -2383,23 +2471,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/connect-openui5": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/connect-openui5/-/connect-openui5-0.10.2.tgz", @@ -2471,12 +2542,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/cookie": { @@ -2604,16 +2675,7 @@ "which": "^2.0.1" }, "engines": { - "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": ">= 8" } }, "node_modules/css": { @@ -2742,27 +2804,6 @@ "node": ">=0.10" } }, - "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-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", @@ -2781,30 +2822,6 @@ "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, - "engines": { - "node": ">=0.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", @@ -3061,18 +3078,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "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", @@ -3112,12 +3117,6 @@ "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==", - "dev": true - }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -3154,6 +3153,12 @@ "safe-buffer": "~5.1.0" } }, + "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/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3166,12 +3171,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" @@ -3240,15 +3245,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/err-code": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", @@ -3294,15 +3290,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-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -3634,6 +3621,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", @@ -3894,27 +3893,31 @@ "dev": true }, "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": { @@ -4322,10 +4325,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-intrinsic": { "version": "1.1.2", @@ -4408,30 +4414,6 @@ "node": ">= 6" } }, - "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/global-dirs/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/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -4460,28 +4442,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", @@ -4558,15 +4518,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", @@ -4838,34 +4789,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", @@ -4972,18 +4895,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", @@ -5044,43 +4955,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", @@ -5097,15 +4971,6 @@ "lodash.isfinite": "^3.3.2" } }, - "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", @@ -5167,12 +5032,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" @@ -5199,12 +5064,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": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5423,12 +5282,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", @@ -5496,15 +5349,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", @@ -5522,18 +5366,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/less-openui5": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.11.2.tgz", @@ -5588,50 +5420,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": { @@ -5696,22 +5493,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", @@ -5724,15 +5505,6 @@ "loose-envify": "cli.js" } }, - "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": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -5860,15 +5632,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": { @@ -5897,16 +5684,16 @@ } }, "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" @@ -6019,21 +5806,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": { @@ -6140,31 +5921,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/move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -6319,6 +6075,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", @@ -6349,15 +6114,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/npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", @@ -6583,15 +6339,6 @@ "node": ">=8" } }, - "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/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6730,30 +6477,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", @@ -6806,29 +6529,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/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -6857,15 +6557,6 @@ "os-tmpdir": "^1.0.0" } }, - "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", @@ -6876,29 +6567,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", @@ -6942,15 +6624,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": { @@ -6977,30 +6659,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/pacote": { "version": "9.5.12", "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", @@ -7254,26 +6912,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/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": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "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": "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": "^4.0.0" + }, + "engines": { + "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": "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": "^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": { @@ -7344,15 +7078,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" @@ -7412,15 +7146,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-data": { "version": "0.40.0", "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", @@ -7549,18 +7274,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/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -7642,30 +7355,6 @@ "node": ">= 0.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/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", @@ -7818,30 +7507,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", @@ -7854,12 +7519,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/replacestream": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", @@ -7981,26 +7640,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/retry": { @@ -8166,37 +7812,16 @@ "bin": { "semver": "bin/semver.js" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "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" + "engines": { + "node": ">=10" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -8345,16 +7970,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": { @@ -8371,52 +7996,33 @@ } }, "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" - }, - "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==", + "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/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -8780,19 +8386,30 @@ } }, "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/argparse": { @@ -8804,6 +8421,18 @@ "sprintf-js": "~1.0.2" } }, + "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/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -8817,6 +8446,21 @@ "js-yaml": "bin/js-yaml.js" } }, + "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/supertest": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.3.tgz", @@ -9296,15 +8940,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", @@ -9364,15 +8999,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/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -9463,18 +9089,6 @@ "imurmurhash": "^0.1.4" } }, - "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/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -9483,34 +9097,6 @@ "node": ">= 0.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", @@ -9520,18 +9106,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", @@ -9595,15 +9169,6 @@ "minimalistic-assert": "^1.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", @@ -9642,18 +9207,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/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -9730,15 +9283,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/xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -9846,15 +9390,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/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -10055,6 +9590,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", @@ -10210,23 +9751,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", @@ -10289,6 +9813,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", @@ -10441,12 +9978,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", @@ -10457,9 +9988,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" @@ -10482,15 +10013,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", @@ -10541,13 +10063,13 @@ "dev": true }, "@ui5/builder": { - "version": "3.0.0-alpha.11", - "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-3.0.0-alpha.11.tgz", - "integrity": "sha512-lBSahG4bH1ac1/NJxE5YwiooqT5uqEoWXW0//EGFxv+krt010NbiB4sPM6G5qqOwP3t5Yp5/2+ET0vrnyjh80w==", + "version": "3.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-3.0.0-alpha.12.tgz", + "integrity": "sha512-sl7K2ygqZq3eeQK0hXIZqXgjMg5hQ3UA2/hmDd2Ry0UgzD6FNSj8VZSzpft1n533huD2BxjmiRhHCqxo9DM6UQ==", "requires": { "@jridgewell/sourcemap-codec": "^1.4.14", - "@ui5/fs": "^3.0.0-alpha.6", - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/fs": "^3.0.0-alpha.7", + "@ui5/logger": "^3.0.1-alpha.3", "cheerio": "1.0.0-rc.9", "escape-unicode": "^0.2.0", "escope": "^4.0.0", @@ -10566,11 +10088,11 @@ } }, "@ui5/fs": { - "version": "3.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-3.0.0-alpha.6.tgz", - "integrity": "sha512-7gBRYtUHLnmtf/5hp7YKJlER9rJ6XPoNn2BjaLOKpg/eoHluUigLPtqNqzrmhaBJ0HJ2LVURaJ/xK7eNUIJNVA==", + "version": "3.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-3.0.0-alpha.7.tgz", + "integrity": "sha512-lgkCG6YcJOMTK1BqbjhYYK/0KU7iH2MGOeweuOfvJNMjAkh/8w1yXHhMplD+5zz3H+pLir4rZh+/PlqyJ/bPmQ==", "requires": { - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/logger": "^3.0.1-alpha.3", "clone": "^2.1.0", "escape-string-regexp": "^4.0.0", "globby": "^11.1.0", @@ -10583,22 +10105,22 @@ } }, "@ui5/logger": { - "version": "3.0.1-alpha.2", - "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-3.0.1-alpha.2.tgz", - "integrity": "sha512-xYrLuFYXWJvLwNA60gWqX203ZjDIYOH5xEpqLhl1QViFLNiByzNazj78ra9wueCIHNNbg8AMsyjC6krBVoYcKw==", + "version": "3.0.1-alpha.3", + "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-3.0.1-alpha.3.tgz", + "integrity": "sha512-oYO4jmen6Csuf9tw9SI/iKXGeMD1gA3ShQrtc1Uyjw/RgT9LGNRmWaqHtwws+Qlh2TPIz9gz9gYd3pdj5aE3Qw==", "requires": { "npmlog": "^6.0.2" } }, "@ui5/project": { - "version": "3.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@ui5/project/-/project-3.0.0-alpha.9.tgz", - "integrity": "sha512-/xBr+3OyMXMNLEYjpOH9NobTFI+KdkSgihPulDd0l32JrKMQzZ53/knXsJmqaHS6qW6EWDfNGLt8ujHk+V1MLw==", + "version": "3.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@ui5/project/-/project-3.0.0-alpha.10.tgz", + "integrity": "sha512-eLnWMMhf908ZyNMSjy7O15867SAJM4hIAndbL8+/EyfY/yYowCE1Wiu884nNlJQk7O0wTwnSOoUctuxqoicM4w==", "dev": true, "requires": { - "@ui5/builder": "^3.0.0-alpha.10", - "@ui5/fs": "^3.0.0-alpha.6", - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/builder": "^3.0.0-alpha.12", + "@ui5/fs": "^3.0.0-alpha.7", + "@ui5/logger": "^3.0.1-alpha.3", "ajv": "^6.12.6", "ajv-errors": "^1.0.1", "chalk": "^4.1.2", @@ -10760,24 +10282,15 @@ "dev": true, "requires": {} }, - "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": { @@ -10864,12 +10377,6 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "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": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -10887,67 +10394,223 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "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" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "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": { @@ -10955,29 +10618,12 @@ "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", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "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", @@ -11028,30 +10674,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, - "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", @@ -11082,16 +10704,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-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -11156,44 +10768,6 @@ } } }, - "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" - } - }, - "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 - }, - "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", @@ -11260,6 +10834,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" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -11388,12 +10971,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "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 - }, "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", @@ -11474,9 +11051,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": { @@ -11497,35 +11074,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": { @@ -11544,22 +11134,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": { @@ -11726,20 +11307,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" - } - }, "connect-openui5": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/connect-openui5/-/connect-openui5-0.10.2.tgz", @@ -11789,9 +11356,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 }, "cookie": { @@ -11897,12 +11464,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 - }, "css": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", @@ -11998,21 +11559,6 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" }, - "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-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", @@ -12028,29 +11574,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", @@ -12253,15 +11776,6 @@ "domhandler": "^4.2.0" } }, - "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", @@ -12303,12 +11817,6 @@ } } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", - "dev": true - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -12347,6 +11855,12 @@ } } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -12359,9 +11873,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": { @@ -12417,12 +11931,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, - "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 - }, "err-code": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", @@ -12465,12 +11973,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-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -12703,6 +12205,15 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, + "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", @@ -12915,18 +12426,19 @@ "dev": true }, "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 } } @@ -13257,9 +12769,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-intrinsic": { @@ -13319,23 +12831,6 @@ "is-glob": "^4.0.1" } }, - "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" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - } - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -13355,25 +12850,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", @@ -13431,12 +12907,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", @@ -13657,22 +13127,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", @@ -13758,15 +13212,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", @@ -13806,28 +13251,6 @@ "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", @@ -13841,12 +13264,6 @@ "lodash.isfinite": "^3.3.2" } }, - "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", @@ -13890,9 +13307,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": { @@ -13910,12 +13327,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": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -14089,12 +13500,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", @@ -14147,15 +13552,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", @@ -14167,15 +13563,6 @@ "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==" }, - "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" - } - }, "less-openui5": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.11.2.tgz", @@ -14222,41 +13609,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": "3.0.0", @@ -14317,16 +13673,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", @@ -14336,12 +13682,6 @@ "js-tokens": "^3.0.0 || ^4.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": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -14440,12 +13780,20 @@ "integrity": "sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==" }, "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": { @@ -14468,13 +13816,13 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "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": { @@ -14553,15 +13901,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": { @@ -14649,27 +13991,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, - "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" - } - } - } - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -14801,6 +14122,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", @@ -14827,12 +14154,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 - }, "npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", @@ -15020,12 +14341,6 @@ "path-exists": "^4.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 - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -15133,23 +14448,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", @@ -15187,23 +14485,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" - } - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -15226,12 +14507,6 @@ "os-tmpdir": "^1.0.0" } }, - "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", @@ -15239,20 +14514,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", @@ -15281,13 +14550,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", @@ -15307,26 +14573,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 - } - } - }, "pacote": { "version": "9.5.12", "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", @@ -15532,20 +14778,65 @@ "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": "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": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "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, + "requires": { + "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": "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": "^4.0.0" + } + }, + "path-exists": { + "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 + } } }, "pkg-dir": { @@ -15603,12 +14894,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" } }, "portscanner": { @@ -15647,12 +14938,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-data": { "version": "0.40.0", "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", @@ -15759,15 +15044,6 @@ "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" - } - }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -15817,26 +15093,6 @@ "unpipe": "1.0.0" } }, - "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": { - "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", @@ -15951,24 +15207,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", @@ -15978,12 +15216,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 - }, "replacestream": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", @@ -16088,24 +15320,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 }, "retry": { "version": "0.10.1", @@ -16254,23 +15473,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 - } - } - }, "send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -16382,16 +15584,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" } }, @@ -16401,38 +15603,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 } } @@ -16724,18 +15907,23 @@ } }, "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 + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -16745,6 +15933,12 @@ "sprintf-js": "~1.0.2" } }, + "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 + }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -16754,6 +15948,15 @@ "argparse": "^1.0.7", "esprima": "^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" + } } } }, @@ -17142,12 +16345,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", @@ -17190,12 +16387,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 - }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -17274,42 +16465,11 @@ "imurmurhash": "^0.1.4" } }, - "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" - } - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "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", @@ -17319,15 +16479,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", @@ -17382,15 +16533,6 @@ "minimalistic-assert": "^1.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", @@ -17420,15 +16562,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" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -17489,12 +16622,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 - }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -17564,12 +16691,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 - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 0d53e457..17debf8f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,14 @@ "development", "tool" ], - "main": "index.js", + "type": "module", + "exports": { + ".": "./lib/server.js", + "./internal/sslUtil": "./lib/sslUtil.js", + "./internal/middlewareRepository": "./lib/middleware/middlewareRepository.js", + "./internal/MiddlewareManager": "./lib/middleware/MiddlewareManager.js", + "./package.json": "./package.json" + }, "engines": { "node": ">= 16.13.2", "npm": ">= 8" @@ -27,11 +34,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 +47,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,compression,cors" + "depcheck": "depcheck --ignores @ui5/server,docdash,compression,cors,@istanbuljs/esm-loader-hook --parsers='**/*.js:es6,**/*.cjs:es6'" }, "files": [ - "index.js", "CHANGELOG.md", "CONTRIBUTING.md", "jsdoc.json", @@ -57,6 +63,10 @@ ], "ignoredByWatcher": [ "test/tmp/**" + ], + "nodeArguments": [ + "--loader=esmock", + "--no-warnings" ] }, "nyc": { @@ -71,8 +81,8 @@ "jsdocs/**", "coverage/**", "test/**", - ".eslintrc.js", - "jsdoc-plugin.js" + ".eslintrc.cjs", + "jsdoc-plugin.cjs" ], "check-coverage": true, "statements": 90, @@ -105,9 +115,9 @@ "url": "git@github.com:SAP/ui5-server.git" }, "dependencies": { - "@ui5/builder": "^3.0.0-alpha.11", - "@ui5/fs": "^3.0.0-alpha.6", - "@ui5/logger": "^3.0.1-alpha.2", + "@ui5/builder": "^3.0.0-alpha.12", + "@ui5/fs": "^3.0.0-alpha.7", + "@ui5/logger": "^3.0.1-alpha.3", "body-parser": "^1.19.1", "compression": "^1.7.4", "connect-openui5": "^0.10.2", @@ -129,8 +139,9 @@ "yesno": "^0.3.1" }, "devDependencies": { - "@ui5/project": "^3.0.0-alpha.9", - "ava": "^3.15.0", + "@istanbuljs/esm-loader-hook": "^0.2.0", + "@ui5/project": "^3.0.0-alpha.10", + "ava": "^4.3.3", "chokidar-cli": "^3.0.0", "cross-env": "^7.0.3", "depcheck": "^1.4.3", @@ -139,12 +150,12 @@ "eslint-config-google": "^0.14.0", "eslint-plugin-ava": "^13.0.2", "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", "supertest": "^6.2.1", "tap-nyan": "^1.1.0", "tap-xunit": "^2.4.1" diff --git a/test/lib/index.js b/test/lib/index.js deleted file mode 100644 index 74be47c0..00000000 --- a/test/lib/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const test = require("ava"); -const index = require("../../index"); - -test("index.js exports all expected modules", (t) => { - t.truthy(index.server, "Module exported"); - t.truthy(index.sslUtil, "Module exported"); - t.truthy(index.middlewareRepository, "Module exported"); -}); diff --git a/test/lib/package-exports.js b/test/lib/package-exports.js new file mode 100644 index 00000000..c1d7bfd8 --- /dev/null +++ b/test/lib/package-exports.js @@ -0,0 +1,52 @@ +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/server/package.json").version); +}); + +// Check number of definied exports +test("check number of exports", (t) => { + const packageJson = require("@ui5/server/package.json"); + t.is(Object.keys(packageJson.exports).length, 5); +}); + +// Public API contract (exported modules) +test("@ui5/server", async (t) => { + const actual = await import("@ui5/server"); + const expected = await import("../../lib/server.js"); + t.is(actual, expected, "Correct module exported"); +}); + +// Internal modules (only to be used by @ui5/* / SAP owned packages) +[ + // used by @ui5/cli + {exportedSpecifier: "internal/sslUtil", mappedModule: "../../lib/sslUtil.js"}, + + // used by SAP/openui5 (csp middleware) + {exportedSpecifier: "internal/middlewareRepository", mappedModule: "../../lib/middleware/middlewareRepository.js"}, + + // used by karma-ui5 + {exportedSpecifier: "internal/MiddlewareManager", mappedModule: "../../lib/middleware/MiddlewareManager.js"}, +].forEach((v) => { + let exportedSpecifier; let mappedModule; + if (typeof v === "string") { + exportedSpecifier = v; + } else { + exportedSpecifier = v.exportedSpecifier; + mappedModule = v.mappedModule; + } + if (!mappedModule) { + mappedModule = `../../lib/${exportedSpecifier}.js`; + } + const spec = `@ui5/server/${exportedSpecifier}`; + test(`${spec}`, async (t) => { + const actual = await import(spec); + const expected = await import(mappedModule); + t.is(actual, expected, "Correct module exported"); + }); +}); diff --git a/test/lib/server/acceptRemoteConnections.js b/test/lib/server/acceptRemoteConnections.js index d0dda8e0..e52fb53a 100644 --- a/test/lib/server/acceptRemoteConnections.js +++ b/test/lib/server/acceptRemoteConnections.js @@ -1,19 +1,18 @@ -const test = require("ava"); -const supertest = require("supertest"); -const ui5Server = require("../../../"); -const server = ui5Server.server; -const generateProjectGraph = require("@ui5/project").generateProjectGraph.usingNodePackageDependencies; +import test from "ava"; +import supertest from "supertest"; +import {serve} from "../../../lib/server.js"; +import {graphFromPackageDependencies} from "@ui5/project/graph"; let request; -let serve; +let server; // Start server before running tests test.before(async () => { - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - serve = await server.serve(graph, { + server = await serve(graph, { port: 3334, acceptRemoteConnections: true }); @@ -23,7 +22,7 @@ test.before(async () => { test.after(() => { return new Promise((resolve, reject) => { - serve.close((error) => { + server.close((error) => { if (error) { reject(error); } else { diff --git a/test/lib/server/h2.js b/test/lib/server/h2.js index 4517b67c..f8f004eb 100644 --- a/test/lib/server/h2.js +++ b/test/lib/server/h2.js @@ -1,26 +1,26 @@ -const test = require("ava"); -const supertest = require("supertest"); -const ui5Server = require("../../../"); -const server = ui5Server.server; -const generateProjectGraph = require("@ui5/project").generateProjectGraph.usingNodePackageDependencies; -const path = require("path"); +import test from "ava"; +import supertest from "supertest"; +import {serve} from "../../../lib/server.js"; +import {getSslCertificate} from "../../../lib/sslUtil.js"; +import {graphFromPackageDependencies} from "@ui5/project/graph"; +import path from "node:path"; let request; -let serve; +let server; // Start server before running tests test.before(async (t) => { process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = "0"; - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); const sslPath = path.join(process.cwd(), "./test/fixtures/ssl/"); - const {key, cert} = await ui5Server.sslUtil.getSslCertificate( + const {key, cert} = await getSslCertificate( path.join(sslPath, "server.key"), path.join(sslPath, "server.crt"), ); - serve = await server.serve(graph, { + server = await serve(graph, { port: 3366, h2: true, key, @@ -31,7 +31,7 @@ test.before(async (t) => { test.after(() => { return new Promise((resolve, reject) => { - serve.close((error) => { + server.close((error) => { if (error) { reject(error); } else { diff --git a/test/lib/server/main.js b/test/lib/server/main.js index 6dcac237..35d0ead4 100644 --- a/test/lib/server/main.js +++ b/test/lib/server/main.js @@ -1,19 +1,18 @@ -const test = require("ava"); -const supertest = require("supertest"); -const ui5Server = require("../../../"); -const server = ui5Server.server; -const generateProjectGraph = require("@ui5/project").generateProjectGraph.usingNodePackageDependencies; +import test from "ava"; +import supertest from "supertest"; +import {serve} from "../../../lib/server.js"; +import {graphFromPackageDependencies} from "@ui5/project/graph"; let request; -let serve; +let server; // Start server before running tests test.before(async (t) => { - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - serve = await server.serve(graph, { + server = await serve(graph, { port: 3333 }); request = supertest("http://localhost:3333"); @@ -21,7 +20,7 @@ test.before(async (t) => { test.after.always(() => { return new Promise((resolve, reject) => { - serve.close((error) => { + server.close((error) => { if (error) { reject(error); } else { @@ -364,11 +363,11 @@ test("Stop server", async (t) => { const port = 3350; const request = supertest(`http://localhost:${port}`); - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const serveResult = await server.serve(graph, { + const serveResult = await serve(graph, { port: port }); @@ -471,11 +470,11 @@ test("CSP (sap policies)", async (t) => { const port = 3400; const request = supertest(`http://localhost:${port}`); - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const serveResult = await server.serve(graph, { + const serveResult = await serve(graph, { port, sendSAPTargetCSP: true, simpleIndex: false @@ -568,11 +567,11 @@ test("CSP serveCSPReports", async (t) => { const port = 3450; const request = supertest(`http://localhost:${port}`); - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const serveResult = await server.serve(graph, { + const serveResult = await serve(graph, { port, serveCSPReports: true, simpleIndex: false @@ -622,11 +621,11 @@ test("CSP with ignore paths", async (t) => { const port = 3500; const request = supertest(`http://localhost:${port}`); - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const serveResult = await server.serve(graph, { + const serveResult = await serve(graph, { port, serveCSPReports: true, sendSAPTargetCSP: true, diff --git a/test/lib/server/middleware/MiddlewareManager.js b/test/lib/server/middleware/MiddlewareManager.js index baae86a5..806d908a 100644 --- a/test/lib/server/middleware/MiddlewareManager.js +++ b/test/lib/server/middleware/MiddlewareManager.js @@ -1,7 +1,7 @@ -const test = require("ava"); -const sinon = require("sinon"); -const MiddlewareManager = require("../../../../lib/middleware/MiddlewareManager"); -const middlewareRepository = require("../../../../lib/middleware/middlewareRepository"); +import test from "ava"; +import sinon from "sinon"; +import MiddlewareManager from "../../../../lib/middleware/MiddlewareManager.js"; +import middlewareRepository from "../../../../lib/middleware/middlewareRepository.js"; test("Missing parameters", (t) => { const err = t.throws(() => { @@ -213,7 +213,7 @@ test("addMiddleware: Add middleware with invalid afterMiddleware parameter", asy "No new middleware got added to middleware execution order array"); }); -test("addMiddleware: Add middleware with rapperCallback parameter", async (t) => { +test("addMiddleware: Add middleware with wrapperCallback parameter", async (t) => { const middlewareManager = new MiddlewareManager({ graph: {}, resources: { @@ -222,7 +222,7 @@ test("addMiddleware: Add middleware with rapperCallback parameter", async (t) => dependencies: "ponies" } }); - const serveIndexMiddlewareInfo = middlewareRepository.getMiddleware("serveIndex"); + const serveIndexMiddlewareInfo = await middlewareRepository.getMiddleware("serveIndex"); const moduleStub = sinon.stub().returns("🍅"); const wrapperCallbackStub = sinon.stub().returns(moduleStub); @@ -527,7 +527,7 @@ test("addCustomMiddleware", async (t) => { const middlewareUtil = { getInterface: sinon.stub().returns("interfacedMiddlewareUtil") }; - const res = customMiddleware({ + const res = await customMiddleware({ resources: "resources", middlewareUtil }); diff --git a/test/lib/server/middleware/MiddlewareUtil.js b/test/lib/server/middleware/MiddlewareUtil.js index b2954391..ca89355b 100644 --- a/test/lib/server/middleware/MiddlewareUtil.js +++ b/test/lib/server/middleware/MiddlewareUtil.js @@ -1,17 +1,19 @@ -const test = require("ava"); -const sinon = require("sinon"); -const mock = require("mock-require"); -const MiddlewareUtil = require("../../../../lib/middleware/MiddlewareUtil"); +import test from "ava"; +import sinon from "sinon"; +import esmock from "esmock"; +import mime from "mime-types"; +import MiddlewareUtil from "../../../../lib/middleware/MiddlewareUtil.js"; test.afterEach.always((t) => { sinon.restore(); - mock.stopAll(); }); -test.serial("getPathname", (t) => { - const middlewareUtil = new MiddlewareUtil(); +test.serial("getPathname", async (t) => { const parseurlStub = sinon.stub().returns({pathname: "path%20name"}); - mock("parseurl", parseurlStub); + const MiddlewareUtil = await esmock("../../../../lib/middleware/MiddlewareUtil.js", { + parseurl: parseurlStub + }); + const middlewareUtil = new MiddlewareUtil(); const pathname = middlewareUtil.getPathname("req"); t.is(parseurlStub.callCount, 1, "parseurl got called once"); @@ -21,7 +23,6 @@ test.serial("getPathname", (t) => { test.serial("getMimeInfo", (t) => { const middlewareUtil = new MiddlewareUtil(); - const mime = require("mime-types"); const lookupStub = sinon.stub(mime, "lookup").returns("mytype"); const charsetStub = sinon.stub(mime, "charset").returns("mycharset"); @@ -40,7 +41,6 @@ test.serial("getMimeInfo", (t) => { test.serial("getMimeInfo: unknown type", (t) => { const middlewareUtil = new MiddlewareUtil(); - const mime = require("mime-types"); const lookupStub = sinon.stub(mime, "lookup"); const charsetStub = sinon.stub(mime, "charset"); diff --git a/test/lib/server/middleware/csp.js b/test/lib/server/middleware/csp.js index 03917d50..c184dbe6 100644 --- a/test/lib/server/middleware/csp.js +++ b/test/lib/server/middleware/csp.js @@ -1,7 +1,6 @@ -const test = require("ava"); -const sinon = require("sinon"); - -const cspMiddleware = require("../../../../lib/middleware/csp"); +import test from "ava"; +import sinon from "sinon"; +import cspMiddleware from "../../../../lib/middleware/csp.js"; test("OPTIONS request", async (t) => { diff --git a/test/lib/server/middleware/middlewareRepository.js b/test/lib/server/middleware/middlewareRepository.js index 2f08534d..d1c0f78a 100644 --- a/test/lib/server/middleware/middlewareRepository.js +++ b/test/lib/server/middleware/middlewareRepository.js @@ -1,18 +1,16 @@ -const test = require("ava"); -const middlewareRepository = require("../../../../lib/middleware/middlewareRepository"); +import test from "ava"; +import middlewareRepository from "../../../../lib/middleware/middlewareRepository.js"; +import cspModule from "../../../../lib/middleware/csp.js"; -test("getMiddleware", (t) => { - const cspModule = require("../../../../lib/middleware/csp"); - const res = middlewareRepository.getMiddleware("csp"); +test("getMiddleware", async (t) => { + const res = await middlewareRepository.getMiddleware("csp"); t.deepEqual(res, { middleware: cspModule }, "Returned correct middleware module"); }); -test("getMiddleware: Unknown middleware", (t) => { - const err = t.throws(() => { - middlewareRepository.getMiddleware("🐬"); - }); +test("getMiddleware: Unknown middleware", async (t) => { + const err = await t.throwsAsync(middlewareRepository.getMiddleware("🐬")); t.is(err.message, "middlewareRepository: Unknown Middleware 🐬", "Threw error with correct message"); }); diff --git a/test/lib/server/middleware/nonReadRequests.js b/test/lib/server/middleware/nonReadRequests.js index bef04745..25ed09ea 100644 --- a/test/lib/server/middleware/nonReadRequests.js +++ b/test/lib/server/middleware/nonReadRequests.js @@ -1,5 +1,5 @@ -const test = require("ava"); -const nonReadRequestsMiddleware = require("../../../../lib/middleware/nonReadRequests"); +import test from "ava"; +import nonReadRequestsMiddleware from "../../../../lib/middleware/nonReadRequests.js"; test("Read requests", (t) => { t.plan(3); diff --git a/test/lib/server/middleware/serveIndex.js b/test/lib/server/middleware/serveIndex.js index cffca6d9..a783fddb 100644 --- a/test/lib/server/middleware/serveIndex.js +++ b/test/lib/server/middleware/serveIndex.js @@ -1,10 +1,10 @@ -const test = require("ava"); -const resourceFactory = require("@ui5/fs").resourceFactory; -const MiddlewareUtil = require("../../../../lib/middleware/MiddlewareUtil"); +import test from "ava"; +import * as resourceFactory from "@ui5/fs/resourceFactory"; +import MiddlewareUtil from "../../../../lib/middleware/MiddlewareUtil.js"; +import serveIndexMiddleware from "../../../../lib/middleware/serveIndex.js"; test.serial("serveIndex default", async (t) => { t.plan(4); - const serveIndexMiddleware = require("../../../../lib/middleware/serveIndex"); const writeResource = function(writer, path, buffer) { const statInfo = { mtime: 0, @@ -71,7 +71,6 @@ test.serial("serveIndex default", async (t) => { test.serial("serveIndex no hidden", async (t) => { t.plan(4); - const serveIndexMiddleware = require("../../../../lib/middleware/serveIndex"); const writeResource = function(writer, path, buffer) { const statInfo = { mtime: 0, @@ -141,7 +140,6 @@ test.serial("serveIndex no hidden", async (t) => { test.serial("serveIndex no details", async (t) => { t.plan(4); - const serveIndexMiddleware = require("../../../../lib/middleware/serveIndex"); const writeResource = function(writer, path, buffer) { const statInfo = { mtime: 0, diff --git a/test/lib/server/middleware/serveResources.js b/test/lib/server/middleware/serveResources.js index 5fe52a28..0a88155b 100644 --- a/test/lib/server/middleware/serveResources.js +++ b/test/lib/server/middleware/serveResources.js @@ -1,14 +1,12 @@ -/* eslint-disable ava/no-unknown-modifiers */ -/* Test modifier `cb` was deprecated with ava version -3 and removed with ava version 4. Therefore, tests using `cb` has to be rewritten, when upgrade to ava version 4 */ - -const test = require("ava"); -const sinon = require("sinon"); -const mock = require("mock-require"); -const {Readable, Writable} = require("stream"); -const resourceFactory = require("@ui5/fs").resourceFactory; -const serveResourcesMiddleware = require("../../../../lib/middleware/serveResources"); -const MiddlewareUtil = require("../../../../lib/middleware/MiddlewareUtil"); +import test from "ava"; + +import sinon from "sinon"; +import esmock from "esmock"; +import {Readable, Writable} from "node:stream"; +import * as resourceFactory from "@ui5/fs/resourceFactory"; +import serveResourcesMiddleware from "../../../../lib/middleware/serveResources.js"; +import MiddlewareUtil from "../../../../lib/middleware/MiddlewareUtil.js"; + const writeResource = function(writer, path, size, stringContent, stringEncoding, project) { const statInfo = { ino: 0, @@ -44,8 +42,10 @@ const fakeResponse = { }; test.afterEach.always((t) => { - mock.stopAll(); sinon.restore(); + if (t.context.serveResourcesMiddlewareWithMock) { + esmock.purge(t.context.serveResourcesMiddlewareWithMock); + } }); test.serial("Check if properties file is served properly", async (t) => { @@ -242,15 +242,19 @@ fame=stra\\u00dfe`); t.is(setHeaderSpy.getCall(0).lastArg, "application/octet-stream"); }); -test.serial("Check verbose logging", (t) => { - const logger = require("@ui5/logger"); +test.serial("Check verbose logging", async (t) => { const verboseLogStub = sinon.stub(); - const myLoggerInstance = { + t.context.loggerStub = { verbose: verboseLogStub, isLevelEnabled: () => true }; - sinon.stub(logger, "getLogger").returns(myLoggerInstance); - const serveResourcesMiddlewareWithMock = mock.reRequire("../../../../lib/middleware/serveResources"); + + const serveResourcesMiddlewareWithMock = t.context.serveResourcesMiddlewareWithMock = + await esmock.p("../../../../lib/middleware/serveResources", { + "@ui5/logger": { + getLogger: sinon.stub().returns(t.context.loggerStub) + } + }); const resource = { @@ -329,7 +333,7 @@ test.serial("Check verbose logging", (t) => { }); }); -test.serial.cb("Check if version replacement is done", (t) => { +test.serial("Check if version replacement is done", (t) => { const input = "foo ${version} bar"; const expected = "foo 1.0.0 bar"; @@ -383,26 +387,25 @@ test.serial.cb("Check if version replacement is done", (t) => { buffers.push(chunk); callback(); }; - res.end = function() { - t.is(Buffer.concat(buffers).toString(), expected); - t.end(); - }; - middleware(req, res, function(err) { - if (err) { - t.fail("Unexpected error passed to next function: " + err); - } else { - t.fail("Unexpected call of next function"); - } - t.end(); + return new Promise((resolve) => { + res.end = function() { + t.is(Buffer.concat(buffers).toString(), expected); + resolve(); + }; + + middleware(req, res, function(err) { + if (err) { + t.fail("Unexpected error passed to next function: " + err); + } else { + t.fail("Unexpected call of next function"); + } + resolve(); + }); }); }); -// Skip test in Node v8 as unicode handling of streams seems to be broken -test.serial[ - // eslint-disable-next-line ava/no-unknown-modifiers - process.version.startsWith("v8.") ? "skip" : "cb" -]("Check if utf8 characters are correctly processed in version replacement", (t) => { +test.serial("Check if utf8 characters are correctly processed in version replacement", (t) => { const utf8string = "Κυ"; const expected = utf8string; @@ -463,17 +466,20 @@ test.serial[ buffers.push(chunk); callback(); }; - res.end = function() { - t.is(Buffer.concat(buffers).toString(), expected); - t.end(); - }; - middleware(req, res, function(err) { - if (err) { - t.fail("Unexpected error passed to next function: " + err); - } else { - t.fail("Unexpected call of next function"); - } - t.end(); + return new Promise((resolve) => { + res.end = function() { + t.is(Buffer.concat(buffers).toString(), expected); + resolve(); + }; + + middleware(req, res, function(err) { + if (err) { + t.fail("Unexpected error passed to next function: " + err); + } else { + t.fail("Unexpected call of next function"); + } + resolve(); + }); }); }); diff --git a/test/lib/server/middleware/serveThemes.js b/test/lib/server/middleware/serveThemes.js index fa0218b2..a58ddb64 100644 --- a/test/lib/server/middleware/serveThemes.js +++ b/test/lib/server/middleware/serveThemes.js @@ -1,22 +1,19 @@ -/* eslint-disable ava/no-unknown-modifiers */ -/* Test modifier `cb` was deprecated with ava version -3 and removed with ava version 4. Therefore, tests using `cb` has to be rewritten, when upgrade to ava version 4 */ +import test from "ava"; -const test = require("ava"); -const sinon = require("sinon"); -const mock = require("mock-require"); +import sinon from "sinon"; +import esmock from "esmock"; -const ThemeBuilder = require("@ui5/builder").processors.themeBuilder.ThemeBuilder; -const MiddlewareUtil = require("../../../../lib/middleware/MiddlewareUtil"); +import {ThemeBuilder} from "@ui5/builder/processors/themeBuilder"; +import MiddlewareUtil from "../../../../lib/middleware/MiddlewareUtil.js"; -const failOnNext= function(t) { +const failOnNext = function(t, reject) { return function(err) { if (err) { t.fail("Unexpected error passed to next function: " + err); } else { t.fail("Unexpected call of next function"); } - t.end(); + reject(); }; }; @@ -79,27 +76,12 @@ const stubThemeBuild = function(resources) { return build; }; -const createMiddleware = function() { - const resources = { - all: { - byPath: sinon.stub() - } - }; - return { - middleware: require("../../../../lib/middleware/serveThemes")({ - middlewareUtil: new MiddlewareUtil(), - resources - }), - byPath: resources.all.byPath - }; -}; - const verifyThemeRequest = function(t, filename) { const resources = createResources(); stubThemeBuild(resources); - const {middleware, byPath} = createMiddleware(); + const {middleware, byPath} = t.context; byPath.withArgs("/resources/sap/ui/test/themes/base/library.source.less") .resolves(resources["library.source.less"]); @@ -108,179 +90,205 @@ const verifyThemeRequest = function(t, filename) { headers: {} }; - const res = { - setHeader: sinon.stub(), - getHeader: sinon.stub(), - end: function(responseText) { - t.is(responseText, `/* ${filename} */`); - if (filename.endsWith(".css")) { - t.deepEqual(res.setHeader.getCall(0).args, ["Content-Type", "text/css; charset=UTF-8"]); - } else if (filename.endsWith(".less")) { - t.deepEqual(res.setHeader.getCall(0).args, ["Content-Type", "text/less; charset=UTF-8"]); - } else if (filename.endsWith(".json")) { - t.deepEqual(res.setHeader.getCall(0).args, ["Content-Type", "application/json; charset=UTF-8"]); - } else { - t.fail("Invalid file extension provided to 'verifyThemeRequest'"); + return new Promise((resolve, reject) => { + const res = { + setHeader: sinon.stub(), + getHeader: sinon.stub(), + end: function(responseText) { + t.is(responseText, `/* ${filename} */`); + if (filename.endsWith(".css")) { + t.deepEqual(res.setHeader.getCall(0).args, ["Content-Type", "text/css; charset=UTF-8"]); + } else if (filename.endsWith(".less")) { + t.deepEqual(res.setHeader.getCall(0).args, ["Content-Type", "text/less; charset=UTF-8"]); + } else if (filename.endsWith(".json")) { + t.deepEqual(res.setHeader.getCall(0).args, ["Content-Type", "application/json; charset=UTF-8"]); + } else { + t.fail("Invalid file extension provided to 'verifyThemeRequest'"); + } + resolve(); } - t.end(); + }; + + middleware(req, res, failOnNext(t, reject)); + }); +}; + +test.beforeEach(async (t) => { + t.context.etag = sinon.stub(); + t.context.fresh = sinon.stub(); + + t.context.serveThemes = await esmock("../../../../lib/middleware/serveThemes.js", { + "etag": t.context.etag, + "fresh": t.context.fresh + }); + + const resources = { + all: { + byPath: sinon.stub() } }; + t.context.byPath = resources.all.byPath; - middleware(req, res, failOnNext(t)); -}; + t.context.middleware = t.context.serveThemes({ + middlewareUtil: new MiddlewareUtil(), + resources + }); +}); test.afterEach.always((t) => { sinon.restore(); - mock.stopAll(); - mock.reRequire("../../../../lib/middleware/serveThemes"); }); -test.serial.cb("Serving library.css", (t) => { - verifyThemeRequest(t, "library.css"); +test.serial("Serving library.css", (t) => { + return verifyThemeRequest(t, "library.css"); }); -test.serial.cb("Serving library-RTL.css", (t) => { - verifyThemeRequest(t, "library-RTL.css"); +test.serial("Serving library-RTL.css", (t) => { + return verifyThemeRequest(t, "library-RTL.css"); }); -test.serial.cb("Serving library-parameters.json", (t) => { - verifyThemeRequest(t, "library-parameters.json"); +test.serial("Serving library-parameters.json", (t) => { + return verifyThemeRequest(t, "library-parameters.json"); }); -test.serial.cb("Serving css_variables.source.less", (t) => { - verifyThemeRequest(t, "css_variables.source.less"); +test.serial("Serving css_variables.source.less", (t) => { + return verifyThemeRequest(t, "css_variables.source.less"); }); -test.serial.cb("Serving css_variables.css", (t) => { - verifyThemeRequest(t, "css_variables.css"); +test.serial("Serving css_variables.css", (t) => { + return verifyThemeRequest(t, "css_variables.css"); }); -test.serial.cb("Serving library_skeleton.css", (t) => { - verifyThemeRequest(t, "library_skeleton.css"); +test.serial("Serving library_skeleton.css", (t) => { + return verifyThemeRequest(t, "library_skeleton.css"); }); -test.serial.cb("Serving library_skeleton-RTL.css", (t) => { - verifyThemeRequest(t, "library_skeleton-RTL.css"); +test.serial("Serving library_skeleton-RTL.css", (t) => { + return verifyThemeRequest(t, "library_skeleton-RTL.css"); }); -test.serial.cb("Clear cache to rebuild themes when CSS Variables file is requested", (t) => { +test.serial("Clear cache to rebuild themes when CSS Variables file is requested", (t) => { const resources = createResources(); const build = stubThemeBuild(resources); const clearCache = sinon.stub(ThemeBuilder.prototype, "clearCache"); - const {middleware, byPath} = createMiddleware(); + const {middleware, byPath} = t.context; byPath.withArgs("/resources/sap/ui/test/themes/base/library.source.less") .resolves(resources["library.source.less"]); - function firstRequest() { - const req = { - url: "/resources/sap/ui/test/themes/base/library.css", - headers: {} - }; + return new Promise((resolve, reject) => { + function firstRequest() { + const req = { + url: "/resources/sap/ui/test/themes/base/library.css", + headers: {} + }; - const res = { - setHeader: sinon.stub(), - getHeader: sinon.stub(), - end: function() { - t.deepEqual(build.getCall(0).args, [[resources["library.source.less"]], {}], - "Build should be called without options"); + const res = { + setHeader: sinon.stub(), + getHeader: sinon.stub(), + end: function() { + t.deepEqual(build.getCall(0).args, [[resources["library.source.less"]], {}], + "Build should be called without options"); - t.false(clearCache.called, "Clear cache should not be called"); + t.false(clearCache.called, "Clear cache should not be called"); - // Trigger next request - secondRequest(); - } - }; + // Trigger next request + secondRequest(); + } + }; - middleware(req, res, failOnNext(t)); - } + middleware(req, res, failOnNext(t)); + } - function secondRequest() { - const req = { - url: "/resources/sap/ui/test/themes/base/css_variables.css", - headers: {} - }; + function secondRequest() { + const req = { + url: "/resources/sap/ui/test/themes/base/css_variables.css", + headers: {} + }; - const res = { - setHeader: sinon.stub(), - getHeader: sinon.stub(), - end: function() { - t.deepEqual(build.getCall(1).args, [[resources["library.source.less"]], {cssVariables: true}], - "Build should be called with cssVariables option"); + const res = { + setHeader: sinon.stub(), + getHeader: sinon.stub(), + end: function() { + t.deepEqual(build.getCall(1).args, [[resources["library.source.less"]], {cssVariables: true}], + "Build should be called with cssVariables option"); - t.true(clearCache.called, "Clear cache should be called"); + t.true(clearCache.called, "Clear cache should be called"); - t.end(); - } - }; + resolve(); + } + }; - middleware(req, res, failOnNext(t)); - } + middleware(req, res, failOnNext(t, reject)); + } - firstRequest(); + firstRequest(); + }); }); -test.serial.cb("Clear cache only once after enabling CSS Variables", (t) => { +test.serial("Clear cache only once after enabling CSS Variables", (t) => { const resources = createResources(); const build = stubThemeBuild(resources); const clearCache = sinon.stub(ThemeBuilder.prototype, "clearCache"); - const {middleware, byPath} = createMiddleware(); + const {middleware, byPath} = t.context; byPath.withArgs("/resources/sap/ui/test/themes/base/library.source.less") .resolves(resources["library.source.less"]); - function firstRequest() { - const req = { - url: "/resources/sap/ui/test/themes/base/css_variables.css", - headers: {} - }; + return new Promise((resolve, reject) => { + function firstRequest() { + const req = { + url: "/resources/sap/ui/test/themes/base/css_variables.css", + headers: {} + }; - const res = { - setHeader: sinon.stub(), - getHeader: sinon.stub(), - end: function() { - t.deepEqual(build.getCall(0).args, [[resources["library.source.less"]], {cssVariables: true}], - "Build should be called with cssVariables option"); + const res = { + setHeader: sinon.stub(), + getHeader: sinon.stub(), + end: function() { + t.deepEqual(build.getCall(0).args, [[resources["library.source.less"]], {cssVariables: true}], + "Build should be called with cssVariables option"); - t.true(clearCache.calledOnce, "Clear cache should be called once"); + t.true(clearCache.calledOnce, "Clear cache should be called once"); - // Trigger next request - secondRequest(); - } - }; + // Trigger next request + secondRequest(); + } + }; - middleware(req, res, failOnNext(t)); - } + middleware(req, res, failOnNext(t, reject)); + } - function secondRequest() { - const req = { - url: "/resources/sap/ui/test/themes/base/library_skeleton.css", - headers: {} - }; + function secondRequest() { + const req = { + url: "/resources/sap/ui/test/themes/base/library_skeleton.css", + headers: {} + }; - const res = { - setHeader: sinon.stub(), - getHeader: sinon.stub(), - end: function() { - t.deepEqual(build.getCall(1).args, [[resources["library.source.less"]], {cssVariables: true}], - "Build should be called with cssVariables option"); + const res = { + setHeader: sinon.stub(), + getHeader: sinon.stub(), + end: function() { + t.deepEqual(build.getCall(1).args, [[resources["library.source.less"]], {cssVariables: true}], + "Build should be called with cssVariables option"); - t.true(clearCache.calledOnce, "Clear cache should still only be called once"); + t.true(clearCache.calledOnce, "Clear cache should still only be called once"); - t.end(); - } - }; + resolve(); + } + }; - middleware(req, res, failOnNext(t)); - } + middleware(req, res, failOnNext(t, reject)); + } - firstRequest(); + firstRequest(); + }); }); -test.serial.cb("Do not handle non-theme requests", (t) => { - const {middleware} = createMiddleware(); +test.serial("Do not handle non-theme requests", (t) => { + const {middleware} = t.context; const req = { url: "/resources/sap/ui/test/test.js" @@ -288,18 +296,20 @@ test.serial.cb("Do not handle non-theme requests", (t) => { const res = {}; - middleware(req, res, function() { - t.pass("Next middleware is called for non-theme requests"); - t.end(); + return new Promise((resolve) => { + middleware(req, res, function() { + t.pass("Next middleware is called for non-theme requests"); + resolve(); + }); }); }); -test.serial.cb("Do not handle requests without an existing library.source.less file", (t) => { +test.serial("Do not handle requests without an existing library.source.less file", (t) => { const resources = createResources(); stubThemeBuild(resources); - const {middleware, byPath} = createMiddleware(); + const {middleware, byPath} = t.context; byPath.withArgs("/resources/sap/ui/test/themes/base/library.source.less").resolves(null); const req = { @@ -309,19 +319,22 @@ test.serial.cb("Do not handle requests without an existing library.source.less f const res = {}; - middleware(req, res, function() { - t.pass("Next middleware is called when no library.source.less file is found"); - t.end(); + return new Promise((resolve) => { + middleware(req, res, function() { + t.pass("Next middleware is called when no library.source.less file is found"); + resolve(); + }); }); }); -test.serial.cb("Only send 304 response in case the client has cached the response already", (t) => { +test.serial("Only send 304 response in case the client has cached the response already", (t) => { + const {middleware, byPath, etag, fresh} = t.context; + const ETag = `"fake-etag"`; - mock("etag", function() { - return ETag; - }); - mock("fresh", function(reqHeaders, resHeaders) { + etag.returns(ETag); + + fresh.callsFake(function(reqHeaders, resHeaders) { t.deepEqual(reqHeaders, { "If-None-Match": ETag }); @@ -330,13 +343,11 @@ test.serial.cb("Only send 304 response in case the client has cached the respons }); return true; }); - mock.reRequire("../../../../lib/middleware/serveThemes"); const resources = createResources(); stubThemeBuild(resources); - const {middleware, byPath} = createMiddleware(); byPath.withArgs("/resources/sap/ui/test/themes/base/library.source.less") .resolves(resources["library.source.less"]); @@ -347,22 +358,24 @@ test.serial.cb("Only send 304 response in case the client has cached the respons } }; - const res = { - setHeader: sinon.stub(), - getHeader: sinon.stub().withArgs("ETag").returns(ETag), - end: function(responseText) { - t.is(responseText, undefined); - t.is(res.statusCode, 304); - t.deepEqual(res.setHeader.getCall(1).args, ["ETag", ETag]); - t.end(); - } - }; + return new Promise((resolve, reject) => { + const res = { + setHeader: sinon.stub(), + getHeader: sinon.stub().withArgs("ETag").returns(ETag), + end: function(responseText) { + t.is(responseText, undefined); + t.is(res.statusCode, 304); + t.deepEqual(res.setHeader.getCall(1).args, ["ETag", ETag]); + resolve(); + } + }; - middleware(req, res, failOnNext(t)); + middleware(req, res, failOnNext(t, reject)); + }); }); // This could only happen when the theme build processor does not return an expected resource -test.serial.cb("Error handling: Request resource that ThemeBuild doesn't return", (t) => { +test.serial("Error handling: Request resource that ThemeBuild doesn't return", (t) => { const resources = createResources(); // Adopt path of library.css so that it can't be found from the theme build results @@ -370,7 +383,7 @@ test.serial.cb("Error handling: Request resource that ThemeBuild doesn't return" stubThemeBuild(resources); - const {middleware, byPath} = createMiddleware(); + const {middleware, byPath} = t.context; byPath.withArgs("/resources/sap/ui/test/themes/base/library.source.less") .resolves(resources["library.source.less"]); @@ -381,16 +394,19 @@ test.serial.cb("Error handling: Request resource that ThemeBuild doesn't return" const res = {}; - middleware(req, res, function(err) { - t.is(err.message, `Theme Build did not return requested file "/resources/sap/ui/test/themes/base/library.css"`); - t.end(); + return new Promise((resolve, reject) => { + middleware(req, res, function(err) { + t.is(err.message, + `Theme Build did not return requested file "/resources/sap/ui/test/themes/base/library.css"`); + resolve(); + }); }); }); -test.serial.cb("Error handling: Unexpected exception within middleware should call next with error", (t) => { +test.serial("Error handling: Unexpected exception within middleware should call next with error", (t) => { const error = new Error("Unexpected Error"); - const {middleware, byPath} = createMiddleware(); + const {middleware, byPath} = t.context; byPath.rejects(error); const req = { @@ -400,9 +416,11 @@ test.serial.cb("Error handling: Unexpected exception within middleware should ca const res = {}; - middleware(req, res, function(err) { - t.is(err, error); - t.end(); + return new Promise((resolve, reject) => { + middleware(req, res, function(err) { + t.is(err, error); + resolve(); + }); }); }); @@ -411,7 +429,7 @@ test.serial("Multiple parallel requests to the same path should only result in o const build = stubThemeBuild(resources); - const {middleware, byPath} = createMiddleware(); + const {middleware, byPath} = t.context; byPath.withArgs("/resources/sap/ui/test/themes/base/library.source.less") .resolves(resources["library.source.less"]); byPath.withArgs("/resources/sap/ui/test2/themes/base/library.source.less") diff --git a/test/lib/server/middleware/testRunner.js b/test/lib/server/middleware/testRunner.js index 0899a221..c8621fbf 100644 --- a/test/lib/server/middleware/testRunner.js +++ b/test/lib/server/middleware/testRunner.js @@ -1,22 +1,22 @@ -const test = require("ava"); -const sinon = require("sinon"); -const mock = require("mock-require"); -const path = require("path"); -const fs = require("graceful-fs"); +import test from "ava"; +import sinon from "sinon"; +import esmock from "esmock"; +import path from "node:path"; +import fs from "graceful-fs"; +import {fileURLToPath} from "node:url"; let testRunnerMiddleware; -const baseResourcePath = path.join(__dirname, "..", "..", "..", "..", "lib", "middleware", "testRunner"); +const baseResourcePath = fileURLToPath(new URL("../../../../lib/middleware/testRunner", import.meta.url)); -test.beforeEach((t) => { +test.beforeEach(async (t) => { t.context.readFileStub = sinon.stub(fs, "readFile").yieldsAsync(null, "👮"); // Re-require to ensure that mocked modules are used - testRunnerMiddleware = mock.reRequire("../../../../lib/middleware/testRunner"); + testRunnerMiddleware = await esmock("../../../../lib/middleware/testRunner.js"); }); test.afterEach.always(() => { sinon.restore(); - mock.stopAll(); }); function callMiddleware(reqPath) { diff --git a/test/lib/server/middleware/versionInfo.js b/test/lib/server/middleware/versionInfo.js index ac3723f0..b25623d9 100644 --- a/test/lib/server/middleware/versionInfo.js +++ b/test/lib/server/middleware/versionInfo.js @@ -1,8 +1,7 @@ -const test = require("ava"); -const sinon = require("sinon"); -const mock = require("mock-require"); -const resourceFactory = require("@ui5/fs").resourceFactory; -let versionInfoMiddleware = require("../../../../lib/middleware/versionInfo"); +import test from "ava"; +import sinon from "sinon"; +import esmock from "esmock"; +import * as resourceFactory from "@ui5/fs/resourceFactory"; function createWorkspace() { return resourceFactory.createAdapter({ @@ -36,8 +35,8 @@ const createProjectMetadata = (names, version) => { }; /** - * @param {module:@ui5/fs.DuplexCollection} dependencies - * @param {module:@ui5/fs.resourceFactory} resourceFactory + * @param {module:@ui5/fs/DuplexCollection} dependencies + * @param {module:@ui5/fs/resourceFactory} resourceFactory * @param {string[]} names e.g. ["lib", "a"] * @param {string} version Project version to write into to the .library * @returns {Promise} @@ -62,8 +61,8 @@ async function createDotLibrary(dependencies, resourceFactory, names, version) { /** * - * @param {module:@ui5/fs.DuplexCollection} dependencies - * @param {module:@ui5/fs.resourceFactory} resourceFactory + * @param {module:@ui5/fs/DuplexCollection} dependencies + * @param {module:@ui5/fs/resourceFactory} resourceFactory * @param {string[]} names e.g. ["lib", "a"] * @param {object[]} deps * @param {string[]} [embeds] @@ -108,8 +107,8 @@ const createManifestResource = async (dependencies, resourceFactory, names, deps /** * - * @param {module:@ui5/fs.DuplexCollection} dependencies - * @param {module:@ui5/fs.resourceFactory} resourceFactory + * @param {module:@ui5/fs/DuplexCollection} dependencies + * @param {module:@ui5/fs/resourceFactory} resourceFactory * @param {string[]} names e.g. ["lib", "a"] * @param {object[]} deps * @param {string[]} [embeds] @@ -147,12 +146,13 @@ async function assertCreatedVersionInfo(t, expectedVersionInfo, versionInfoConte } test.beforeEach((t) => { - versionInfoMiddleware = mock.reRequire("../../../../lib/middleware/versionInfo"); + t.context.createVersionInfoMiddleware = async (mocks = {}) => { + return esmock("../../../../lib/middleware/versionInfo.js", mocks); + }; }); test.afterEach.always((t) => { sinon.restore(); - mock.stopAll(); }); test.serial("test all inner API calls within middleware", async (t) => { @@ -163,13 +163,11 @@ test.serial("test all inner API calls within middleware", async (t) => { string: "stubbed version info" }); const versionInfoGeneratorStub = sinon.stub().returns([dummyVersionInfo]); - mock("@ui5/builder", { - processors: { - manifestCreator: manifestCreatorStub, - versionInfoGenerator: versionInfoGeneratorStub - } + + const versionInfoMiddleware = await t.context.createVersionInfoMiddleware({ + "@ui5/builder/processors/manifestCreator": manifestCreatorStub, + "@ui5/builder/processors/versionInfoGenerator": versionInfoGeneratorStub, }); - versionInfoMiddleware = mock.reRequire("../../../../lib/middleware/versionInfo"); const dependenciesA = createDepWorkspace(["lib", "a"], {virBasePath: "/"}); const dependenciesB = createDepWorkspace(["lib", "b"], {virBasePath: "/"}); @@ -316,6 +314,8 @@ test.serial("integration: Library with dependencies and subcomponent complex sce const graph = { getRoot: () => createProjectMetadata(["myname"], "1.33.7") }; + + const versionInfoMiddleware = await t.context.createVersionInfoMiddleware(); const middleware = versionInfoMiddleware({resources, graph}); const expectedVersionInfo = { diff --git a/test/lib/server/ports.js b/test/lib/server/ports.js index a59666d3..a72217b5 100644 --- a/test/lib/server/ports.js +++ b/test/lib/server/ports.js @@ -1,39 +1,20 @@ -const test = require("ava"); -const supertest = require("supertest"); -const ui5Server = require("../../../"); -const server = ui5Server.server; -const http = require("http"); -const portscanner = require("portscanner"); -const sinon = require("sinon"); -const generateProjectGraph = require("@ui5/project").generateProjectGraph.usingNodePackageDependencies; - -let serve; - -// Start server before running tests -test.before(async (t) => { - const graph = await generateProjectGraph({ - cwd: "./test/fixtures/application.a" - }); - - serve = await server.serve(graph, { - port: 3335 - }); +import test from "ava"; +import supertest from "supertest"; +import {serve} from "../../../lib/server.js"; +import http from "node:http"; +import portscanner from "portscanner"; +import sinonGlobal from "sinon"; +import {graphFromPackageDependencies} from "@ui5/project/graph"; + +test.beforeEach((t) => { + t.context.sinon = sinonGlobal.createSandbox(); }); -test.after(() => { - sinon.restore(); - return new Promise((resolve, reject) => { - serve.close((error) => { - if (error) { - reject(error); - } else { - resolve(); - } - }); - }); +test.afterEach.always((t) => { + t.context.sinon.restore(); }); -test("Start server - Port is already taken and an error occurs", async (t) => { +test.serial("Start server - Port is already taken and an error occurs", async (t) => { t.plan(6); const port = 3360; const nodeServer = http.createServer((req, res) => { @@ -47,11 +28,11 @@ test("Start server - Port is already taken and an error occurs", async (t) => { nodeServer.listen(port); }); - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const startServer = server.serve(graph, { + const startServer = serve(graph, { port }); @@ -83,7 +64,7 @@ test("Start server - Port is already taken and an error occurs", async (t) => { ); }); -test("Start server together with node server - Port is already taken and the next one is used", async (t) => { +test.serial("Start server together with node server - Port is already taken and the next one is used", async (t) => { t.plan(2); const port = 3370; const nextFoundPort = 3371; @@ -97,15 +78,15 @@ test("Start server together with node server - Port is already taken and the nex nodeServer.listen(port); }); - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const serve = await server.serve(graph, { + const server = await serve(graph, { port, changePortIfInUse: true }); - t.deepEqual(serve.port, nextFoundPort, "Resolves with correct port"); + t.deepEqual(server.port, nextFoundPort, "Resolves with correct port"); const request = supertest(`http://localhost:${nextFoundPort}`); const result = await request.get("/index.html"); if (result.error) { @@ -113,10 +94,12 @@ test("Start server together with node server - Port is already taken and the nex } t.is(result.statusCode, 200, "Correct HTTP status code"); nodeServer.close(); - serve.close(); + server.close(); }); test.serial("Start server - Port can not be determined and an error occurs", async (t) => { + const {sinon} = t.context; + t.plan(2); const portscannerFake = function(port, portMax, host, callback) { return new Promise((resolve) => { @@ -126,10 +109,10 @@ test.serial("Start server - Port can not be determined and an error occurs", asy }; const portScannerStub = sinon.stub(portscanner, "findAPortNotInUse").callsFake(portscannerFake); - const graph = await generateProjectGraph({ + const graph = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const startServer = server.serve(graph, { + const startServer = serve(graph, { port: 3990, changePortIfInUse: true }); @@ -141,86 +124,88 @@ test.serial("Start server - Port can not be determined and an error occurs", asy }); -test("Start server - Port is already taken and an error occurs because no other port can be determined", async (t) => { - t.plan(6); - const portStart = 4000; - const portRange = 31; - const servers = []; - const serversStart = []; - let port; - let testServer; - for (let i = 0; i < portRange; i++) { - port = portStart + i; - testServer = http.createServer((req, res) => { - res.end(); - }); - servers.push(testServer); - serversStart.push(new Promise((resolve) => { - testServer.on("listening", () => { - resolve(); +test.serial( + "Start server - Port is already taken and an error occurs because no other port can be determined", + async (t) => { + t.plan(6); + const portStart = 4000; + const portRange = 31; + const servers = []; + const serversStart = []; + let port; + let testServer; + for (let i = 0; i < portRange; i++) { + port = portStart + i; + testServer = http.createServer((req, res) => { + res.end(); }); - testServer.listen(port); - })); - } - - await Promise.all(serversStart); - const graph = await generateProjectGraph({ - cwd: "./test/fixtures/application.a" - }); - - const startServer = server.serve(graph, { - port: portStart, - changePortIfInUse: true - }); + servers.push(testServer); + serversStart.push(new Promise((resolve) => { + testServer.on("listening", () => { + resolve(); + }); + testServer.listen(port); + })); + } + + await Promise.all(serversStart); + const graph = await graphFromPackageDependencies({ + cwd: "./test/fixtures/application.a" + }); - const error = await t.throwsAsync(startServer); - for (let i = 0; i < servers.length; i++) { - servers[i].close(); - } - t.is( - error.message, - "EADDRINUSE: Could not find available ports between 4000 and 4030.", - "Server could not start, port is already taken and no other port is used." - ); - t.is( - error.code, - "EADDRINUSE", - "Correct error code" - ); - t.is( - error.errno, - "EADDRINUSE", - "Correct error number" - ); - t.is( - error.address, - "localhost", - "Correct error address" - ); - t.is( - error.port, - 4030, - "Correct error port" - ); -}); + const startServer = serve(graph, { + port: portStart, + changePortIfInUse: true + }); -test("Start server twice - Port is already taken and the next one is used", async (t) => { + const error = await t.throwsAsync(startServer); + for (let i = 0; i < servers.length; i++) { + servers[i].close(); + } + t.is( + error.message, + "EADDRINUSE: Could not find available ports between 4000 and 4030.", + "Server could not start, port is already taken and no other port is used." + ); + t.is( + error.code, + "EADDRINUSE", + "Correct error code" + ); + t.is( + error.errno, + "EADDRINUSE", + "Correct error number" + ); + t.is( + error.address, + "localhost", + "Correct error address" + ); + t.is( + error.port, + 4030, + "Correct error port" + ); + }); + +test.serial("Start server twice - Port is already taken and the next one is used", async (t) => { t.plan(3); const port = 3380; const nextFoundPort = 3381; - const graph1 = await generateProjectGraph({ + const graph1 = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const serveResult1 = await server.serve(graph1, { + const serveResult1 = await serve(graph1, { port: port, changePortIfInUse: true }); t.deepEqual(serveResult1.port, port, "Resolves with correct port"); - const graph2 = await generateProjectGraph({ + const graph2 = await graphFromPackageDependencies({ cwd: "./test/fixtures/application.a" }); - const serveResult2 = await server.serve(graph2, { + const serveResult2 = await serve(graph2, { port: port, changePortIfInUse: true }); diff --git a/test/lib/server/sslUtil.js b/test/lib/server/sslUtil.js index 731e7f86..26a3b560 100644 --- a/test/lib/server/sslUtil.js +++ b/test/lib/server/sslUtil.js @@ -1,10 +1,12 @@ -const path = require("path"); -const fs = require("fs"); -const test = require("ava"); -const {promisify} = require("util"); +import path from "node:path"; +import fs from "node:fs"; +import test from "ava"; +import sinon from "sinon"; +import {promisify} from "node:util"; const stat = promisify(fs.stat); -const mock = require("mock-require"); -const sslUtil = require("../../../").sslUtil; +import _rimraf from "rimraf"; +const rimraf = promisify(_rimraf); +import esmock from "esmock"; function fileExists(filePath) { return stat(filePath).then(() => true, (err) => { @@ -16,8 +18,31 @@ function fileExists(filePath) { }); } +test.beforeEach(async (t) => { + t.context.yesno = sinon.stub(); + t.context.devcertSanscache = sinon.stub(); + t.context.makeDir = sinon.stub().resolves(); + + t.context.createSslUtilMock = async (mockMakeDir = false) => { + const mocks = { + "yesno": t.context.yesno, + "devcert-sanscache": t.context.devcertSanscache + }; + if (mockMakeDir) { + mocks["make-dir"] = t.context.makeDir; + } + t.context.sslUtil = await esmock.p("../../../lib/sslUtil.js", mocks); + return t.context.sslUtil; + }; +}); + +test.afterEach.always((t) => { + esmock.purge(t.context.sslUtil); +}); + test("Get existing certificate", async (t) => { - t.plan(2); + const sslUtil = await esmock("../../../lib/sslUtil.js"); + const sslPath = path.join(process.cwd(), "./test/fixtures/ssl/"); const result = await sslUtil.getSslCertificate( path.join(sslPath, "dummy.key"), @@ -28,11 +53,15 @@ test("Get existing certificate", async (t) => { }); test.serial("Create new certificate and install it", async (t) => { + const {createSslUtilMock, yesno, devcertSanscache} = t.context; + const sslUtil = await createSslUtilMock(); + t.plan(6); + const sslKey = "abcd"; const sslCert = "defg"; - mock("yesno", async function(options) { + yesno.callsFake(async function(options) { t.deepEqual(options, { question: "No SSL certificates found. " + "Do you want to create new SSL certificates and install them locally? (yes)", @@ -42,7 +71,7 @@ test.serial("Create new certificate and install it", async (t) => { return true; }); - mock("devcert-sanscache", function(name) { + devcertSanscache.callsFake(function(name) { t.is(name, "UI5Tooling", "Create certificate for UI5Tooling."); return Promise.resolve({ key: sslKey, @@ -50,11 +79,9 @@ test.serial("Create new certificate and install it", async (t) => { }); }); - mock.reRequire("yesno"); - mock.reRequire("devcert-sanscache"); - - const sslUtil = mock.reRequire("../../../lib/sslUtil"); const sslPath = path.join(process.cwd(), "./test/tmp/ssl/"); + await rimraf(sslPath); // Ensure that tmp directory doesn't exist + const sslPathKey = path.join(sslPath, "someOtherServer1.key"); const sslPathCert = path.join(sslPath, "someOtherServer1.crt"); const result = await sslUtil.getSslCertificate(sslPathKey, sslPathCert); @@ -68,14 +95,15 @@ test.serial("Create new certificate and install it", async (t) => { t.is(fileExistsResult[0], true, "Key was created."); t.is(fileExistsResult[1], true, "Cert was created."); - mock.stop("yesno"); - mock.stop("devcert-sanscache"); }); -test.serial("Create new certificate and do not install it", (t) => { +test.serial("Create new certificate and do not install it", async (t) => { + const {createSslUtilMock, yesno} = t.context; + const sslUtil = await createSslUtilMock(); + t.plan(2); - mock("yesno", async function(options) { + yesno.callsFake(async function(options) { t.deepEqual(options, { question: "No SSL certificates found. " + "Do you want to create new SSL certificates and install them locally? (yes)", @@ -85,8 +113,6 @@ test.serial("Create new certificate and do not install it", (t) => { return false; }); - mock.reRequire("yesno"); - const sslPath = path.join(process.cwd(), "./test/tmp/ssl/"); const sslPathKey = path.join(sslPath, "someOtherServer2.key"); const sslPathCert = path.join(sslPath, "someOtherServer2.crt"); @@ -97,14 +123,16 @@ test.serial("Create new certificate and do not install it", (t) => { "Certificate installation aborted! Please install the SSL certificate manually.", "Certificate install aborted." ); - mock.stop("yesno"); }); }); test.serial("Create new certificate not succeeded", async (t) => { + const {createSslUtilMock, yesno, devcertSanscache, makeDir} = t.context; + const sslUtil = await createSslUtilMock(true); + t.plan(6); - mock("yesno", async function(options) { + yesno.callsFake(async function(options) { t.deepEqual(options, { question: "No SSL certificates found. " + "Do you want to create new SSL certificates and install them locally? (yes)", @@ -114,32 +142,23 @@ test.serial("Create new certificate not succeeded", async (t) => { return true; }); - mock("devcert-sanscache", function(name) { + devcertSanscache.callsFake(async function(name) { t.is(name, "UI5Tooling", "Create certificate for UI5Tooling."); - return Promise.resolve({ + return { key: "aaa", cert: "bbb" - }); + }; }); - mock("make-dir", function(dirName) { + makeDir.callsFake(async function(dirName) { t.pass("make-dir mock reached."); - return Promise.reject(new Error("some error")); + throw new Error("some error"); }); - mock.reRequire("yesno"); - mock.reRequire("devcert-sanscache"); - mock.reRequire("make-dir"); - - const sslUtil = mock.reRequire("../../../lib/sslUtil"); - const sslPath = path.join(process.cwd(), "./test/tmp/ssl/"); const sslPathKey = path.join(sslPath, "someOtherServer3.key"); const sslPathCert = path.join(sslPath, "someOtherServer3.crt"); const err = await t.throwsAsync(sslUtil.getSslCertificate(sslPathKey, sslPathCert)); t.is(err.message, "some error", "Correct error thrown"); - mock.stop("yesno"); - mock.stop("devcert-sanscache"); - mock.stop("make-dir"); });