diff --git a/.chglog/release-config.yml b/.chglog/release-config.yml index e967ddb0b..d56659f1c 100755 --- a/.chglog/release-config.yml +++ b/.chglog/release-config.yml @@ -3,6 +3,7 @@ template: RELEASE.tpl.md info: repository_url: https://github.com/SAP/ui5-builder options: + tag_filter_pattern: '^v[^012]' # For release notes ignore versions below v3 to that we always compare the _last v3+_ tag with the current release commits: filters: Type: diff --git a/.eslintrc.js b/.eslintrc.js index 52b9f6836..b1b5dfca8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,10 +1,7 @@ module.exports = { "env": { "node": true, - "es6": true - }, - "parserOptions": { - "ecmaVersion": 8 + "es2021": true }, "extends": ["eslint:recommended", "google"], "plugins": [ @@ -48,7 +45,9 @@ module.exports = { "valid-jsdoc": 0, // jsdoc/check-examples is temporarily set to "warn" as the rule causes issues in our CI // See: https://github.com/gajus/eslint-plugin-jsdoc/issues/508 - "jsdoc/check-examples": 1, + // Starting with ESLint v8, it needs to be disabled as it currently can't be supported + // See: https://github.com/eslint/eslint/issues/14745 + "jsdoc/check-examples": 0, "jsdoc/check-param-names": 2, "jsdoc/check-tag-names": 2, "jsdoc/check-types": 2, diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 924b1cd65..221834124 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -2,9 +2,15 @@ name: "CodeQL" on: push: - branches: [ master ] + branches: + - master + - main + - next pull_request: - branches: [ master ] + branches: + - master + - main + - next # Execute at least once per week to get new findings without active development taking place schedule: diff --git a/.github/workflows/github-ci.yml b/.github/workflows/github-ci.yml index f467e7e3c..5a8462d7e 100644 --- a/.github/workflows/github-ci.yml +++ b/.github/workflows/github-ci.yml @@ -2,9 +2,15 @@ name: GitHub CI on: push: - branches: [ master ] + branches: + - master + - main + - next pull_request: - branches: [ master ] + branches: + - master + - main + - next jobs: test: @@ -14,10 +20,10 @@ jobs: - uses: actions/checkout@v2 - - name: Use Node.js LTS 14.x + - name: Use Node.js LTS 16.x uses: actions/setup-node@v2.4.1 with: - node-version: 14.x + node-version: 16.x - name: Install dependencies run: npm ci diff --git a/.github/workflows/reuse-compliance.yml b/.github/workflows/reuse-compliance.yml index 1ecfdb5d0..a188fccc5 100644 --- a/.github/workflows/reuse-compliance.yml +++ b/.github/workflows/reuse-compliance.yml @@ -2,9 +2,15 @@ name: REUSE on: push: - branches: [ master ] + branches: + - master + - main + - next pull_request: - branches: [ master ] + branches: + - master + - main + - next jobs: compliance-check: diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ecc0bc7..f3c5d568e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,67 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -A list of unreleased changes can be found [here](https://github.com/SAP/ui5-builder/compare/v2.11.2...HEAD). +A list of unreleased changes can be found [here](https://github.com/SAP/ui5-builder/compare/v3.0.0-alpha.3...HEAD). + + +## [v3.0.0-alpha.3] - 2022-03-10 +### Bug Fixes +- **LocatorResourcePool:** Wait for resources in prepare step ([#719](https://github.com/SAP/ui5-builder/issues/719)) [`1b7f93f`](https://github.com/SAP/ui5-builder/commit/1b7f93f4988340d7a6575be3191a02e6c295ebd0) + + + +## [v3.0.0-alpha.2] - 2022-02-25 +### Bug Fixes +- **XMLTemplateAnalyzer:** Analyze core:require of FragmentDefinition [`af075ed`](https://github.com/SAP/ui5-builder/commit/af075edf784d9f1ba162a34f0bf150dbcbc0f479) + +### Features +- Generate source maps for bundles ([#695](https://github.com/SAP/ui5-builder/issues/695)) [`8a20c42`](https://github.com/SAP/ui5-builder/commit/8a20c4257a1ebe4d613b0595be93cd45d900f580) +- **replaceVersion/Copyright:** Also process test-resources ([#693](https://github.com/SAP/ui5-builder/issues/693)) [`a0d4bc2`](https://github.com/SAP/ui5-builder/commit/a0d4bc2a80d61e042786207af4bdbda6c3ddfe31) + + + +## [v3.0.0-alpha.1] - 2022-01-25 +### Breaking Changes +- Require Node.js >= 16.13.2 / npm >= 8 [`dbf6c06`](https://github.com/SAP/ui5-builder/commit/dbf6c0694693070f73e9f96edef90f094d5bf721) +- **generateResourcesJson:** Make 'dependencies' parameter mandatory [`268dd16`](https://github.com/SAP/ui5-builder/commit/268dd16091c515ec0c922ea23af437d9aa8bf3ea) +- **moduleBundler:** Always default to `optimize: true` ([#685](https://github.com/SAP/ui5-builder/issues/685)) [`de5837c`](https://github.com/SAP/ui5-builder/commit/de5837c43449ea61deae3b2f02f9973f3fa37992) + +### Bug Fixes +- **Bundler:** Ensure reproducibility for bundles with multiple parts ([#689](https://github.com/SAP/ui5-builder/issues/689)) [`6f4588b`](https://github.com/SAP/ui5-builder/commit/6f4588b3eb687178e557ac4fb36481104f9681a0) +- **generateResourcesJson:** Don't list resources omitted from build result [`9608c51`](https://github.com/SAP/ui5-builder/commit/9608c5177f86494ba689d2e799b4378fec9ed6fa) +- **generateResourcesJson:** Analyze debug bundles ([#669](https://github.com/SAP/ui5-builder/issues/669)) [`f27513a`](https://github.com/SAP/ui5-builder/commit/f27513a259b30d39e260790781b6d435b4ab088b) + +### Features +- Support ES2021 language features [`e749b6a`](https://github.com/SAP/ui5-builder/commit/e749b6ae0838f923b27dd0d7d34da2174c433f5f) +- Add minify task and processor ([#666](https://github.com/SAP/ui5-builder/issues/666)) [`a3af604`](https://github.com/SAP/ui5-builder/commit/a3af604ff0a12fb9241dcd105cf0aec8d718a299) + +### BREAKING CHANGE + +Support for older Node.js and npm releases has been dropped. +Only Node.js v16.13.2 and npm v8 or higher are supported. + +The following tasks have been removed: +- createDebugFiles +- uglify + +The following processors have been removed: +- debugFileCreator +- resourceCopier +- uglifier + +As a replacement, the new 'minify' task and 'minifier' processor can be +used. + +Note: The minify task is executed earlier, before the bundling +process takes place. Existing 'beforeTask' and 'afterTask' configuration of +custom tasks might need to be adapted to cater for this change. + + + +## [v3.0.0-alpha.0] - 2021-12-14 +### Bug Fixes +- **Bundler:** Sort raw modules by default [`0e11b69`](https://github.com/SAP/ui5-builder/commit/0e11b6965a1d2e63a96e9b738e38975b5ac755bc) + ## [v2.11.2] - 2021-11-17 @@ -633,6 +693,10 @@ to load the custom bundle file instead. - Add ability to configure component preloads and custom bundles [`2241e5f`](https://github.com/SAP/ui5-builder/commit/2241e5ff98fd95f1f80cc74959655ae7a9c660e7) +[v3.0.0-alpha.3]: https://github.com/SAP/ui5-builder/compare/v3.0.0-alpha.2...v3.0.0-alpha.3 +[v3.0.0-alpha.2]: https://github.com/SAP/ui5-builder/compare/v3.0.0-alpha.1...v3.0.0-alpha.2 +[v3.0.0-alpha.1]: https://github.com/SAP/ui5-builder/compare/v3.0.0-alpha.0...v3.0.0-alpha.1 +[v3.0.0-alpha.0]: https://github.com/SAP/ui5-builder/compare/v2.11.2...v3.0.0-alpha.0 [v2.11.2]: https://github.com/SAP/ui5-builder/compare/v2.11.1...v2.11.2 [v2.11.1]: https://github.com/SAP/ui5-builder/compare/v2.11.0...v2.11.1 [v2.11.0]: https://github.com/SAP/ui5-builder/compare/v2.10.0...v2.11.0 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index dd0d98b00..75fd5c3e5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -8,24 +8,18 @@ trigger: strategy: matrix: - linux_node_10: + linux_node_lts_16: imageName: 'ubuntu-20.04' - node_version: 10.x - linux_node_lts_12: - imageName: 'ubuntu-20.04' - node_version: 12.x - linux_node_lts_14: - imageName: 'ubuntu-20.04' - node_version: 14.x + node_version: 16.x linux_node_latest: imageName: 'ubuntu-20.04' - node_version: 16.x + node_version: 17.x mac_node_latest: - imageName: 'macOS-10.15' - node_version: 16.x + imageName: 'macOS-11' + node_version: 17.x windows_node_latest: - imageName: 'windows-2019' - node_version: 16.x + imageName: 'windows-2022' + node_version: 17.x pool: vmImage: $(imageName) diff --git a/index.js b/index.js index a9f0c58fe..14341491d 100644 --- a/index.js +++ b/index.js @@ -42,9 +42,9 @@ module.exports = { */ bootstrapHtmlTransformer: "./lib/processors/bootstrapHtmlTransformer", /** - * @type {import('./lib/processors/debugFileCreator')} + * @type {import('./lib/processors/minifier')} */ - debugFileCreator: "./lib/processors/debugFileCreator", + minifier: "./lib/processors/minifier", /** * @type {import('./lib/processors/libraryLessGenerator')} */ @@ -53,10 +53,6 @@ module.exports = { * @type {import('./lib/processors/manifestCreator')} */ manifestCreator: "./lib/processors/manifestCreator", - /** - * @type {import('./lib/processors/resourceCopier')} - */ - resourceCopier: "./lib/processors/resourceCopier", /** * @type {import('./lib/processors/nonAsciiEscaper')} */ @@ -69,10 +65,6 @@ module.exports = { * @type {import('./lib/processors/themeBuilder')} */ themeBuilder: "./lib/processors/themeBuilder", - /** - * @type {import('./lib/processors/uglifier')} - */ - uglifier: "./lib/processors/uglifier", /** * @type {import('./lib/processors/versionInfoGenerator')} */ @@ -121,9 +113,9 @@ module.exports = { */ buildThemes: "./lib/tasks/buildThemes", /** - * @type {import('./lib/tasks/createDebugFiles')} + * @type {import('./lib/tasks/minify')} */ - createDebugFiles: "./lib/tasks/createDebugFiles", + minify: "./lib/tasks/minify", /** * @type {import('./lib/tasks/jsdoc/executeJsdocSdkTransformation')} */ @@ -160,10 +152,6 @@ module.exports = { * @type {import('./lib/tasks/transformBootstrapHtml')} */ transformBootstrapHtml: "./lib/tasks/transformBootstrapHtml", - /** - * @type {import('./lib/tasks/uglify')} - */ - uglify: "./lib/tasks/uglify", /** * @type {import('./lib/tasks/taskRepository')} */ diff --git a/jsdoc.json b/jsdoc.json index 2079cf56d..61b8e3ae3 100644 --- a/jsdoc.json +++ b/jsdoc.json @@ -12,7 +12,6 @@ "./jsdoc-plugin" ], "opts": { - "template": "node_modules/docdash/", "encoding": "utf8", "destination": "jsdocs/", "recurse": true, diff --git a/lib/builder/BuildContext.js b/lib/builder/BuildContext.js index 0f61271a7..6ed64a0ab 100644 --- a/lib/builder/BuildContext.js +++ b/lib/builder/BuildContext.js @@ -1,5 +1,13 @@ +const ResourceTagCollection = require("@ui5/fs").ResourceTagCollection; const ProjectBuildContext = require("./ProjectBuildContext"); +// Note: When adding standard tags, always update the public documentation in TaskUtil +// (Type "module:@ui5/builder.tasks.TaskUtil~StandardBuildTags") +const GLOBAL_TAGS = Object.freeze({ + IsDebugVariant: "ui5:IsDebugVariant", + HasDebugVariant: "ui5:HasDebugVariant", +}); + /** * Context of a build process * @@ -7,21 +15,30 @@ const ProjectBuildContext = require("./ProjectBuildContext"); * @memberof module:@ui5/builder.builder */ class BuildContext { - constructor({rootProject}) { + constructor({rootProject, options = {}}) { if (!rootProject) { throw new Error(`Missing parameter 'rootProject'`); } this.rootProject = rootProject; this.projectBuildContexts = []; + this._resourceTagCollection = new ResourceTagCollection({ + allowedTags: Object.values(GLOBAL_TAGS) + }); + this.options = options; } getRootProject() { return this.rootProject; } + getOption(key) { + return this.options[key]; + } + createProjectContext({project, resources}) { const projectBuildContext = new ProjectBuildContext({ buildContext: this, + globalTags: GLOBAL_TAGS, project, resources }); @@ -34,6 +51,10 @@ class BuildContext { return ctx.executeCleanupTasks(); })); } + + getResourceTagCollection() { + return this._resourceTagCollection; + } } module.exports = BuildContext; diff --git a/lib/builder/ProjectBuildContext.js b/lib/builder/ProjectBuildContext.js index a9dbf9c54..5f8bc5ab1 100644 --- a/lib/builder/ProjectBuildContext.js +++ b/lib/builder/ProjectBuildContext.js @@ -2,10 +2,10 @@ const ResourceTagCollection = require("@ui5/fs").ResourceTagCollection; // Note: When adding standard tags, always update the public documentation in TaskUtil // (Type "module:@ui5/builder.tasks.TaskUtil~StandardBuildTags") -const STANDARD_TAGS = Object.freeze({ +const STANDARD_TAGS = { OmitFromBuildResult: "ui5:OmitFromBuildResult", - IsBundle: "ui5:IsBundle" -}); + IsBundle: "ui5:IsBundle", +}; /** * Build context of a single project. Always part of an overall @@ -15,8 +15,8 @@ const STANDARD_TAGS = Object.freeze({ * @memberof module:@ui5/builder.builder */ class ProjectBuildContext { - constructor({buildContext, project, resources}) { - if (!buildContext || !project || !resources) { + constructor({buildContext, globalTags, project, resources}) { + if (!buildContext || !globalTags || !project || !resources) { throw new Error(`One or more mandatory parameters are missing`); } this._buildContext = buildContext; @@ -26,10 +26,12 @@ class ProjectBuildContext { cleanup: [] }; - this.STANDARD_TAGS = STANDARD_TAGS; + this.STANDARD_TAGS = Object.assign({}, STANDARD_TAGS, globalTags); + Object.freeze(this.STANDARD_TAGS); this._resourceTagCollection = new ResourceTagCollection({ - allowedTags: Object.values(this.STANDARD_TAGS) + allowedTags: Object.values(this.STANDARD_TAGS), + superCollection: this._buildContext.getResourceTagCollection() }); } @@ -37,6 +39,10 @@ class ProjectBuildContext { return this._project === this._buildContext.getRootProject(); } + getOption(key) { + return this._buildContext.getOption(key); + } + registerCleanupTask(callback) { this.queues.cleanup.push(callback); } diff --git a/lib/builder/builder.js b/lib/builder/builder.js index cb81de584..e32137529 100644 --- a/lib/builder/builder.js +++ b/lib/builder/builder.js @@ -94,8 +94,7 @@ function composeTaskList({dev, selfContained, jsdoc, includedTasks, excludedTask selectedTasks.generateComponentPreload = false; selectedTasks.generateLibraryPreload = false; selectedTasks.generateLibraryManifest = false; - selectedTasks.createDebugFiles = false; - selectedTasks.uglify = false; + selectedTasks.minify = false; selectedTasks.generateFlexChangesBundle = false; selectedTasks.generateManifestBundle = false; } @@ -225,6 +224,7 @@ module.exports = { * @param {boolean} [parameters.dev=false] * Decides whether a development build should be activated (skips non-essential and time-intensive tasks) * @param {boolean} [parameters.selfContained=false] Flag to activate self contained build + * @param {boolean} [parameters.cssVariables=false] Flag to activate CSS variables generation * @param {boolean} [parameters.jsdoc=false] Flag to activate JSDoc build * @param {Array.} [parameters.includedTasks=[]] List of tasks to be included * @param {Array.} [parameters.excludedTasks=[]] List of tasks to be excluded. @@ -235,7 +235,7 @@ module.exports = { async build({ tree, destPath, cleanDest = false, buildDependencies = false, includedDependencies = [], excludedDependencies = [], - dev = false, selfContained = false, jsdoc = false, + dev = false, selfContained = false, cssVariables = false, jsdoc = false, includedTasks = [], excludedTasks = [], devExcludeProject = [] }) { const startTime = process.hrtime(); @@ -250,7 +250,12 @@ module.exports = { virBasePath: "/" }); - const buildContext = new BuildContext({rootProject: tree}); + const buildContext = new BuildContext({ + rootProject: tree, + options: { + cssVariables: cssVariables + } + }); const cleanupSigHooks = registerCleanupSigHooks(buildContext); const projects = {}; // Unique project index to prevent building the same project multiple times diff --git a/lib/lbt/analyzer/JSModuleAnalyzer.js b/lib/lbt/analyzer/JSModuleAnalyzer.js index 0817b59b0..da1c494ad 100644 --- a/lib/lbt/analyzer/JSModuleAnalyzer.js +++ b/lib/lbt/analyzer/JSModuleAnalyzer.js @@ -64,6 +64,7 @@ const EnrichedVisitorKeys = (function() { BreakStatement: [], CallExpression: [], // special handling CatchClause: ["param", "body"], + ChainExpression: [], ClassBody: [], ClassDeclaration: [], ClassExpression: [], @@ -125,8 +126,10 @@ const EnrichedVisitorKeys = (function() { * All properties in an object pattern are executed. */ ObjectPattern: [], // properties + // PrivateIdentifier: [], // will come with ES2022 Program: [], Property: [], + // PropertyDefinition: [], // will come with ES2022 /* * argument of the rest element is always executed under the same condition as the rest element itself */ @@ -134,6 +137,7 @@ const EnrichedVisitorKeys = (function() { ReturnStatement: [], SequenceExpression: [], SpreadElement: [], // the argument of the spread operator always needs to be evaluated - argument + // StaticBlock: [], // will come with ES2022 Super: [], SwitchStatement: [], SwitchCase: ["test", "consequent"], // test and consequent are executed only conditionally @@ -171,9 +175,11 @@ const EnrichedVisitorKeys = (function() { // merge with 'official' visitor keys Object.keys(VisitorKeys).forEach( (type) => { - // Check if the visitor-key exists in the available Syntax because - // the list of visitor-keys does not match the available Syntax. - if (!Syntax[type]) { + // Ignore deprecated keys: + // - ExperimentalSpreadProperty => SpreadElement + // - ExperimentalRestProperty => RestElement + // They are about to be removed, see: https://github.com/eslint/eslint-visitor-keys/pull/36 + if (type === "ExperimentalSpreadProperty" || type === "ExperimentalRestProperty") { return; } // Ignore JSX visitor-keys because they aren't used. @@ -181,6 +187,15 @@ const EnrichedVisitorKeys = (function() { return; } + // Ignore new ES2022 syntax as we currently use ES2021 (see parseUtils.js) + if ( + type === "PrivateIdentifier" || + type === "PropertyDefinition" || + type === "StaticBlock" + ) { + return; + } + const visitorKeys = VisitorKeys[type]; const condKeys = TempKeys[type]; if ( condKeys === undefined ) { diff --git a/lib/lbt/analyzer/XMLTemplateAnalyzer.js b/lib/lbt/analyzer/XMLTemplateAnalyzer.js index ce17f880e..e87dadcfb 100644 --- a/lib/lbt/analyzer/XMLTemplateAnalyzer.js +++ b/lib/lbt/analyzer/XMLTemplateAnalyzer.js @@ -231,9 +231,10 @@ class XMLTemplateAnalyzer { // looks like a UI5 library or package name const moduleName = ModuleName.fromUI5LegacyName( (namespace ? namespace + "." : "") + localName ); + this._analyzeCoreRequire(node); + // ignore FragmentDefinition (also skipped by runtime XMLTemplateProcessor) if ( FRAGMENTDEFINITION_MODULE !== moduleName ) { - this._analyzeCoreRequire(node); this.promises.push(this._analyzeModuleDependency(node, moduleName, this.conditional)); } } diff --git a/lib/lbt/bundle/AutoSplitter.js b/lib/lbt/bundle/AutoSplitter.js index 114471f8a..5f3a9b776 100644 --- a/lib/lbt/bundle/AutoSplitter.js +++ b/lib/lbt/bundle/AutoSplitter.js @@ -1,6 +1,5 @@ "use strict"; -const terser = require("terser"); const {pd} = require("pretty-data"); const ModuleName = require("../utils/ModuleName"); @@ -8,7 +7,6 @@ const {SectionType} = require("./BundleDefinition"); const escapePropertiesFile = require("../utils/escapePropertiesFile"); const log = require("@ui5/logger").getLogger("lbt:bundle:AutoSplitter"); -const copyrightCommentsPattern = /copyright|\(c\)(?:[0-9]+|\s+[0-9A-za-z])|released under|license|\u00a9/i; const xmlHtmlPrePattern = /<(?:\w+:)?pre\b/; /** @@ -112,6 +110,7 @@ class AutoSplitter { resolvedModule.sections.forEach( (section) => { let currentSection; + let sequence; switch ( section.mode ) { case SectionType.Provided: // 'provided' sections are no longer needed in a fully resolved module @@ -131,16 +130,20 @@ class AutoSplitter { }); break; case SectionType.Preload: + sequence = section.modules.slice(); + // simple version: just sort alphabetically + sequence.sort(); + // NODE_TODO: sort by copyright: - // sequence = section.modules.slice(); // jsBuilder.beforeWriteFunctionPreloadSection((List) sequence); + currentSection = { mode: SectionType.Preload, filters: [] }; currentSection.name = section.name; currentModule.sections.push( currentSection ); - section.modules.forEach( (module) => { + sequence.forEach( (module) => { const moduleSize = moduleSizes[module]; if ( part + 1 < numberOfParts && totalSize + moduleSize / 2 > partSize ) { part++; @@ -195,26 +198,9 @@ class AutoSplitter { } if ( /\.js$/.test(module) ) { - // console.log("determining compressed size for %s", module); - let fileContent = await resource.buffer(); - if ( this.optimize ) { - // console.log("uglify %s start", module); - const result = await terser.minify({ - [resource.name]: String(fileContent) - }, { - warnings: false, // TODO configure? - compress: false, // TODO configure? - output: { - comments: copyrightCommentsPattern, - wrap_func_args: false - } - // , outFileName: resource.name - // , outSourceMap: true - }); - // console.log("uglify %s end", module); - fileContent = result.code; - } - // trace.debug("analyzed %s:%d%n", module, mw.getTargetLength()); + // No optimize / minify step here as the input should be + // either already optimized or not, based on the bundle options + const fileContent = await resource.buffer(); return fileContent.length; } else if ( /\.properties$/.test(module) ) { /* NODE-TODO minimize *.properties diff --git a/lib/lbt/bundle/Builder.js b/lib/lbt/bundle/Builder.js index a89a62e58..cd68b2a24 100644 --- a/lib/lbt/bundle/Builder.js +++ b/lib/lbt/bundle/Builder.js @@ -3,10 +3,9 @@ "use strict"; const path = require("path"); -const terser = require("terser"); const {pd} = require("pretty-data"); const {parseJS, Syntax} = require("../utils/parseUtils"); -// const MOZ_SourceMap = require("source-map"); +const {encode: encodeMappings, decode: decodeMappings} = require("sourcemap-codec"); const {isMethodCall} = require("../utils/ASTUtils"); const ModuleName = require("../utils/ModuleName"); @@ -19,7 +18,8 @@ const {SectionType} = require("./BundleDefinition"); const BundleWriter = require("./BundleWriter"); const log = require("@ui5/logger").getLogger("lbt:bundle:Builder"); -const copyrightCommentsPattern = /copyright|\(c\)(?:[0-9]+|\s+[0-9A-za-z])|released under|license|\u00a9|^@ui5-bundle-raw-include |^@ui5-bundle /i; +const sourceMappingUrlPattern = /\/\/# sourceMappingURL=(.+)\s*$/; +const httpPattern = /^https?:\/\//i; const xmlHtmlPrePattern = /<(?:\w+:)?pre\b/; const strReplacements = { @@ -41,30 +41,30 @@ function isEmptyBundle(resolvedBundle) { } const UI5BundleFormat = { - beforePreloads(outW, section) { - outW.write(`jQuery.sap.registerPreloadedModules(`); - outW.writeln(`{`); + beforePreloads(section) { + let str = `jQuery.sap.registerPreloadedModules({\n`; if ( section.name ) { - outW.writeln(`"name":"${section.name}",`); + str += `"name":"${section.name}",\n`; } - outW.writeln(`"version":"2.0",`); - outW.writeln(`"modules":{`); + str += `"version":"2.0",\n`; + str += `"modules":{\n`; + return str; }, - afterPreloads(outW, section) { - outW.writeln(`}});`); + afterPreloads(section) { + return `}});\n`; }, - beforeBundleInfo(outW) { - outW.writeln("\"unsupported\"; /* 'bundleInfo' section mode not supported (requires ui5loader)"); + beforeBundleInfo() { + return `"unsupported"; /* 'bundleInfo' section mode not supported (requires ui5loader)\n`; }, - afterBundleInfo(outW) { - outW.writeln("*/"); + afterBundleInfo() { + return "*/\n"; }, - requireSync(outW, moduleName) { - outW.writeln(`sap.ui.requireSync("${ModuleName.toRequireJSName(moduleName)}");`); + requireSync(moduleName) { + return `sap.ui.requireSync("${ModuleName.toRequireJSName(moduleName)}");\n`; }, shouldDecorate(resolvedModule) { @@ -73,28 +73,29 @@ const UI5BundleFormat = { }; const EVOBundleFormat = { - beforePreloads(outW, section) { - outW.writeln(`sap.ui.require.preload({`); + beforePreloads(section) { + return `sap.ui.require.preload({\n`; }, - afterPreloads(outW, section) { - outW.write(`}`); + afterPreloads(section) { + let str = `}`; if ( section.name ) { - outW.write(`,"${section.name}"`); + str += `,"${section.name}"`; } - outW.writeln(`);`); + str += `);\n`; + return str; }, - beforeBundleInfo(outW) { - outW.writeln("sap.ui.loader.config({bundlesUI5:{"); + beforeBundleInfo() { + return "sap.ui.loader.config({bundlesUI5:{\n"; }, - afterBundleInfo(outW) { - outW.writeln("}});"); + afterBundleInfo() { + return "}});\n"; }, - requireSync(outW, moduleName) { - outW.writeln(`sap.ui.requireSync("${ModuleName.toRequireJSName(moduleName)}");`); + requireSync(moduleName) { + return `sap.ui.requireSync("${ModuleName.toRequireJSName(moduleName)}");\n`; }, shouldDecorate(resolvedModule) { @@ -148,6 +149,9 @@ class BundleBuilder { this.options = options || {}; this.optimize = !!this.options.optimize; + if (this.options.sourceMap === undefined) { + this.options.sourceMap = true; + } // when decorateBootstrapModule is set to false, we don't write the optimized flag // and don't write the try catch wrapper @@ -157,6 +161,15 @@ class BundleBuilder { // TODO is the following condition ok or should the availability of jquery.sap.global.js be configurable? this.jqglobalAvailable = !resolvedModule.containsGlobal; this.openModule(resolvedModule.name); + + this._sourceMap = { + version: 3, + file: path.posix.basename(resolvedModule.name), + sections: [], + }; + this._bundleName = resolvedModule.name; + this._inlineContentCounter = 0; + let bundleInfos = []; // create all sections in sequence for ( const section of resolvedModule.sections ) { @@ -185,6 +198,7 @@ class BundleBuilder { return { name: module.name, content: this.outW.toString(), + sourceMap: this.options.sourceMap ? JSON.stringify(this._sourceMap) : null, bundleInfo: bundleInfo }; } @@ -202,23 +216,36 @@ class BundleBuilder { } } + writeWithSourceMap(content) { + const transientSourceName = + `${path.posix.basename(this._bundleName)}?bundle-code-${this._inlineContentCounter++}`; + const sourceMap = createTransientSourceMap({ + moduleName: transientSourceName, + moduleContent: content, + includeContent: true + }); + this.addSourceMap(this._bundleName, sourceMap); + this.outW.write(content); + this.outW.ensureNewLine(); + } + closeModule(resolvedModule) { if ( resolvedModule.containsCore ) { this.outW.ensureNewLine(); // for clarity and to avoid issues with single line comments - this.outW.writeln(`// as this module contains the Core, we ensure that the Core has been booted`); - this.outW.writeln(`sap.ui.getCore().boot && sap.ui.getCore().boot();`); + this.writeWithSourceMap( + `// as this module contains the Core, we ensure that the Core has been booted\n` + + `sap.ui.getCore().boot && sap.ui.getCore().boot();`); } if ( this.shouldDecorate && this.options.addTryCatchRestartWrapper ) { this.outW.ensureNewLine(); // for clarity and to avoid issues with single line comments - this.outW.writeln(`} catch(oError) {`); - this.outW.writeln(`if (oError.name != "Restart") { throw oError; }`); - this.outW.writeln(`}`); + this.writeWithSourceMap( + `} catch(oError) {\n` + + `if (oError.name != "Restart") { throw oError; }\n` + + `}`); + } + if (this.options.sourceMap) { + this.outW.writeln(`//# sourceMappingURL=${path.posix.basename(resolvedModule.name)}.map`); } - /* NODE-TODO - if ( writeSourceMap && writeSourceMapAnnotation ) { - outW.ensureNewLine(); - outW.write("//# sourceMappingURL=" + moduleName.getBaseName().replaceFirst("\\.js$", ".js.map")); - }*/ } addSection(section) { @@ -260,34 +287,43 @@ class BundleBuilder { // TODO check that there are only JS modules contained async writeRaw(section) { // write all modules in sequence - for ( const module of section.modules ) { - const resource = await this.pool.findResourceWithInfo(module); + for ( const moduleName of section.modules ) { + const resource = await this.pool.findResourceWithInfo(moduleName); if ( resource != null ) { - this.outW.startSegment(module); + this.outW.startSegment(moduleName); this.outW.ensureNewLine(); - this.outW.writeln("//@ui5-bundle-raw-include " + module); - await this.writeRawModule(module, resource); + this.outW.writeln("//@ui5-bundle-raw-include " + moduleName); + await this.writeRawModule(moduleName, resource); const compressedSize = this.outW.endSegment(); - log.verbose(" %s (%d,%d)", module, resource.info != null ? resource.info.size : -1, compressedSize); + log.verbose(" %s (%d,%d)", moduleName, + resource.info != null ? resource.info.size : -1, compressedSize); if ( section.declareRawModules ) { - this.missingRawDeclarations.push(module); + this.missingRawDeclarations.push(moduleName); } - if ( module === UI5ClientConstants.MODULE__JQUERY_SAP_GLOBAL ) { + if ( moduleName === UI5ClientConstants.MODULE__JQUERY_SAP_GLOBAL ) { this.jqglobalAvailable = true; } } else { - log.error(" couldn't find %s", module); + log.error(" couldn't find %s", moduleName); } } } - async writeRawModule(module, resource) { - let fileContent = await resource.buffer(); - if ( /\.js$/.test(module) ) { - fileContent = await this.compressJS( fileContent, resource ); + async writeRawModule(moduleName, resource) { + this.outW.ensureNewLine(); + let moduleContent = (await resource.buffer()).toString(); + if (this.options.sourceMap) { + let moduleSourceMap; + ({moduleContent, moduleSourceMap} = + await this.getSourceMapForModule({ + moduleName, + moduleContent, + resourcePath: resource.getPath() + })); + this.addSourceMap(moduleName, moduleSourceMap); } + this.outW.write(moduleContent); this.outW.ensureNewLine(); - this.outW.write( fileContent ); } async writePreloadFunction(section) { @@ -301,7 +337,7 @@ class BundleBuilder { await this.rewriteAMDModules(sequence); if ( sequence.length > 0 ) { - this.targetBundleFormat.beforePreloads(outW, section); + this.writeWithSourceMap(this.targetBundleFormat.beforePreloads(section)); let i = 0; for ( const module of sequence ) { const resource = await this.pool.findResourceWithInfo(module); @@ -309,7 +345,7 @@ class BundleBuilder { if ( i>0 ) { outW.writeln(","); } - this.beforeWritePreloadModule(module, resource.info, resource); + // this.beforeWritePreloadModule(module, resource.info, resource); outW.write(`\t"${module.toString()}":`); outW.startSegment(module); await this.writePreloadModule(module, resource.info, resource); @@ -325,66 +361,83 @@ class BundleBuilder { if ( i > 0 ) { outW.writeln(); } - this.targetBundleFormat.afterPreloads(outW, section); + outW.write(this.targetBundleFormat.afterPreloads(section)); } // this.afterWriteFunctionPreloadSection(); } - async compressJS(fileContent, resource) { - if ( this.optimize ) { - const result = await terser.minify({ - [resource.name]: String(fileContent) - }, { - compress: false, // TODO configure? - output: { - comments: copyrightCommentsPattern, - wrap_func_args: false - } - // , outFileName: resource.name - // , outSourceMap: true - }); - // console.log(result.map); - // const map = new MOZ_SourceMap.SourceMapConsumer(result.map); - // map.eachMapping(function (m) { console.log(m); }); // console.log(map); - fileContent = result.code; - // throw new Error(); - } - return fileContent; - } - beforeWriteFunctionPreloadSection(sequence) { // simple version: just sort alphabetically sequence.sort(); } + addSourceMap(moduleName, map) { + if (!map) { + throw new Error("No source map provided"); + } + + if (map.mappings.startsWith(";")) { + // If first line is not already mapped (typical for comments or parentheses), add a mapping to + // make sure that dev-tools (especially Chrome's) don't choose the end of the preceding module + // when the user tries to set a breakpoint from the bundle file + map.mappings = "AAAA" + map.mappings; + } + + map.sourceRoot = path.posix.relative( + path.posix.dirname(this._bundleName), path.posix.dirname(moduleName)); + + this._sourceMap.sections.push({ + offset: { + line: this.outW.lineOffset, + column: this.outW.columnOffset + }, + map + }); + } + async rewriteAMDModules(sequence) { if ( this.options.usePredefineCalls ) { const outW = this.outW; const remaining = []; - for ( const module of sequence ) { - if ( /\.js$/.test(module) ) { - // console.log("Processing " + module); - const resource = await this.pool.findResourceWithInfo(module); - let code = await resource.buffer(); - code = rewriteDefine(this.targetBundleFormat, code, module); - if ( code ) { - outW.startSegment(module); + for ( const moduleName of sequence ) { + if ( /\.js$/.test(moduleName) ) { + // console.log("Processing " + moduleName); + const resource = await this.pool.findResourceWithInfo(moduleName); + let moduleContent = (await resource.buffer()).toString(); + let moduleSourceMap; + if (this.options.sourceMap) { + ({moduleContent, moduleSourceMap} = + await this.getSourceMapForModule({ + moduleName, + moduleContent, + resourcePath: resource.getPath() + })); + } + + const rewriteRes = await rewriteDefine({ + moduleName, moduleContent, moduleSourceMap + }); + if (rewriteRes) { + const {moduleContent, moduleSourceMap} = rewriteRes; + outW.startSegment(moduleName); outW.ensureNewLine(); - const fileContent = await this.compressJS(code, resource); - outW.write( fileContent ); + if (moduleSourceMap) { + this.addSourceMap(moduleName, moduleSourceMap); + } + outW.write(moduleContent); outW.ensureNewLine(); const compressedSize = outW.endSegment(); - log.verbose(" %s (%d,%d)", module, + log.verbose(" %s (%d,%d)", moduleName, resource.info != null ? resource.info.size : -1, compressedSize); } else { // keep unprocessed modules - remaining.push(module); + remaining.push(moduleName); } } else { // keep unprocessed modules - remaining.push(module); + remaining.push(moduleName); } } @@ -400,59 +453,71 @@ class BundleBuilder { /** * - * @param {string} module module name + * @param {string} moduleName module name * @param {ModuleInfo} info * @param {module:@ui5/fs.Resource} resource * @returns {Promise} */ - async writePreloadModule(module, info, resource) { + async writePreloadModule(moduleName, info, resource) { const outW = this.outW; - if ( /\.js$/.test(module) && (info == null || !info.requiresTopLevelScope) ) { - const compressedContent = await this.compressJS( await resource.buffer(), resource ); - outW.write(`function(){`); - outW.write( compressedContent ); + if ( /\.js$/.test(moduleName) && (info == null || !info.requiresTopLevelScope) ) { + outW.writeln(`function(){`); + // The module should be written to a new line in order for dev-tools to map breakpoints to it + outW.ensureNewLine(); + let moduleContent = (await resource.buffer()).toString(); + if (this.options.sourceMap) { + let moduleSourceMap; + ({moduleContent, moduleSourceMap} = + await this.getSourceMapForModule({ + moduleName, + moduleContent, + resourcePath: resource.getPath() + })); + + this.addSourceMap(moduleName, moduleSourceMap); + } + outW.write(moduleContent); this.exportGlobalNames(info); outW.ensureNewLine(); outW.write(`}`); - } else if ( /\.js$/.test(module) /* implicitly: && info != null && info.requiresTopLevelScope */ ) { + } else if ( /\.js$/.test(moduleName) /* implicitly: && info != null && info.requiresTopLevelScope */ ) { log.warn("**** warning: module %s requires top level scope" + - " and can only be embedded as a string (requires 'eval')", module); - const compressedContent = await this.compressJS( await resource.buffer(), resource ); - outW.write( makeStringLiteral( compressedContent ) ); - } else if ( /\.html$/.test(module) ) { - const fileContent = await resource.buffer(); + " and can only be embedded as a string (requires 'eval')", moduleName); + outW.write( makeStringLiteral( (await resource.buffer()).toString() ) ); + } else if ( /\.html$/.test(moduleName) ) { + const fileContent = (await resource.buffer()).toString(); outW.write( makeStringLiteral( fileContent ) ); - } else if ( /\.json$/.test(module) ) { - let fileContent = await resource.buffer(); + } else if ( /\.json$/.test(moduleName) ) { + let fileContent = (await resource.buffer()).toString(); if ( this.optimize ) { try { fileContent = JSON.stringify( JSON.parse( fileContent) ); } catch (e) { - log.verbose("Failed to parse JSON file %s. Ignoring error, skipping compression.", module); + log.verbose("Failed to parse JSON file %s. Ignoring error, skipping compression.", moduleName); log.verbose(e); } } outW.write(makeStringLiteral(fileContent)); - } else if ( /\.xml$/.test(module) ) { - let fileContent = await resource.buffer(); + } else if ( /\.xml$/.test(moduleName) ) { + let fileContent = (await resource.buffer()).toString(); if ( this.optimize ) { // For XML we use the pretty data // Do not minify if XML(View) contains an <*:pre> tag, // because whitespace of HTML
 should be preserved (should only happen rarely)
-				if (!xmlHtmlPrePattern.test(fileContent.toString())) {
-					fileContent = pd.xmlmin(fileContent.toString(), false);
+				if (!xmlHtmlPrePattern.test(fileContent)) {
+					fileContent = pd.xmlmin(fileContent, false);
 				}
 			}
 			outW.write( makeStringLiteral( fileContent ) );
-		} else if ( /\.properties$/.test(module) ) {
+		} else if ( /\.properties$/.test(moduleName) ) {
 			// Since the Builder is also used when building non-project resources (e.g. dependencies)
 			// *.properties files should be escaped if encoding option is specified
 			const fileContent = await escapePropertiesFile(resource);
 
 			outW.write( makeStringLiteral( fileContent ) );
 		} else {
-			log.error("don't know how to embed module " + module); // TODO throw?
+			log.error("don't know how to embed module " + moduleName); // TODO throw?
 		}
 
 		return true;
@@ -470,18 +535,19 @@ class BundleBuilder {
 		this.outW.ensureNewLine();
 		info.exposedGlobals.forEach( (globalName) => {
 			// Note: globalName can be assumed to be a valid identifier as it is used as variable name anyhow
-			this.outW.writeln(`this.${globalName}=${globalName};`);
+			this.writeWithSourceMap(`this.${globalName}=${globalName};\n`);
 		});
 	}
 
 	writeBundleInfos(sections) {
 		this.outW.ensureNewLine();
 
+		let bundleInfoStr = "";
 		if ( sections.length > 0 ) {
-			this.targetBundleFormat.beforeBundleInfo(this.outW);
+			bundleInfoStr = this.targetBundleFormat.beforeBundleInfo();
 			sections.forEach((section, idx) => {
 				if ( idx > 0 ) {
-					this.outW.writeln(",");
+					bundleInfoStr += ",\n";
 				}
 
 				if (!section.name) {
@@ -492,31 +558,116 @@ class BundleBuilder {
 						`The info might not work as expected. ` +
 						`The name must match the bundle filename (incl. extension such as '.js')`);
 				}
-				this.outW.write(`"${section.name}":[${section.modules.map(makeStringLiteral).join(",")}]`);
+				bundleInfoStr += `"${section.name}":[${section.modules.map(makeStringLiteral).join(",")}]`;
 			});
-			this.outW.writeln();
-			this.targetBundleFormat.afterBundleInfo(this.outW);
+			bundleInfoStr += "\n";
+			bundleInfoStr += this.targetBundleFormat.afterBundleInfo();
+
+			this.writeWithSourceMap(bundleInfoStr);
 		}
 	}
 
 	writeRequires(section) {
 		this.outW.ensureNewLine();
 		section.modules.forEach( (module) => {
-			this.targetBundleFormat.requireSync(this.outW, module);
+			this.writeWithSourceMap(this.targetBundleFormat.requireSync(module));
 		});
 	}
+
+	async getSourceMapForModule({moduleName, moduleContent, resourcePath}) {
+		let moduleSourceMap = null;
+		let newModuleContent = moduleContent;
+
+		const sourceMapUrlMatch = moduleContent.match(sourceMappingUrlPattern);
+		if (sourceMapUrlMatch) {
+			const sourceMapUrl = sourceMapUrlMatch[1];
+			log.verbose(`Found source map reference in content of module ${moduleName}: ${sourceMapUrl}`);
+
+			// Strip sourceMappingURL from module code to be bundled
+			// It has no effect and might be cause for confusion
+			newModuleContent = moduleContent.replace(sourceMappingUrlPattern, "");
+
+			if (sourceMapUrl) {
+				if (sourceMapUrl.startsWith("data:")) {
+					// Data-URI indicates an inline source map
+					const expectedTypeAndEncoding = "data:application/json;charset=utf-8;base64,";
+					if (sourceMapUrl.startsWith(expectedTypeAndEncoding)) {
+						const base64Content = sourceMapUrl.slice(expectedTypeAndEncoding.length);
+						moduleSourceMap = Buffer.from(base64Content, "base64").toString();
+					} else {
+						log.warn(
+							`Source map reference in module ${moduleName} is a data URI but has an unexpected` +
+							`encoding: ${sourceMapUrl}. Expected it to start with ` +
+							`"data:application/json;charset=utf-8;base64,"`);
+					}
+				} else if (httpPattern.test(sourceMapUrl)) {
+					log.warn(`Source map reference in module ${moduleName} is an absolute URL. ` +
+						`Currently, only relative URLs are supported.`);
+				} else if (path.posix.isAbsolute(sourceMapUrl)) {
+					log.warn(`Source map reference in module ${moduleName} is an absolute path. ` +
+						`Currently, only relative paths are supported.`);
+				} else {
+					const sourceMapPath = path.posix.join(path.posix.dirname(moduleName), sourceMapUrl);
+
+					try {
+						const sourceMapResource = await this.pool.findResource(sourceMapPath);
+						moduleSourceMap = (await sourceMapResource.buffer()).toString();
+					} catch (e) {
+						// No input source map
+						log.warn(`Unable to read source map for module ${moduleName}: ${e.message}`);
+					}
+				}
+			}
+		} else {
+			const sourceMapFileCandidate = resourcePath.slice("/resources/".length) + ".map";
+			log.verbose(`Could not find a sourceMappingURL reference in content of module ${moduleName}. ` +
+				`Attempting to find a source map resource based on the module's path: ${sourceMapFileCandidate}`);
+			try {
+				const sourceMapResource = await this.pool.findResource(sourceMapFileCandidate);
+				if (sourceMapResource) {
+					moduleSourceMap = (await sourceMapResource.buffer()).toString();
+				}
+			} catch (e) {
+				// No input source map
+				log.verbose(`Could not find a source map for module ${moduleName}: ${e.message}`);
+			}
+		}
+
+
+		if (moduleSourceMap) {
+			moduleSourceMap = JSON.parse(moduleSourceMap);
+		} else {
+			log.verbose(`No source map available for module ${moduleName}. Creating transient source map...`);
+			moduleSourceMap = createTransientSourceMap({
+				moduleName: path.posix.basename(resourcePath),
+				moduleContent
+			});
+		}
+
+		return {
+			moduleSourceMap,
+			moduleContent: newModuleContent
+		};
+	}
 }
 
 const CALL_SAP_UI_DEFINE = ["sap", "ui", "define"];
 
-function rewriteDefine(targetBundleFormat, code, moduleName) {
+/*
+ * @param {object} parameters
+ * @param {string} parameters.moduleName
+ * @param {string} parameters.moduleContent
+ * @param {object} [parameters.moduleSourceMap]
+ * @returns {Promise} Object containing moduleContent and
+ * 	moduleSourceMap (if one was provided) or null if no rewrite was applicable
+ */
+async function rewriteDefine({moduleName, moduleContent, moduleSourceMap}) {
 	let ast;
-	const codeStr = code.toString();
 	try {
-		ast = parseJS(codeStr, {range: true});
+		ast = parseJS(moduleContent, {range: true});
 	} catch (e) {
 		log.error("error while parsing %s: %s", moduleName, e.message);
-		return;
+		return {};
 	}
 
 	if ( ast.type === Syntax.Program &&
@@ -525,7 +676,6 @@ function rewriteDefine(targetBundleFormat, code, moduleName) {
 		const changes = [];
 		const defineCall = ast.body[0].expression;
 
-
 		// Inject module name if missing
 		if ( defineCall.arguments.length == 0 ||
 			defineCall.arguments[0].type !== Syntax.Literal ) {
@@ -543,7 +693,6 @@ function rewriteDefine(targetBundleFormat, code, moduleName) {
 
 			changes.push({
 				index,
-				count: 0,
 				value
 			});
 		}
@@ -555,29 +704,109 @@ function rewriteDefine(targetBundleFormat, code, moduleName) {
 			changes.push({
 				// asterisk marks the index: sap.ui.*define()
 				index: defineCall.callee.property.range[0],
-				count: 0,
 				value: "pre"
 			});
 		}
 
-		return applyChanges(codeStr, changes);
+		return transform(changes, moduleContent, moduleSourceMap);
 	}
 
-	return false;
+	return null;
 }
 
-function applyChanges(string, changes) {
-	// No sorting needed as changes are added in correct order
-
-	const array = Array.from(string);
+/*
+ * @param {object[]} changes Changes that should be applied to the code
+ * @param {string} moduleContent Code to transform
+ * @param {object} [moduleSourceMap] Optional source map that should be aligned with the content change
+ * @returns {Promise} Object containing moduleContent and
+ * 								moduleSourceMap (if one was provided)
+ */
+async function transform(changes, moduleContent, moduleSourceMap) {
+	const mappingChanges = [];
+
+	const array = Array.from(moduleContent);
+	// No sorting needed as changes are added in correct (reverse) order
 	changes.forEach((change) => {
+		if (moduleSourceMap) {
+			// Compute line and column for given index to re-align source map with inserted characters
+			const precedingCode = array.slice(0, change.index);
+
+			const line = precedingCode.reduce((lineCount, char) => {
+				if (char === "\n") {
+					lineCount++;
+				}
+				return lineCount;
+			}, 0);
+			const lineStartIndex = precedingCode.lastIndexOf("\n") + 1;
+			const column = change.index - lineStartIndex;
+
+			// Source map re-alignment needs to be done from front to back
+			mappingChanges.unshift({
+				line,
+				column,
+				columnDiff: change.value.length
+			});
+		}
+
+		// Apply modification
 		array.splice(
 			change.index,
-			change.count,
+			0,
 			change.value
 		);
 	});
-	return array.join("");
+	const transformedCode = array.join("");
+
+	if (moduleSourceMap) {
+		const mappings = decodeMappings(moduleSourceMap.mappings);
+		mappingChanges.forEach((mappingChange) => {
+			const lineMapping = mappings[mappingChange.line];
+			if (!lineMapping) {
+				// No mapping available that could be transformed
+				return;
+			}
+			// Mapping structure:
+			// [generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex]
+			lineMapping.forEach((mapping) => {
+				if (mapping[0] > mappingChange.column) {
+					// All column mappings for the generated code after any change
+					// need to be moved by the amount of inserted characters
+					mapping[0] = mapping[0] + mappingChange.columnDiff;
+				}
+			});
+		});
+
+		moduleSourceMap.mappings = encodeMappings(mappings);
+
+		// No need for file information in source map since the bundled code does not exist in any file anyways
+		delete moduleSourceMap.file;
+	}
+
+	return {
+		moduleContent: transformedCode,
+		moduleSourceMap
+	};
+}
+
+function createTransientSourceMap({moduleName, moduleContent, includeContent = false}) {
+	const sourceMap = {
+		version: 3,
+		sources: [moduleName],
+		// TODO: check whether moduleContent.match() with \n is better w.r.t performance/memory usage
+		mappings: encodeMappings(moduleContent.split("\n").map((line, i) => {
+			return [[0, 0, i, 0]];
+		}))
+	};
+	if (includeContent) {
+		sourceMap.sourcesContent = [moduleContent];
+	}
+	return sourceMap;
 }
 
 module.exports = BundleBuilder;
+
+// Export local functions for testing only
+/* istanbul ignore else */
+if (process.env.NODE_ENV === "test") {
+	module.exports.__localFunctions__ = {rewriteDefine, createTransientSourceMap};
+}
diff --git a/lib/lbt/bundle/BundleWriter.js b/lib/lbt/bundle/BundleWriter.js
index 8b63ba0ad..004bc9311 100644
--- a/lib/lbt/bundle/BundleWriter.js
+++ b/lib/lbt/bundle/BundleWriter.js
@@ -11,6 +11,8 @@ const SPACES_OR_TABS_ONLY = /^[ \t]+$/;
  *
  * Most methods have been extracted from JSMergeWriter.
  *
+ * columnOffset and lineOffset are used for sourcemap merging as reference to where we are at a given point in time
+ *
  * @author Frank Weigel
  * @since 1.27.0
  * @private
@@ -18,6 +20,8 @@ const SPACES_OR_TABS_ONLY = /^[ \t]+$/;
 class BundleWriter {
 	constructor() {
 		this.buf = "";
+		this.lineOffset = 0;
+		this.columnOffset = 0;
 		this.segments = [];
 		this.currentSegment = null;
 		this.currentSourceIndex = 0;
@@ -28,6 +32,11 @@ class BundleWriter {
 		let writeBuf = "";
 		for ( let i = 0; i < str.length; i++ ) {
 			writeBuf += str[i];
+			if (str[i] != null && str[i].split) {
+				const strSplit = str[i].split(NL);
+				this.lineOffset += strSplit.length - 1;
+				this.columnOffset += strSplit[strSplit.length - 1].length;
+			}
 		}
 		if ( writeBuf.length >= 1 ) {
 			this.buf += writeBuf;
@@ -40,15 +49,23 @@ class BundleWriter {
 	writeln(...str) {
 		for ( let i = 0; i < str.length; i++ ) {
 			this.buf += str[i];
+			if (str[i] != null && str[i].split) {
+				const strSplit = str[i].split(NL);
+				this.lineOffset += strSplit.length - 1;
+			}
 		}
 		this.buf += NL;
 		this.endsWithNewLine = true;
+		this.lineOffset += 1;
+		this.columnOffset = 0;
 	}
 
 	ensureNewLine() {
 		if ( !this.endsWithNewLine ) {
 			this.buf += NL;
 			this.endsWithNewLine = true;
+			this.lineOffset += 1;
+			this.columnOffset = 0;
 		}
 	}
 
diff --git a/lib/lbt/bundle/Resolver.js b/lib/lbt/bundle/Resolver.js
index 37b180e4a..931355711 100644
--- a/lib/lbt/bundle/Resolver.js
+++ b/lib/lbt/bundle/Resolver.js
@@ -289,7 +289,7 @@ class BundleResolver {
 
 				return collectModulesForSection(section).
 					then( (modules) => {
-						if ( section.mode == SectionType.Raw && section.sort ) {
+						if ( section.mode == SectionType.Raw && section.sort !== false ) {
 							// sort the modules in topological order
 							return topologicalSort(pool, modules).then( (modules) => {
 								log.verbose("      resolved modules (sorted): %s", modules);
diff --git a/lib/lbt/resources/LocatorResource.js b/lib/lbt/resources/LocatorResource.js
index 0724e6698..cb73c721e 100644
--- a/lib/lbt/resources/LocatorResource.js
+++ b/lib/lbt/resources/LocatorResource.js
@@ -1,14 +1,8 @@
 const Resource = require("./Resource");
 
-
-function extractName(path) {
-	return path.slice( "/resources/".length);
-}
-
-
 class LocatorResource extends Resource {
-	constructor(pool, resource) {
-		super(pool, extractName(resource.getPath()), null, resource.getStatInfo());
+	constructor(pool, resource, moduleName) {
+		super(pool, moduleName, null, resource.getStatInfo());
 		this.resource = resource;
 	}
 
@@ -19,6 +13,10 @@ class LocatorResource extends Resource {
 	getProject() {
 		return this.resource._project;
 	}
+
+	getPath() {
+		return this.resource.getPath();
+	}
 }
 
 module.exports = LocatorResource;
diff --git a/lib/lbt/resources/LocatorResourcePool.js b/lib/lbt/resources/LocatorResourcePool.js
index 104051584..8d56a36e4 100644
--- a/lib/lbt/resources/LocatorResourcePool.js
+++ b/lib/lbt/resources/LocatorResourcePool.js
@@ -2,12 +2,16 @@ const ResourcePool = require("./ResourcePool");
 const LocatorResource = require("./LocatorResource");
 
 class LocatorResourcePool extends ResourcePool {
-	prepare(resources) {
+	prepare(resources, moduleNameMapping) {
 		resources = resources.filter( (res) => !res.getStatInfo().isDirectory() );
 		return Promise.all(
-			resources.map(
-				(resource) => this.addResource( new LocatorResource(this, resource) )
-			).filter(Boolean)
+			resources.map((resource) => {
+				let moduleName = moduleNameMapping && moduleNameMapping[resource.getPath()];
+				if (!moduleName) {
+					moduleName = resource.getPath().slice("/resources/".length);
+				}
+				return this.addResource(new LocatorResource(this, resource, moduleName));
+			}).filter(Boolean)
 		);
 	}
 }
diff --git a/lib/lbt/resources/Resource.js b/lib/lbt/resources/Resource.js
index 294379638..efd615fac 100644
--- a/lib/lbt/resources/Resource.js
+++ b/lib/lbt/resources/Resource.js
@@ -18,6 +18,13 @@ class Resource {
 	async buffer() {
 		return readFile(this.file);
 	}
+
+	/**
+	 * @returns {Promise} String of the file content
+	 */
+	async string() {
+		return (await this.buffer()).toString();
+	}
 }
 
 module.exports = Resource;
diff --git a/lib/lbt/resources/ResourceCollector.js b/lib/lbt/resources/ResourceCollector.js
index 3acc2f88d..a715f28cb 100644
--- a/lib/lbt/resources/ResourceCollector.js
+++ b/lib/lbt/resources/ResourceCollector.js
@@ -193,17 +193,16 @@ class ResourceCollector {
 	}
 
 	async determineResourceDetails({
-		debugResources, mergedResources, designtimeResources, supportResources, debugBundles
+		debugResources, mergedResources, designtimeResources, supportResources
 	}) {
 		const baseNames = new Set();
 		const debugFilter = new ResourceFilterList(debugResources);
 		const mergeFilter = new ResourceFilterList(mergedResources);
 		const designtimeFilter = new ResourceFilterList(designtimeResources);
 		const supportFilter = new ResourceFilterList(supportResources);
-		const debugBundleFilter = new ResourceFilterList(debugBundles);
 
 		const promises = [];
-		const nonBundledDebugResources = [];
+		const debugResourcesInfo = [];
 
 		for (const [name, info] of this._resources.entries()) {
 			if ( debugFilter.matches(name) ) {
@@ -231,13 +230,14 @@ class ResourceCollector {
 			}
 
 			if ( /(?:\.js|\.view\.xml|\.control\.xml|\.fragment\.xml)$/.test(name) ) {
-				if ( (!info.isDebug || debugBundleFilter.matches(name)) ) {
-					// Only analyze non-debug files and special debug bundles (like sap-ui-core-dbg.js)
+				if ( !info.isDebug ) {
+					// Only analyze non-dbg files in first run
 					promises.push(
 						this.enrichWithDependencyInfo(info)
 					);
 				} else {
-					nonBundledDebugResources.push(info);
+					// Collect dbg files to be handled in a second step (see below)
+					debugResourcesInfo.push(info);
 				}
 			}
 
@@ -279,19 +279,37 @@ class ResourceCollector {
 
 		await Promise.all(promises);
 
-		for (let i = nonBundledDebugResources.length - 1; i >= 0; i--) {
-			const dbgInfo = nonBundledDebugResources[i];
+		const debugBundlePromises = [];
+
+		for (let i = debugResourcesInfo.length - 1; i >= 0; i--) {
+			const dbgInfo = debugResourcesInfo[i];
 			const nonDebugName = ResourceInfoList.getNonDebugName(dbgInfo.name);
 			const nonDbgInfo = this._resources.get(nonDebugName);
-			const newDbgInfo = new ResourceInfo(dbgInfo.name);
-
-			// First copy info of analysis from non-dbg file (included, required, condRequired, ...)
-			newDbgInfo.copyFrom(null, nonDbgInfo);
-			// Then copy over info from dbg file to properly set name, isDebug, etc.
-			newDbgInfo.copyFrom(null, dbgInfo);
 
-			this._resources.set(dbgInfo.name, newDbgInfo);
+			// FIXME: "merged" property is only calculated in ResourceInfo#copyFrom
+			// Therefore using the same logic here to compute it.
+			if (!nonDbgInfo || (nonDbgInfo.included != null && nonDbgInfo.included.size > 0)) {
+				// We need to analyze the dbg resource if there is no non-dbg variant or
+				// it is a bundle because we will (usually) have different content.
+				debugBundlePromises.push(
+					this.enrichWithDependencyInfo(dbgInfo)
+				);
+			} else {
+				// If the non-dbg resource is not a bundle, we can just copy over the info and skip
+				// analyzing the dbg variant as both should have the same info.
+
+				const newDbgInfo = new ResourceInfo(dbgInfo.name);
+
+				// First copy info of analysis from non-dbg file (included, required, condRequired, ...)
+				newDbgInfo.copyFrom(null, nonDbgInfo);
+				// Then copy over info from dbg file to properly set name, isDebug, etc.
+				newDbgInfo.copyFrom(null, dbgInfo);
+
+				this._resources.set(dbgInfo.name, newDbgInfo);
+			}
 		}
+
+		await Promise.all(debugBundlePromises);
 	}
 
 	createOrphanFilters() {
diff --git a/lib/lbt/utils/parseUtils.js b/lib/lbt/utils/parseUtils.js
index 8e8f796a4..27ac5abad 100644
--- a/lib/lbt/utils/parseUtils.js
+++ b/lib/lbt/utils/parseUtils.js
@@ -9,7 +9,7 @@ function parseJS(code, userOptions = {}) {
 	// allowed options and their defaults
 	const options = {
 		comment: false,
-		ecmaVersion: 2020,
+		ecmaVersion: 2021, // NOTE: Adopt JSModuleAnalyzer.js to allow new Syntax when upgrading to newer ECMA versions
 		range: false,
 		sourceType: "script",
 	};
diff --git a/lib/processors/bundlers/moduleBundler.js b/lib/processors/bundlers/moduleBundler.js
index 39498f86f..b9edca580 100644
--- a/lib/processors/bundlers/moduleBundler.js
+++ b/lib/processors/bundlers/moduleBundler.js
@@ -89,7 +89,8 @@ const log = require("@ui5/logger").getLogger("builder:processors:bundlers:module
  *
  * @public
  * @typedef {object} ModuleBundleOptions
- * @property {boolean} [optimize=false] If set to 'true' the module bundle gets minified
+ * @property {boolean} [optimize=true] Whether the module bundle gets minified
+ * @property {boolean} [sourceMap=true] Whether to generate a source map file for the bundle
  * @property {boolean} [decorateBootstrapModule=false] If set to 'false', the module won't be decorated
  *   with an optimization marker
  * @property {boolean} [addTryCatchRestartWrapper=false] Whether to wrap bootable module bundles with
@@ -101,23 +102,41 @@ const log = require("@ui5/logger").getLogger("builder:processors:bundlers:module
  */
 
 /**
- * Legacy preload bundler.
+ * Result set
+ *
+ * @public
+ * @typedef {object} ModuleBundlerResult
+ * @property {module:@ui5/fs.Resource} bundle Bundle resource
+ * @property {module:@ui5/fs.Resource} sourceMap Source Map
+ * @memberof module:@ui5/builder.processors
+ */
+
+/**
+ * Legacy module bundler.
  *
  * @public
  * @alias module:@ui5/builder.processors.moduleBundler
  * @param {object} parameters Parameters
  * @param {module:@ui5/fs.Resource[]} parameters.resources Resources
  * @param {object} parameters.options Options
+ * @param {object} [parameters.options.moduleNameMapping]
+ 				Optional mapping of resource paths to module name in order to overwrite the default determination
  * @param {ModuleBundleDefinition} parameters.options.bundleDefinition Module bundle definition
- * @param {ModuleBundleOptions} parameters.options.bundleOptions Module bundle options
- * @returns {Promise} Promise resolving with module bundle resources
+ * @param {ModuleBundleOptions} [parameters.options.bundleOptions] Module bundle options
+ * @returns {Promise}
+ * Promise resolving with module bundle resources
  */
-module.exports = function({resources, options: {bundleDefinition, bundleOptions}}) {
-//	console.log("preloadBundler bundleDefinition:");
-//	console.log(JSON.stringify(options.bundleDefinition, null, 4));
-
-	// TODO 3.0: Fix defaulting behavior, align with JSDoc
-	bundleOptions = bundleOptions || {optimize: true};
+module.exports = function({resources, options: {bundleDefinition, bundleOptions, moduleNameMapping}}) {
+	// Apply defaults without modifying the passed object
+	bundleOptions = Object.assign({}, {
+		optimize: true,
+		sourceMap: true,
+		decorateBootstrapModule: false,
+		addTryCatchRestartWrapper: false,
+		usePredefineCalls: false,
+		numberOfParts: 1,
+		ignoreMissingModules: false
+	}, bundleOptions);
 
 	const pool = new LocatorResourcePool({
 		ignoreMissingModules: bundleOptions.ignoreMissingModules
@@ -130,7 +149,7 @@ module.exports = function({resources, options: {bundleDefinition, bundleOptions}
 		log.verbose(`bundleOptions: ${JSON.stringify(bundleOptions, null, 2)}`);
 	}
 
-	return pool.prepare( resources ).
+	return pool.prepare( resources, moduleNameMapping ).
 		then( () => builder.createBundle(bundleDefinition, bundleOptions) ).
 		then( (results) => {
 			let bundles;
@@ -142,13 +161,20 @@ module.exports = function({resources, options: {bundleDefinition, bundleOptions}
 
 			return Promise.all(bundles.map((bundleObj) => {
 				if ( bundleObj ) {
-					const {name, content} = bundleObj;
+					const {name, content, sourceMap} = bundleObj;
 					// console.log("creating bundle as '%s'", "/resources/" + name);
-					const resource = new EvoResource({
+					const res = {};
+					res.bundle = new EvoResource({
 						path: "/resources/" + name,
 						string: content
 					});
-					return resource;
+					if (sourceMap) {
+						res.sourceMap = new EvoResource({
+							path: "/resources/" + name + ".map",
+							string: sourceMap
+						});
+					}
+					return res;
 				}
 			}));
 		});
diff --git a/lib/processors/debugFileCreator.js b/lib/processors/debugFileCreator.js
deleted file mode 100644
index e47200743..000000000
--- a/lib/processors/debugFileCreator.js
+++ /dev/null
@@ -1,52 +0,0 @@
-const copier = require("./resourceCopier");
-const util = require("util");
-
-/**
- * Creates *-dbg.js files for all supplied resources.
- *
- * @public
- * @alias module:@ui5/builder.processors.debugFileCreator
- * @param {object} parameters Parameters
- * @param {module:@ui5/fs.Resource[]} parameters.resources List of resources to be processed
- * @param {fs|module:@ui5/fs.fsInterface} parameters.fs Node fs or
- *   custom [fs interface]{@link module:resources/module:@ui5/fs.fsInterface}
- * @returns {Promise} Promise resolving with debug resources
- */
-module.exports = function({resources, fs}) {
-	const options = {
-		pattern: /((?:\.view|\.fragment|\.controller|\.designtime|\.support)?\.js)$/,
-		replacement: "-dbg$1"
-	};
-
-	const stat = util.promisify(fs.stat);
-
-	return Promise.all(
-		resources.map((resource) => {
-			// check whether the debug resource path is already used in the
-			// previous tasks
-			return stat(resource.getPath().replace(options.pattern, options.replacement))
-				.then(
-					// if the file can be found, it should be filtered out from creating debug file
-					() => false,
-					(err) => {
-						if (err.code === "ENOENT") {
-							// if the file can't be found, it should be included in creating debug file
-							return resource;
-						}
-						// if it's other error, forward it
-						throw err;
-					}
-				);
-		})
-	).then((results) => {
-		// filter out the resouces whose debug source path is already used
-		return results.filter((result) => {
-			return !!result;
-		});
-	}).then((filteredResources) => {
-		return copier({
-			resources: filteredResources,
-			options: options
-		});
-	});
-};
diff --git a/lib/processors/minifier.js b/lib/processors/minifier.js
new file mode 100644
index 000000000..bc1768ee9
--- /dev/null
+++ b/lib/processors/minifier.js
@@ -0,0 +1,90 @@
+const path = require("path");
+const terser = require("terser");
+const Resource = require("@ui5/fs").Resource;
+/**
+ * Preserve comments which contain:
+ * 
    + *
  • copyright notice
  • + *
  • license terms
  • + *
  • "@ui5-bundle"
  • + *
  • "@ui5-bundle-raw-include"
  • + *
+ * + * @type {RegExp} + */ +const copyrightCommentsAndBundleCommentPattern = /copyright|\(c\)(?:[0-9]+|\s+[0-9A-za-z])|released under|license|\u00a9|^@ui5-bundle-raw-include |^@ui5-bundle /i; +const debugFileRegex = /((?:\.view|\.fragment|\.controller|\.designtime|\.support)?\.js)$/; + + +/** + * Result set + * + * @public + * @typedef {object} MinifierResult + * @property {module:@ui5/fs.Resource} resource Minified resource + * @property {module:@ui5/fs.Resource} dbgResource Debug (non-minified) variant + * @property {module:@ui5/fs.Resource} sourceMap Source Map + * @memberof module:@ui5/builder.processors + */ + +/** + * Minifies the supplied resources. + * + * @public + * @alias module:@ui5/builder.processors.minifier + * @param {object} parameters Parameters + * @param {module:@ui5/fs.Resource[]} parameters.resources List of resources to be processed + * @param {object} [parameters.options] Options + * @param {boolean} [parameters.options.addSourceMappingUrl=true] + * Whether to add a sourceMappingURL reference to the end of the minified resource + * @returns {Promise} + * Promise resolving with object of resource, dbgResource and sourceMap + */ +module.exports = async function({resources, options: {addSourceMappingUrl = true} = {}}) { + return Promise.all(resources.map(async (resource) => { + const dbgPath = resource.getPath().replace(debugFileRegex, "-dbg$1"); + const dbgResource = await resource.clone(); + dbgResource.setPath(dbgPath); + + const filename = path.posix.basename(resource.getPath()); + const code = await resource.getString(); + try { + const sourceMapOptions = { + filename + }; + if (addSourceMappingUrl) { + sourceMapOptions.url = filename + ".map"; + } + const dbgFilename = path.posix.basename(dbgPath); + const result = await terser.minify({ + // Use debug-name since this will be referenced in the source map "sources" + [dbgFilename]: code + }, { + output: { + comments: copyrightCommentsAndBundleCommentPattern, + wrap_func_args: false + }, + compress: false, + mangle: { + reserved: [ + "jQuery", + "jquery", + "sap", + ] + }, + sourceMap: sourceMapOptions + }); + resource.setString(result.code); + const sourceMapResource = new Resource({ + path: resource.getPath() + ".map", + string: result.map + }); + return {resource, dbgResource, sourceMapResource}; + } catch (err) { + // Note: err.filename contains the debug-name + throw new Error( + `Minification failed with error: ${err.message} in file ${filename} ` + + `(line ${err.line}, col ${err.col}, pos ${err.pos})`); + } + })); +}; diff --git a/lib/processors/resourceCopier.js b/lib/processors/resourceCopier.js deleted file mode 100644 index dd6247854..000000000 --- a/lib/processors/resourceCopier.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copy files to a different path. - * - * @public - * @alias module:@ui5/builder.processors.resourceCopier - * @param {object} parameters Parameters - * @param {module:@ui5/fs.Resource[]} parameters.resources List of resources to be processed - * @param {object} parameters.options Options - * @param {string} parameters.options.pattern Search pattern for path - * @param {string} parameters.options.replacement Replacement string for path - * @returns {Promise} Promise resolving with the cloned resources - */ -module.exports = function({resources, options: {pattern, replacement}}) { - if (!pattern || typeof replacement !== "string") { - return Promise.reject(new Error("[resourceCopier] Invalid options: Missing pattern or replacement.")); - } - - return Promise.all(resources.map((resource) => { - return resource.clone().then((newResource) => { - newResource.setPath(newResource.getPath().replace(pattern, replacement)); - return newResource; - }); - })); -}; diff --git a/lib/processors/resourceListCreator.js b/lib/processors/resourceListCreator.js index ba012488a..cf4d811b3 100644 --- a/lib/processors/resourceListCreator.js +++ b/lib/processors/resourceListCreator.js @@ -66,17 +66,6 @@ const DEFAULT_SUPPORT_RESOURCES_FILTER = [ "**/*.support.js" ]; -/** - * Hard coded debug bundle, to trigger separate analysis for this filename - * because sap-ui-core.js and sap-ui-core-dbg.js have different includes - * - * @type {string[]} - */ -const DEBUG_BUNDLES = [ - "sap-ui-core-dbg.js", - "sap-ui-core-nojQuery-dbg.js" -]; - /** * Creates and adds resources.json entry (itself) to the list. * @@ -138,8 +127,7 @@ module.exports = async function({resources, dependencyResources = [], options}) debugResources: DEFAULT_DEBUG_RESOURCES_FILTER, mergedResources: DEFAULT_BUNDLE_RESOURCES_FILTER, designtimeResources: DEFAULT_DESIGNTIME_RESOURCES_FILTER, - supportResources: DEFAULT_SUPPORT_RESOURCES_FILTER, - debugBundles: DEBUG_BUNDLES + supportResources: DEFAULT_SUPPORT_RESOURCES_FILTER }, options); const pool = new LocatorResourcePool(); @@ -158,12 +146,10 @@ module.exports = async function({resources, dependencyResources = [], options}) } await collector.determineResourceDetails({ - pool, debugResources: options.debugResources, mergedResources: options.mergedResources, designtimeResources: options.designtimeResources, - supportResources: options.supportResources, - debugBundles: options.debugBundles + supportResources: options.supportResources }); // group resources by components and create ResourceInfoLists diff --git a/lib/processors/uglifier.js b/lib/processors/uglifier.js deleted file mode 100644 index 7b6e1ebc9..000000000 --- a/lib/processors/uglifier.js +++ /dev/null @@ -1,45 +0,0 @@ -const terser = require("terser"); -/** - * Preserve comments which contain: - *
    - *
  • copyright notice
  • - *
  • license terms
  • - *
  • "@ui5-bundle"
  • - *
  • "@ui5-bundle-raw-include"
  • - *
- * - * @type {RegExp} - */ -const copyrightCommentsAndBundleCommentPattern = /copyright|\(c\)(?:[0-9]+|\s+[0-9A-za-z])|released under|license|\u00a9|^@ui5-bundle-raw-include |^@ui5-bundle /i; - -/** - * Minifies the supplied resources. - * - * @public - * @alias module:@ui5/builder.processors.uglifier - * @param {object} parameters Parameters - * @param {module:@ui5/fs.Resource[]} parameters.resources List of resources to be processed - * @returns {Promise} Promise resolving with uglified resources - */ -module.exports = function({resources}) { - return Promise.all(resources.map(async (resource) => { - const code = await resource.getString(); - try { - const result = await terser.minify({ - [resource.getPath()]: code - }, { - output: { - comments: copyrightCommentsAndBundleCommentPattern, - wrap_func_args: false - }, - compress: false - }); - resource.setString(result.code); - return resource; - } catch (err) { - throw new Error( - `Uglification failed with error: ${err.message} in file ${err.filename} ` + - `(line ${err.line}, col ${err.col}, pos ${err.pos})`); - } - })); -}; diff --git a/lib/tasks/TaskUtil.js b/lib/tasks/TaskUtil.js index 0420d1b39..97e8d2742 100644 --- a/lib/tasks/TaskUtil.js +++ b/lib/tasks/TaskUtil.js @@ -51,14 +51,14 @@ class TaskUtil { * This method is only available to custom task extensions defining * Specification Version 2.2 and above. * - * @param {module:@ui5/fs.Resource} resource The resource the tag should be stored for + * @param {string|module:@ui5/fs.Resource} resourcePath Path or resource-instance the tag should be stored for * @param {string} tag Name of the tag. * Currently only the [STANDARD_TAGS]{@link module:@ui5/builder.tasks.TaskUtil#STANDARD_TAGS} are allowed * @param {string|boolean|integer} [value=true] Tag value. Must be primitive * @public */ - setTag(resource, tag, value) { - return this._projectBuildContext.getResourceTagCollection().setTag(resource, tag, value); + setTag(resourcePath, tag, value) { + return this._projectBuildContext.getResourceTagCollection().setTag(resourcePath, tag, value); } /** @@ -68,14 +68,14 @@ class TaskUtil { * This method is only available to custom task extensions defining * Specification Version 2.2 and above. * - * @param {module:@ui5/fs.Resource} resource The resource the tag should be retrieved for + * @param {string|module:@ui5/fs.Resource} resourcePath Path or resource-instance the tag should be retrieved for * @param {string} tag Name of the tag * @returns {string|boolean|integer|undefined} Tag value for the given resource. * undefined if no value is available * @public */ - getTag(resource, tag) { - return this._projectBuildContext.getResourceTagCollection().getTag(resource, tag); + getTag(resourcePath, tag) { + return this._projectBuildContext.getResourceTagCollection().getTag(resourcePath, tag); } /** @@ -86,12 +86,12 @@ class TaskUtil { * This method is only available to custom task extensions defining * Specification Version 2.2 and above. * - * @param {module:@ui5/fs.Resource} resource The resource the tag should be cleared for + * @param {string|module:@ui5/fs.Resource} resourcePath Path or resource-instance the tag should be cleared for * @param {string} tag Tag * @public */ - clearTag(resource, tag) { - return this._projectBuildContext.getResourceTagCollection().clearTag(resource, tag); + clearTag(resourcePath, tag) { + return this._projectBuildContext.getResourceTagCollection().clearTag(resourcePath, tag); } /** @@ -108,6 +108,18 @@ class TaskUtil { return this._projectBuildContext.isRootProject(); } + /** + * Retrieves a build option defined by it's keykey is stored, undefined is returned. + * + * @param {string} key The option key + * @returns {object|undefined} The build option (or undefined) + * @public + */ + getBuildOption(key) { + return this._projectBuildContext.getOption(key); + } + /** * Register a function that must be executed once the build is finished. This can be used to, for example, * clean up files temporarily created on the file system. If the callback returns a Promise, it will be waited for. diff --git a/lib/tasks/buildThemes.js b/lib/tasks/buildThemes.js index 1df0bad8b..d799bf148 100644 --- a/lib/tasks/buildThemes.js +++ b/lib/tasks/buildThemes.js @@ -54,8 +54,12 @@ module.exports = async function({ */ let availableLibraries; if (pAvailableLibraries) { - availableLibraries = (await pAvailableLibraries).map((resource) => { - return resource.getPath().replace(/[^/]*\.library/i, ""); + availableLibraries = []; + (await pAvailableLibraries).forEach((resource) => { + const library = path.dirname(resource.getPath()); + if (!availableLibraries.includes(library)) { + availableLibraries.push(library); + } }); } let availableThemes; diff --git a/lib/tasks/bundlers/generateBundle.js b/lib/tasks/bundlers/generateBundle.js index 49698e4ba..02b9040fd 100644 --- a/lib/tasks/bundlers/generateBundle.js +++ b/lib/tasks/bundlers/generateBundle.js @@ -1,4 +1,5 @@ const moduleBundler = require("../../processors/bundlers/moduleBundler"); +const createModuleNameMapping = require("./utils/createModuleNameMapping"); const ReaderCollectionPrioritized = require("@ui5/fs").ReaderCollectionPrioritized; /** @@ -13,30 +14,97 @@ const ReaderCollectionPrioritized = require("@ui5/fs").ReaderCollectionPrioritiz * @param {object} parameters.options Options * @param {string} parameters.options.projectName Project name * @param {ModuleBundleDefinition} parameters.options.bundleDefinition Module bundle definition - * @param {ModuleBundleOptions} parameters.options.bundleOptions Module bundle options + * @param {ModuleBundleOptions} [parameters.options.bundleOptions] Module bundle options * @returns {Promise} Promise resolving with undefined once data has been written */ module.exports = function({ workspace, dependencies, taskUtil, options: {projectName, bundleDefinition, bundleOptions} }) { - const combo = new ReaderCollectionPrioritized({ - name: `libraryBundler - prioritize workspace over dependencies: ${projectName}`, + let combo = new ReaderCollectionPrioritized({ + name: `generateBundle - prioritize workspace over dependencies: ${projectName}`, readers: [workspace, dependencies] }); - return combo.byGlob("/resources/**/*.{js,json,xml,html,properties,library}").then((resources) => { - return moduleBundler({ - options: { - bundleDefinition, - bundleOptions - }, - resources - }).then((bundles) => { - return Promise.all(bundles.map((bundle) => { + const optimize = !bundleOptions || bundleOptions.optimize !== false; + if (taskUtil) { + /* Scenarios + 1. Optimize bundle with minification already done + Workspace: + * /resources/my/lib/Control.js [ui5:HasDebugVariant] + * /resources/my/lib/Control.js.map [ui5:HasDebugVariant] + * /resources/my/lib/Control-dbg.js [ui5:IsDebugVariant] + + Bundler input: + * /resources/my/lib/Control.js + * /resources/my/lib/Control.js.map + + => Filter out debug resources + + 2. Optimize bundle with no minification + * /resources/my/lib/Control.js + + => No action necessary + + 3. Debug-bundle with minification already done + Workspace: + * /resources/my/lib/Control.js [ui5:HasDebugVariant] + * /resources/my/lib/Control.js.map [ui5:HasDebugVariant] + * /resources/my/lib/Control-dbg.js [ui5:IsDebugVariant] + + Bundler input: + * /resources/my/lib/Control-dbg.js + * moduleNameMapping: [{"/resources/my/lib/Control-dbg.js": "my/lib/Control.js"}] + + => Filter out minified-resources (tagged as "HasDebugVariant", incl. source maps) and rename debug-files + + 4. Debug-bundle with no minification + * /resources/my/lib/Control.js + + => No action necessary + + 5. Bundle with external input (optimize or not), e.g. TS-project + Workspace: + * /resources/my/lib/Control.ts + * /resources/my/lib/Control.js + * /resources/my/lib/Control.js.map + + Bundler input: + * /resources/my/lib/Control.js + * /resources/my/lib/Control.js.map + */ + + // Omit -dbg files for optimize bundles and vice versa + const filterTag = optimize ? + taskUtil.STANDARD_TAGS.IsDebugVariant : taskUtil.STANDARD_TAGS.HasDebugVariant; + combo = combo.filter(function(resource) { + return !taskUtil.getTag(resource, filterTag); + }); + } + + return combo.byGlob("/resources/**/*.{js,json,xml,html,properties,library,js.map}").then((resources) => { + const options = {bundleDefinition, bundleOptions}; + if (!optimize && taskUtil) { + options.moduleNameMapping = createModuleNameMapping({resources, taskUtil}); + } + return moduleBundler({options, resources}).then((bundles) => { + return Promise.all(bundles.map(({bundle, sourceMap} = {}) => { + if (!bundle) { + // Skip empty bundles + return; + } if (taskUtil) { taskUtil.setTag(bundle, taskUtil.STANDARD_TAGS.IsBundle); + if (sourceMap) { + // Clear tag that might have been set by the minify task, in cases where + // the bundle name is identical to a source file + taskUtil.clearTag(sourceMap, taskUtil.STANDARD_TAGS.OmitFromBuildResult); + } + } + const writes = [workspace.write(bundle)]; + if (sourceMap) { + writes.push(workspace.write(sourceMap)); } - return workspace.write(bundle); + return Promise.all(writes); })); }); }); diff --git a/lib/tasks/bundlers/generateComponentPreload.js b/lib/tasks/bundlers/generateComponentPreload.js index b9d8faaf5..0bae96d79 100644 --- a/lib/tasks/bundlers/generateComponentPreload.js +++ b/lib/tasks/bundlers/generateComponentPreload.js @@ -28,13 +28,20 @@ const {negateFilters} = require("../../lbt/resources/ResourceFilterList"); module.exports = function({ workspace, dependencies, taskUtil, options: {projectName, paths, namespaces, excludes = []} }) { - const combo = new ReaderCollectionPrioritized({ + let combo = new ReaderCollectionPrioritized({ name: `generateComponentPreload - prioritize workspace over dependencies: ${projectName}`, readers: [workspace, dependencies] }); + if (taskUtil) { + combo = combo.filter(function(resource) { + // Remove any debug variants + return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.IsDebugVariant); + }); + } + // TODO 3.0: Limit to workspace resources? - return combo.byGlob("/resources/**/*.{js,json,xml,html,properties,library}") + return combo.byGlob("/resources/**/*.{js,json,xml,html,properties,library,js.map}") .then(async (resources) => { let allNamespaces = []; if (paths) { @@ -141,12 +148,19 @@ module.exports = function({ }); })); }) - .then((processedResources) => { - return Promise.all(processedResources.map((resource) => { + .then((results) => { + const bundles = Array.prototype.concat.apply([], results); + return Promise.all(bundles.map(({bundle, sourceMap}) => { if (taskUtil) { - taskUtil.setTag(resource[0], taskUtil.STANDARD_TAGS.IsBundle); + taskUtil.setTag(bundle, taskUtil.STANDARD_TAGS.IsBundle); + // Clear tag that might have been set by the minify task, in cases where + // the bundle name is identical to a source file + taskUtil.clearTag(sourceMap, taskUtil.STANDARD_TAGS.OmitFromBuildResult); } - return workspace.write(resource[0]); + return Promise.all([ + workspace.write(bundle), + workspace.write(sourceMap) + ]); })); }); }; diff --git a/lib/tasks/bundlers/generateFlexChangesBundle.js b/lib/tasks/bundlers/generateFlexChangesBundle.js index 81d1f88b2..3bd3b37be 100644 --- a/lib/tasks/bundlers/generateFlexChangesBundle.js +++ b/lib/tasks/bundlers/generateFlexChangesBundle.js @@ -1,5 +1,6 @@ const log = require("@ui5/logger").getLogger("builder:tasks:bundlers:generateFlexChangesBundle"); const flexChangesBundler = require("../../processors/bundlers/flexChangesBundler"); +const semver = require("semver"); /** * Task to create changesBundle.json file containing all changes stored in the /changes folder for easier consumption @@ -68,9 +69,9 @@ module.exports = async function({workspace, taskUtil, options: {namespace}}) { const allResources = await workspace.byGlob( `${pathPrefix}/changes/*.{change,variant,ctrl_variant,ctrl_variant_change,ctrl_variant_management_change}`); if (allResources.length > 0) { - const version = await readManifestMinUI5Version(); + const version = semver.coerce(await readManifestMinUI5Version()); let hasFlexBundleVersion = false; - if (parseFloat(version) >= 1.73) { + if (semver.compare(version, "1.73.0") >= 0) { hasFlexBundleVersion = true; } const processedResources = await flexChangesBundler({ diff --git a/lib/tasks/bundlers/generateLibraryPreload.js b/lib/tasks/bundlers/generateLibraryPreload.js index 8b29b4491..0a027620a 100644 --- a/lib/tasks/bundlers/generateLibraryPreload.js +++ b/lib/tasks/bundlers/generateLibraryPreload.js @@ -2,6 +2,7 @@ const log = require("@ui5/logger").getLogger("builder:tasks:bundlers:generateLib const moduleBundler = require("../../processors/bundlers/moduleBundler"); const ReaderCollectionPrioritized = require("@ui5/fs").ReaderCollectionPrioritized; const {negateFilters} = require("../../lbt/resources/ResourceFilterList"); +const createModuleNameMapping = require("./utils/createModuleNameMapping"); function getDefaultLibraryPreloadFilters(namespace, excludes) { const filters = [ @@ -176,6 +177,8 @@ function createLibraryBundles(libraryNamespace, resources, excludes) { ignoreMissingModules: true, skipIfEmpty: true } + // Note: Although the bundle uses optimize=false, there is + // no moduleNameMapping needed, as support files are excluded from minification. }, resources }) @@ -211,6 +214,10 @@ function getModuleBundlerOptions(config) { moduleBundlerOptions.bundleDefinition.sections.unshift(providedSection); } + if (config.moduleNameMapping) { + moduleBundlerOptions.moduleNameMapping = config.moduleNameMapping; + } + return moduleBundlerOptions; } @@ -272,12 +279,19 @@ function getSapUiCoreBunDef(name, filters, preload) { * @returns {Promise} Promise resolving with undefined once data has been written */ module.exports = function({workspace, dependencies, taskUtil, options: {projectName, excludes = []}}) { - const combo = new ReaderCollectionPrioritized({ + let combo = new ReaderCollectionPrioritized({ name: `libraryBundler - prioritize workspace over dependencies: ${projectName}`, readers: [workspace, dependencies] }); - return combo.byGlob("/**/*.{js,json,xml,html,properties,library}").then((resources) => { + if (taskUtil) { + combo = combo.filter(function(resource) { + // Remove any debug variants + return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.IsDebugVariant); + }); + } + + return combo.byGlob("/**/*.{js,json,xml,html,properties,library,js.map}").then(async (resources) => { // Find all libraries and create a library-preload.js bundle let p = Promise.resolve(); @@ -296,6 +310,24 @@ module.exports = function({workspace, dependencies, taskUtil, options: {projectN const isEvo = resources.find((resource) => { return resource.getPath() === "/resources/ui5loader.js"; }); + + let unoptimizedModuleNameMapping; + let unoptimizedResources = resources; + if (taskUtil) { + unoptimizedResources = await new ReaderCollectionPrioritized({ + name: `libraryBundler - prioritize workspace over dependencies: ${projectName}`, + readers: [workspace, dependencies] + }).filter(function(resource) { + // Remove any non-debug variants + return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.HasDebugVariant); + }).byGlob("/**/*.{js,json,xml,html,properties,library,js.map}"); + + unoptimizedModuleNameMapping = createModuleNameMapping({ + resources: unoptimizedResources, + taskUtil + }); + } + let filters; if (isEvo) { filters = ["ui5loader-autoconfig.js"]; @@ -308,8 +340,11 @@ module.exports = function({workspace, dependencies, taskUtil, options: {projectN resources }), moduleBundler({ - options: getModuleBundlerOptions({name: "sap-ui-core-dbg.js", filters, preload: false}), - resources + options: getModuleBundlerOptions({ + name: "sap-ui-core-dbg.js", filters, preload: false, + moduleNameMapping: unoptimizedModuleNameMapping + }), + resources: unoptimizedResources }), moduleBundler({ options: getModuleBundlerOptions({ @@ -319,17 +354,27 @@ module.exports = function({workspace, dependencies, taskUtil, options: {projectN }), moduleBundler({ options: getModuleBundlerOptions({ - name: "sap-ui-core-nojQuery-dbg.js", filters, preload: false, provided: true + name: "sap-ui-core-nojQuery-dbg.js", filters, preload: false, provided: true, + moduleNameMapping: unoptimizedModuleNameMapping }), - resources + resources: unoptimizedResources }), ]).then((results) => { const bundles = Array.prototype.concat.apply([], results); - return Promise.all(bundles.map((bundle) => { + return Promise.all(bundles.map(({bundle, sourceMap}) => { if (taskUtil) { taskUtil.setTag(bundle, taskUtil.STANDARD_TAGS.IsBundle); + if (sourceMap) { + // Clear tag that might have been set by the minify task, in cases where + // the bundle name is identical to a source file + taskUtil.clearTag(sourceMap, taskUtil.STANDARD_TAGS.OmitFromBuildResult); + } + } + const writes = [workspace.write(bundle)]; + if (sourceMap) { + writes.push(workspace.write(sourceMap)); } - return workspace.write(bundle); + return Promise.all(writes); })); }); } @@ -367,12 +412,22 @@ module.exports = function({workspace, dependencies, taskUtil, options: {projectN return createLibraryBundles(libraryNamespace, resources, excludes) .then((results) => { const bundles = Array.prototype.concat.apply([], results); - return Promise.all(bundles.map((bundle) => { + return Promise.all(bundles.map(({bundle, sourceMap} = {}) => { if (bundle) { if (taskUtil) { taskUtil.setTag(bundle, taskUtil.STANDARD_TAGS.IsBundle); + if (sourceMap) { + // Clear tag that might have been set by the minify task, in cases where + // the bundle name is identical to a source file + taskUtil.clearTag(sourceMap, + taskUtil.STANDARD_TAGS.OmitFromBuildResult); + } + } + const writes = [workspace.write(bundle)]; + if (sourceMap) { + writes.push(workspace.write(sourceMap)); } - return workspace.write(bundle); + return Promise.all(writes); } })); }); diff --git a/lib/tasks/bundlers/generateStandaloneAppBundle.js b/lib/tasks/bundlers/generateStandaloneAppBundle.js index ea6129b86..59ad6c0c2 100644 --- a/lib/tasks/bundlers/generateStandaloneAppBundle.js +++ b/lib/tasks/bundlers/generateStandaloneAppBundle.js @@ -1,5 +1,7 @@ const log = require("@ui5/logger").getLogger("builder:tasks:bundlers:generateStandaloneAppBundle"); +const ReaderCollectionPrioritized = require("@ui5/fs").ReaderCollectionPrioritized; const moduleBundler = require("../../processors/bundlers/moduleBundler"); +const createModuleNameMapping = require("./utils/createModuleNameMapping"); function getBundleDefinition(config) { const bundleDefinition = { @@ -76,13 +78,18 @@ module.exports = async function({workspace, dependencies, taskUtil, options: {pr `unable to generate complete bundles for such projects.`); } - // If an application does not have a namespace, its resources are located at the root. Otherwise in /resources - // For dependencies, we do not want to search in their test-resources - const results = await Promise.all([ - workspace.byGlob("/**/*.{js,json,xml,html,properties,library}"), - dependencies.byGlob("/resources/**/*.{js,json,xml,html,properties,library}") - ]); - const resources = Array.prototype.concat.apply([], results); + let combo = new ReaderCollectionPrioritized({ + name: `generateStandaloneAppBundle - prioritize workspace over dependencies: ${projectName}`, + readers: [workspace, dependencies] + }); + + if (taskUtil) { + // Omit -dbg files + combo = combo.filter(function(resource) { + return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.IsDebugVariant); + }); + } + const resources = await combo.byGlob("/resources/**/*.{js,json,xml,html,properties,library,js.map}"); const isEvo = resources.find((resource) => { return resource.getPath() === "/resources/ui5loader.js"; @@ -94,6 +101,23 @@ module.exports = async function({workspace, dependencies, taskUtil, options: {pr filters = ["jquery.sap.global.js"]; } + let unoptimizedModuleNameMapping; + let unoptimizedResources = resources; + if (taskUtil) { + unoptimizedResources = await new ReaderCollectionPrioritized({ + name: `generateStandaloneAppBundle - prioritize workspace over dependencies: ${projectName}`, + readers: [workspace, dependencies] + }).filter(function(resource) { + // Remove any non-debug variants + return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.HasDebugVariant); + }).byGlob("/resources/**/*.{js,json,xml,html,properties,library,js.map}"); + + unoptimizedModuleNameMapping = createModuleNameMapping({ + resources: unoptimizedResources, + taskUtil + }); + } + await Promise.all([ moduleBundler({ resources, @@ -107,7 +131,7 @@ module.exports = async function({workspace, dependencies, taskUtil, options: {pr } }), moduleBundler({ - resources, + resources: unoptimizedResources, options: { bundleDefinition: getBundleDefinition({ name: "sap-ui-custom-dbg.js", @@ -116,16 +140,26 @@ module.exports = async function({workspace, dependencies, taskUtil, options: {pr }), bundleOptions: { optimize: false - } + }, + moduleNameMapping: unoptimizedModuleNameMapping } }) ]).then((results) => { const bundles = Array.prototype.concat.apply([], results); - return Promise.all(bundles.map((resource) => { + return Promise.all(bundles.map(({bundle, sourceMap}) => { if (taskUtil) { - taskUtil.setTag(resource, taskUtil.STANDARD_TAGS.IsBundle); + taskUtil.setTag(bundle, taskUtil.STANDARD_TAGS.IsBundle); + if (sourceMap) { + // Clear tag that might have been set by the minify task, in cases where + // the bundle name is identical to a source file + taskUtil.clearTag(sourceMap, taskUtil.STANDARD_TAGS.OmitFromBuildResult); + } + } + const writes = [workspace.write(bundle)]; + if (sourceMap) { + writes.push(workspace.write(sourceMap)); } - return workspace.write(resource); + return Promise.all(writes); })); }); }; diff --git a/lib/tasks/bundlers/utils/createModuleNameMapping.js b/lib/tasks/bundlers/utils/createModuleNameMapping.js new file mode 100644 index 000000000..23544ab37 --- /dev/null +++ b/lib/tasks/bundlers/utils/createModuleNameMapping.js @@ -0,0 +1,30 @@ +const ModuleName = require("../../../lbt/utils/ModuleName"); + +/** + * For "unoptimized" bundles, the non-debug files have already been filtered out above. + * Now we need to create a mapping from the debug-variant resource path to the respective module + * name, which is basically the non-debug resource path, minus the "/resources/"" prefix. + * This mapping overwrites internal logic of the LocatorResourcePool which would otherwise determine + * the module name from the resource path, which would contain "-dbg" in this case. That would be + * incorrect since debug-variants should still keep the original module name. + * + * @private + * @param {object} parameters Parameters + * @param {module:@ui5/fs.Resource[]} parameters.resources List of resources + * @param {module:@ui5/builder.tasks.TaskUtil|object} parameters.taskUtil TaskUtil + * @returns {object} Module name mapping + */ +module.exports = function({resources, taskUtil}) { + const moduleNameMapping = {}; + for (let i = resources.length - 1; i >= 0; i--) { + const resourcePath = resources[i].getPath(); + if (taskUtil.getTag(resourcePath, taskUtil.STANDARD_TAGS.IsDebugVariant)) { + const nonDbgPath = ModuleName.getNonDebugName(resourcePath); + if (!nonDbgPath) { + throw new Error(`Failed to resolve non-debug name for ${resourcePath}`); + } + moduleNameMapping[resourcePath] = nonDbgPath.slice("/resources/".length); + } + } + return moduleNameMapping; +}; diff --git a/lib/tasks/createDebugFiles.js b/lib/tasks/createDebugFiles.js deleted file mode 100644 index 341e0d548..000000000 --- a/lib/tasks/createDebugFiles.js +++ /dev/null @@ -1,30 +0,0 @@ -const dbg = require("../processors/debugFileCreator"); -const fsInterface = require("@ui5/fs").fsInterface; - -/** - * Task to create dbg files. - * - * @public - * @alias module:@ui5/builder.tasks.createDebugFiles - * @param {object} parameters Parameters - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace DuplexCollection to read and write files - * @param {object} parameters.options Options - * @param {string} parameters.options.pattern Pattern to locate the files to be processed - * @returns {Promise} Promise resolving with undefined once data has been written - */ -module.exports = async function({workspace, options: {pattern}}) { - let allResources; - if (workspace.byGlobSource) { // API only available on duplex collections - allResources = await workspace.byGlobSource(pattern); - } else { - allResources = await workspace.byGlob(pattern); - } - return dbg({ - fs: fsInterface(workspace), - resources: allResources - }).then((processedResources) => { - return Promise.all(processedResources.map((resource) => { - return workspace.write(resource); - })); - }); -}; diff --git a/lib/tasks/generateResourcesJson.js b/lib/tasks/generateResourcesJson.js index fcc1d2692..38992175a 100644 --- a/lib/tasks/generateResourcesJson.js +++ b/lib/tasks/generateResourcesJson.js @@ -96,19 +96,25 @@ function getCreatorOptions(projectName) { * @alias module:@ui5/builder.tasks.generateResourcesJson * @param {object} parameters Parameters * @param {module:@ui5/fs.DuplexCollection} parameters.workspace DuplexCollection to read and write files - * @param {module:@ui5/fs.AbstractReader} [parameters.dependencies] Reader or Collection to read dependency files + * @param {module:@ui5/fs.AbstractReader} parameters.dependencies Reader or Collection to read dependency files + * @param {module:@ui5/builder.tasks.TaskUtil|object} [parameters.taskUtil] TaskUtil * @param {object} parameters.options Options * @param {string} parameters.options.projectName Project name * @returns {Promise} Promise resolving with undefined once data has been written */ -module.exports = async function({workspace, dependencies, options: {projectName}}) { - const resources = await workspace.byGlob(["/resources/**/*"].concat(DEFAULT_EXCLUDES)); +module.exports = async function({workspace, dependencies, taskUtil, options: {projectName}}) { + let resources = await workspace.byGlob(["/resources/**/*"].concat(DEFAULT_EXCLUDES)); + let dependencyResources = + await dependencies.byGlob("/resources/**/*.{js,json,xml,html,properties,library,js.map}"); - // TODO 3.0: Make dependencies parameter mandatory - let dependencyResources; - if (dependencies) { - dependencyResources = - await dependencies.byGlob("/resources/**/*.{js,json,xml,html,properties,library}"); + if (taskUtil) { + // Filter out resources that will be omitted from the build results + resources = resources.filter((resource) => { + return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.OmitFromBuildResult); + }); + dependencyResources = dependencyResources.filter((resource) => { + return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.OmitFromBuildResult); + }); } const resourceLists = await resourceListCreator({ diff --git a/lib/tasks/minify.js b/lib/tasks/minify.js new file mode 100644 index 000000000..c9e409ebf --- /dev/null +++ b/lib/tasks/minify.js @@ -0,0 +1,41 @@ +const minifier = require("../processors/minifier"); + +/** + * Task to minify resources. + * + * @public + * @alias module:@ui5/builder.tasks.minify + * @param {object} parameters Parameters + * @param {module:@ui5/fs.DuplexCollection} parameters.workspace DuplexCollection to read and write files + * @param {module:@ui5/builder.tasks.TaskUtil|object} [parameters.taskUtil] TaskUtil + * @param {object} parameters.options Options + * @param {string} parameters.options.pattern Pattern to locate the files to be processed + * @param {boolean} [parameters.options.omitSourceMapResources=true] Whether source map resources shall + * be tagged as "OmitFromBuildResult" and no sourceMappingURL shall be added to the minified resource + * @returns {Promise} Promise resolving with undefined once data has been written + */ +module.exports = async function({workspace, taskUtil, options: {pattern, omitSourceMapResources = true}}) { + const resources = await workspace.byGlob(pattern); + const processedResources = await minifier({ + resources, + options: { + addSourceMappingUrl: !omitSourceMapResources + } + }); + + return Promise.all(processedResources.map(async ({resource, dbgResource, sourceMapResource}) => { + if (taskUtil) { + taskUtil.setTag(resource, taskUtil.STANDARD_TAGS.HasDebugVariant); + taskUtil.setTag(dbgResource, taskUtil.STANDARD_TAGS.IsDebugVariant); + taskUtil.setTag(sourceMapResource, taskUtil.STANDARD_TAGS.HasDebugVariant); + if (omitSourceMapResources) { + taskUtil.setTag(sourceMapResource, taskUtil.STANDARD_TAGS.OmitFromBuildResult); + } + } + return Promise.all([ + workspace.write(resource), + workspace.write(dbgResource), + workspace.write(sourceMapResource) + ]); + })); +}; diff --git a/lib/tasks/replaceVersion.js b/lib/tasks/replaceVersion.js index 5bf16e697..a0bab9efb 100644 --- a/lib/tasks/replaceVersion.js +++ b/lib/tasks/replaceVersion.js @@ -18,7 +18,7 @@ module.exports = function({workspace, options: {pattern, version}}) { return stringReplacer({ resources: allResources, options: { - pattern: "${version}", + pattern: /\$\{(?:project\.)?version\}/g, replacement: version } }); diff --git a/lib/tasks/taskRepository.js b/lib/tasks/taskRepository.js index 6e2ec351d..8e80e0e3f 100644 --- a/lib/tasks/taskRepository.js +++ b/lib/tasks/taskRepository.js @@ -2,12 +2,11 @@ const taskInfos = { replaceCopyright: {path: "./replaceCopyright"}, replaceVersion: {path: "./replaceVersion"}, replaceBuildtime: {path: "./replaceBuildtime"}, - createDebugFiles: {path: "./createDebugFiles"}, escapeNonAsciiCharacters: {path: "./escapeNonAsciiCharacters"}, executeJsdocSdkTransformation: {path: "./jsdoc/executeJsdocSdkTransformation"}, generateApiIndex: {path: "./jsdoc/generateApiIndex"}, generateJsdoc: {path: "./jsdoc/generateJsdoc"}, - uglify: {path: "./uglify"}, + minify: {path: "./minify"}, buildThemes: {path: "./buildThemes"}, transformBootstrapHtml: {path: "./transformBootstrapHtml"}, generateLibraryManifest: {path: "./generateLibraryManifest"}, @@ -27,6 +26,11 @@ function getTask(taskName) { const taskInfo = taskInfos[taskName]; if (!taskInfo) { + if (["createDebugFiles", "uglify"].includes(taskName)) { + throw new Error( + `Standard task ${taskName} has been removed in UI5 Tooling 3.0. ` + + `Please see the migration guide at https://sap.github.io/ui5-tooling/updates/migrate-v3/`); + } throw new Error(`taskRepository: Unknown Task ${taskName}`); } try { diff --git a/lib/tasks/uglify.js b/lib/tasks/uglify.js deleted file mode 100644 index 60884fda1..000000000 --- a/lib/tasks/uglify.js +++ /dev/null @@ -1,33 +0,0 @@ -const uglifyProcessor = require("../processors/uglifier"); - -/** - * Task to minify resources. - * - * @public - * @alias module:@ui5/builder.tasks.uglify - * @param {object} parameters Parameters - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace DuplexCollection to read and write files - * @param {module:@ui5/builder.tasks.TaskUtil|object} [parameters.taskUtil] TaskUtil - * @param {object} parameters.options Options - * @param {string} parameters.options.pattern Pattern to locate the files to be processed - * @returns {Promise} Promise resolving with undefined once data has been written - */ -module.exports = function({workspace, taskUtil, options: {pattern}}) { - return workspace.byGlobSource(pattern) - .then((allResources) => { - let resources = allResources; - if (taskUtil) { - resources = allResources.filter((resource) => { - return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.IsBundle); - }); - } - return uglifyProcessor({ - resources - }); - }) - .then((processedResources) => { - return Promise.all(processedResources.map((resource) => { - return workspace.write(resource); - })); - }); -}; diff --git a/lib/types/application/ApplicationBuilder.js b/lib/types/application/ApplicationBuilder.js index a01219803..d82d05a8b 100644 --- a/lib/types/application/ApplicationBuilder.js +++ b/lib/types/application/ApplicationBuilder.js @@ -67,6 +67,27 @@ class ApplicationBuilder extends AbstractBuilder { }); } + // Support rules should not be minified to have readable code in the Support Assistant + const minificationPattern = ["/**/*.js", "!**/*.support.js"]; + if (["2.6"].includes(project.specVersion)) { + const minificationExcludes = project.builder && project.builder.minification && + project.builder.minification.excludes; + if (minificationExcludes) { + // TODO 3.0: namespaces should become mandatory, see existing check above + const patternPrefix = project.metadata.namespace ? "/resources/" : "/"; + this.enhancePatternWithExcludes(minificationPattern, minificationExcludes, patternPrefix); + } + } + this.addTask("minify", async () => { + return getTask("minify").task({ + workspace: resourceCollections.workspace, + taskUtil, + options: { + pattern: minificationPattern + } + }); + }); + const componentPreload = project.builder && project.builder.componentPreload; if (componentPreload && (componentPreload.namespaces || componentPreload.paths)) { this.addTask("generateComponentPreload", async () => { @@ -138,37 +159,6 @@ class ApplicationBuilder extends AbstractBuilder { }); } - const minificationPattern = ["/**/*.js"]; - if (["2.6"].includes(project.specVersion)) { - const minificationExcludes = project.builder && project.builder.minification && - project.builder.minification.excludes; - if (minificationExcludes) { - // TODO 3.0: namespaces should become mandatory, see existing check above - const patternPrefix = project.metadata.namespace ? "/resources/" : "/"; - this.enhancePatternWithExcludes(minificationPattern, minificationExcludes, patternPrefix); - } - } - this.addTask("createDebugFiles", async () => { - const createDebugFiles = getTask("createDebugFiles").task; - return createDebugFiles({ - workspace: resourceCollections.workspace, - options: { - pattern: minificationPattern - } - }); - }); - - this.addTask("uglify", async () => { - const uglify = getTask("uglify").task; - return uglify({ - workspace: resourceCollections.workspace, - taskUtil, - options: { - pattern: minificationPattern - } - }); - }); - this.addTask("generateVersionInfo", async () => { return getTask("generateVersionInfo").task({ workspace: resourceCollections.workspace, @@ -209,6 +199,7 @@ class ApplicationBuilder extends AbstractBuilder { return getTask("generateResourcesJson").task({ workspace: resourceCollections.workspace, dependencies: resourceCollections.dependencies, + taskUtil, options: { projectName: project.metadata.name } diff --git a/lib/types/library/LibraryBuilder.js b/lib/types/library/LibraryBuilder.js index 05dd66b3a..01c79e96a 100644 --- a/lib/types/library/LibraryBuilder.js +++ b/lib/types/library/LibraryBuilder.js @@ -28,7 +28,7 @@ class LibraryBuilder extends AbstractBuilder { workspace: resourceCollections.workspace, options: { copyright: project.metadata.copyright, - pattern: "/resources/**/*.{js,library,less,theme}" + pattern: "/**/*.{js,library,css,less,theme,html}" } }); }); @@ -38,7 +38,7 @@ class LibraryBuilder extends AbstractBuilder { workspace: resourceCollections.workspace, options: { version: project.version, - pattern: "/resources/**/*.{js,json,library,less,theme}" + pattern: "/**/*.{js,json,library,css,less,theme,html}" } }); }); @@ -89,6 +89,26 @@ class LibraryBuilder extends AbstractBuilder { }); } + // Support rules should not be minified to have readable code in the Support Assistant + const minificationPattern = ["/resources/**/*.js", "!**/*.support.js"]; + if (["2.6"].includes(project.specVersion)) { + const minificationExcludes = project.builder && project.builder.minification && + project.builder.minification.excludes; + if (minificationExcludes) { + this.enhancePatternWithExcludes(minificationPattern, minificationExcludes, "/resources/"); + } + } + + this.addTask("minify", async () => { + return getTask("minify").task({ + workspace: resourceCollections.workspace, + taskUtil, + options: { + pattern: minificationPattern + } + }); + }); + const componentPreload = project.builder && project.builder.componentPreload; if (componentPreload) { this.addTask("generateComponentPreload", async () => { @@ -176,9 +196,10 @@ class LibraryBuilder extends AbstractBuilder { dependencies: resourceCollections.dependencies, options: { projectName: project.metadata.name, - librariesPattern: !taskUtil.isRootProject() ? "/resources/**/*.library" : undefined, + librariesPattern: !taskUtil.isRootProject() ? "/resources/**/(*.library|library.js)" : undefined, themesPattern: !taskUtil.isRootProject() ? "/resources/sap/ui/core/themes/*" : undefined, - inputPattern + inputPattern, + cssVariables: taskUtil.getBuildOption("cssVariables") } }); }); @@ -195,37 +216,11 @@ class LibraryBuilder extends AbstractBuilder { }); }); - const minificationPattern = ["/resources/**/*.js"]; - if (["2.6"].includes(project.specVersion)) { - const minificationExcludes = project.builder && project.builder.minification && - project.builder.minification.excludes; - if (minificationExcludes) { - this.enhancePatternWithExcludes(minificationPattern, minificationExcludes, "/resources/"); - } - } - this.addTask("createDebugFiles", async () => { - return getTask("createDebugFiles").task({ - workspace: resourceCollections.workspace, - options: { - pattern: minificationPattern - } - }); - }); - - this.addTask("uglify", async () => { - return getTask("uglify").task({ - workspace: resourceCollections.workspace, - taskUtil, - options: { - pattern: minificationPattern - } - }); - }); - this.addTask("generateResourcesJson", () => { return getTask("generateResourcesJson").task({ workspace: resourceCollections.workspace, dependencies: resourceCollections.dependencies, + taskUtil, options: { projectName: project.metadata.name } diff --git a/lib/types/themeLibrary/ThemeLibraryBuilder.js b/lib/types/themeLibrary/ThemeLibraryBuilder.js index 3090ed5f7..e9de714c8 100644 --- a/lib/types/themeLibrary/ThemeLibraryBuilder.js +++ b/lib/types/themeLibrary/ThemeLibraryBuilder.js @@ -29,9 +29,10 @@ class ThemeLibraryBuilder extends AbstractBuilder { dependencies: resourceCollections.dependencies, options: { projectName: project.metadata.name, - librariesPattern: !taskUtil.isRootProject() ? "/resources/**/*.library" : undefined, + librariesPattern: !taskUtil.isRootProject() ? "/resources/**/(*.library|library.js)" : undefined, themesPattern: !taskUtil.isRootProject() ? "/resources/sap/ui/core/themes/*" : undefined, - inputPattern: "/resources/**/themes/*/library.source.less" + inputPattern: "/resources/**/themes/*/library.source.less", + cssVariables: taskUtil.getBuildOption("cssVariables") } }); }); @@ -51,6 +52,7 @@ class ThemeLibraryBuilder extends AbstractBuilder { return getTask("generateResourcesJson").task({ workspace: resourceCollections.workspace, dependencies: resourceCollections.dependencies, + taskUtil, options: { projectName: project.metadata.name } diff --git a/package-lock.json b/package-lock.json index d9a52a045..ae492a7ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,88 +1,7768 @@ { "name": "@ui5/builder", - "version": "2.11.2", - "lockfileVersion": 1, + "version": "3.0.0-alpha.3", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@ui5/builder", + "version": "3.0.0-alpha.3", + "license": "Apache-2.0", + "dependencies": { + "@ui5/fs": "^3.0.0-alpha.2", + "@ui5/logger": "^3.0.1-alpha.1", + "cheerio": "1.0.0-rc.9", + "escape-unicode": "^0.2.0", + "escope": "^3.6.0", + "espree": "^9.3.1", + "globby": "^11.1.0", + "graceful-fs": "^4.2.9", + "jsdoc": "^3.6.7", + "less-openui5": "^0.11.2", + "make-dir": "^3.1.0", + "pretty-data": "^0.40.0", + "pretty-hrtime": "^1.0.3", + "replacestream": "^4.0.3", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "sourcemap-codec": "^1.4.8", + "terser": "^5.10.0", + "xml2js": "^0.4.23", + "yazl": "^2.5.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "chai": "^4.3.4", + "chai-fs": "^2.0.0", + "chokidar-cli": "^3.0.0", + "cross-env": "^7.0.3", + "depcheck": "^1.4.3", + "docdash": "^1.2.0", + "eslint": "^8.7.0", + "eslint-config-google": "^0.14.0", + "eslint-plugin-jsdoc": "^37.6.3", + "extract-zip": "^2.0.1", + "mock-require": "^3.0.3", + "nyc": "^15.1.0", + "open-cli": "^6.0.1", + "recursive-readdir": "^2.1.1", + "sinon": "^11.1.2", + "tap-nyan": "^1.1.0", + "tap-xunit": "^2.4.1" + }, + "engines": { + "node": ">= 16.13.2", + "npm": ">= 8" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/core/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/@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "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": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "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", + "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "dev": true, + "dependencies": { + "comment-parser": "1.3.0", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "~2.2.3" + }, + "engines": { + "node": "^12 || ^14 || ^16 || ^17" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/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/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "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", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "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", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "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==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", + "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "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", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ui5/fs": { + "version": "3.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-3.0.0-alpha.2.tgz", + "integrity": "sha512-GCcTUiI0Kjqab6mVWK8aHt9wMjMzSoRJx9pGZsbSdXLFR9C7A7x41OW7WL9pjeuiqUFcydC2Ia1+DdKe6TOrgw==", + "dependencies": { + "@ui5/logger": "^3.0.1-alpha.1", + "clone": "^2.1.0", + "globby": "^11.1.0", + "graceful-fs": "^4.2.9", + "make-dir": "^3.1.0", + "micromatch": "^4.0.4", + "minimatch": "^3.0.3", + "pretty-hrtime": "^1.0.3", + "random-int": "^2.0.1" + }, + "engines": { + "node": ">= 16.13.2", + "npm": ">= 8" + } + }, + "node_modules/@ui5/logger": { + "version": "3.0.1-alpha.1", + "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-3.0.1-alpha.1.tgz", + "integrity": "sha512-S0jK4e3FQYhIkGFoZSCCtHxKAYGOuCZM+KG06PoHlst73eN0Md89TgRrQtM48UCHEZF/V4A+anOEgza901ikMw==", + "dependencies": { + "npmlog": "^5.0.1" + }, + "engines": { + "node": ">= 16.13.2", + "npm": ">= 8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz", + "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz", + "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz", + "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/compiler-dom": "3.2.31", + "@vue/compiler-ssr": "3.2.31", + "@vue/reactivity-transform": "3.2.31", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz", + "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz", + "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz", + "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-events": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/array-events/-/array-events-0.2.0.tgz", + "integrity": "sha1-/0KsU+ZvSF1viDI0wyJSvCKGEw4=", + "dev": true, + "dependencies": { + "async-arrays": "*", + "extended-emitter": "*" + }, + "engines": { + "node": "*" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrgv": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", + "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async-arrays": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-arrays/-/async-arrays-1.0.1.tgz", + "integrity": "sha1-NHrytw8qeldnotVnnMQrvxwiD9k=", + "dev": true, + "dependencies": { + "sift": "*" + }, + "engines": { + "node": "*" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@concordance/react": "^2.0.0", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "ansi-styles": "^5.0.0", + "arrgv": "^1.0.2", + "arrify": "^2.0.1", + "callsites": "^3.1.0", + "chalk": "^4.1.0", + "chokidar": "^3.4.3", + "chunkd": "^2.0.1", + "ci-info": "^2.0.0", + "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", + "common-path-prefix": "^3.0.0", + "concordance": "^5.0.1", + "convert-source-map": "^1.7.0", + "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", + "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", + "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", + "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", + "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" + }, + "bin": { + "ava": "cli.js" + }, + "engines": { + "node": ">=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0 <15 || >=15" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "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", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bit-mask": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-mask/-/bit-mask-1.0.2.tgz", + "integrity": "sha512-UGtq08LSiazxL4zVmBzrhdCWnT4RWx3JhhD/3crhfv8xxjnVHxf/WoVjEstjSUaZeZRP7kZrWNqup1VvUClCaQ==", + "dev": true, + "dependencies": { + "array-events": "^0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "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", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz", + "integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001313", + "electron-to-chromium": "^1.4.76", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "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", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "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/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", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001314", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz", + "integrity": "sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chai-fs/-/chai-fs-2.0.0.tgz", + "integrity": "sha1-Na4Dn7uwcQ9RIqrhf6uh6PQRB8Y=", + "dev": true, + "dependencies": { + "bit-mask": "^1.0.1", + "readdir-enhanced": "^1.4.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "chai": ">= 1.6.1 < 5" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/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/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", + "integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", + "dependencies": { + "cheerio-select": "^1.4.0", + "dom-serializer": "^1.3.1", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dependencies": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-3.0.0.tgz", + "integrity": "sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "yargs": "^13.3.0" + }, + "bin": { + "chokidar": "index.js" + }, + "engines": { + "node": ">= 8.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar-cli/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/chokidar-cli/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/chokidar-cli/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/chokidar-cli/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar-cli/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar-cli/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/chokidar-cli/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/chokidar-cli/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/chunkd": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", + "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", + "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==", + "dev": true + }, + "node_modules/ci-parallel-vars": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", + "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/clean-yaml-object": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", + "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", + "dev": true, + "engines": { + "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==", + "dev": true, + "engines": { + "node": ">=6" + }, + "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==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6" + }, + "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==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "engines": { + "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": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "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==", + "dev": true, + "dependencies": { + "convert-to-spaces": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/comment-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", + "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concordance": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", + "dev": true, + "dependencies": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + }, + "engines": { + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "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": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "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_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/date-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", + "dev": true, + "dependencies": { + "time-zone": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "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": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "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": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "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.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/depcheck": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.3.tgz", + "integrity": "sha512-vy8xe1tlLFu7t4jFyoirMmOR7x7N601ubU9Gkifyr9z8rjBFtEdWHDBMqXyk6OkK+94NXutzddVXJuo0JlUQKQ==", + "dev": true, + "dependencies": { + "@babel/parser": "7.16.4", + "@babel/traverse": "^7.12.5", + "@vue/compiler-sfc": "^3.0.5", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "deps-regex": "^0.1.4", + "ignore": "^5.1.8", + "is-core-module": "^2.4.0", + "js-yaml": "^3.14.0", + "json5": "^2.1.3", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "multimatch": "^5.0.0", + "please-upgrade-node": "^3.2.0", + "query-ast": "^1.0.3", + "readdirp": "^3.5.0", + "require-package-name": "^2.0.1", + "resolve": "^1.18.1", + "sass": "^1.29.0", + "scss-parser": "^1.0.4", + "semver": "^7.3.2", + "yargs": "^16.1.0" + }, + "bin": { + "depcheck": "bin/depcheck.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/deps-regex": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.1.4.tgz", + "integrity": "sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ=", + "dev": true + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docdash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/docdash/-/docdash-1.2.0.tgz", + "integrity": "sha512-IYZbgYthPTspgqYeciRJNPhSwL51yer7HAwDXhF5p+H7mTDbPvY3PCk/QDjNxdPCpWkaJVFC4t7iCNB/t9E5Kw==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "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", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.78", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.78.tgz", + "integrity": "sha512-o61+D/Lx7j/E0LIin/efOqeHpXhwi1TaQco9vUcRmr91m25SfZY6L5hWJDv/r+6kNjboFKgBw1LbfM0lbhuK6Q==", + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "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": "sha1-IcoRLUirJLTh5//A5TOdMf38J0w=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es5-ext": { + "version": "0.10.57", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.57.tgz", + "integrity": "sha512-L7cCNoPwTkAp7IBHxrKLsh7NKiVFkcdxlP9vbVw9QUvb7gF0Mz9bEBN0WY9xqdTjGF907EMT/iG013vnbqwu1Q==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set/node_modules/es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-unicode": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/escape-unicode/-/escape-unicode-0.2.0.tgz", + "integrity": "sha512-7jMQuKb8nm0h/9HYLfu4NCLFwoUsd5XO6OZ1z86PbKcMf8zDK1m7nFR0iA2CCShq4TSValaLIveE8T1UBxgALQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dependencies": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.2.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "37.9.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", + "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.20.1", + "comment-parser": "1.3.0", + "debug": "^4.3.3", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.4.0", + "regextras": "^0.8.0", + "semver": "^7.3.5", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": "^12 || ^14 || ^16 || ^17" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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/espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "dev": true + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + }, + "node_modules/extended-emitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/extended-emitter/-/extended-emitter-1.1.0.tgz", + "integrity": "sha512-TakJS3uz0UJcHTyzX7c+5RoH/DUML2icYgmbfoCjBO8Tc66HaOw9FSECDd2RVnGVACriuSentxLU1HUg54nUbA==", + "dev": true, + "dependencies": { + "sift": "*", + "wolfy87-eventemitter": "*" + }, + "engines": { + "node": "*" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-14.7.1.tgz", + "integrity": "sha512-sXAMgFk67fQLcetXustxfKX+PZgHIUFn96Xld9uH8aXPdX3xOp0/jg9OdouVTvQrf7mrn+wAa4jN/y9fUOOiRA==", + "dev": true, + "dependencies": { + "readable-web-to-node-stream": "^2.0.0", + "strtok3": "^6.0.3", + "token-types": "^2.0.0", + "typedarray-to-buffer": "^3.1.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "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/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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 + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "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", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.0.0.tgz", + "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==", + "dev": true, + "engines": { + "node": ">=10 <11 || >=12 <13 || >=14" + } + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "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": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/irregular-plurals": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", + "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "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.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-error": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", + "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "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", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/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/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", + "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", + "dependencies": { + "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^4.0.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=8.15.0" + } + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", + "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "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", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", + "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==", + "engines": { + "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", + "integrity": "sha512-FkAT0JDB3NGroia/hdYInzVzpERINovKEgjeijfYgLK7C4eef8a0midlgdBfTZanv3Gz8zUSjfGYXNWL82jEBA==", + "dependencies": { + "clone": "^2.1.0", + "css": "^3.0.0", + "mime": "^1.6.0" + }, + "engines": { + "node": ">= 10", + "npm": ">= 5" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "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==", + "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": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "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": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "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" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", + "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", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz", + "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/marked": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/md5-hex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", + "dev": true, + "dependencies": { + "blueimp-md5": "^2.10.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/mem?sponsor=1" + } + }, + "node_modules/meow": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "^4.0.2", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "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": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/nise": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", + "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": ">=5", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/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/nyc/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "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", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/open-cli/-/open-cli-6.0.1.tgz", + "integrity": "sha512-A5h8MF3GrT1efn9TiO9LPajDnLtuEiGQT5G8TxWObBlgt1cZJF1YbQo/kNtsD1bJb7HxnT6SaSjzeLq0Rfhygw==", + "dev": true, + "dependencies": { + "file-type": "^14.1.4", + "get-stdin": "^7.0.0", + "meow": "^6.1.0", + "open": "^7.0.3", + "temp-write": "^4.0.0" + }, + "bin": { + "open-cli": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "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": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "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", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "irregular-plurals": "^3.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz", + "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==", + "dev": true, + "dependencies": { + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "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": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "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", + "integrity": "sha1-Vyqo6iNGdGerlLa1Jmpv2cj93XI=", + "engines": { + "node": "*" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/query-ast": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/query-ast/-/query-ast-1.0.4.tgz", + "integrity": "sha512-KFJFSvODCBjIH5HbHvITj9EEZKYUU6VX0T5CuB1ayvjUoUaZkKMi6eeby5Tf8DMukyZHlJQOE1+f3vevKUe6eg==", + "dev": true, + "dependencies": { + "invariant": "2.2.4" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/random-int": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/random-int/-/random-int-2.0.1.tgz", + "integrity": "sha512-YALjWK2Rt9EMIv9BF/3mvlzFWQathsvb5UZmN1QmhfIOfcQYXc/UcLzg0ablqesSBpBVLt2Tlwv/eTuBh4LXUQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "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", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz", + "integrity": "sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA==", + "dev": true + }, + "node_modules/readdir-enhanced": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/readdir-enhanced/-/readdir-enhanced-1.5.2.tgz", + "integrity": "sha1-YUYwSGkKxqRVt1ti+nioj43IXlM=", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "es6-promise": "^4.1.0", + "glob-to-regexp": "^0.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regextras": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", + "dev": true, + "engines": { + "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", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "dependencies": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/replacestream/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/replacestream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/replacestream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/replacestream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/require-package-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", + "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=", + "dev": true + }, + "node_modules/requizzle": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "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==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/sass": { + "version": "1.49.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", + "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scss-parser": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/scss-parser/-/scss-parser-1.0.5.tgz", + "integrity": "sha512-RZOtvCmCnwkDo7kdcYBi807Y5EoTIxJ34AgEgJNDmOH1jl0/xG0FyYZFbH6Ga3Iwu7q8LSdxJ4C5UkzNXjQxKQ==", + "dev": true, + "dependencies": { + "invariant": "2.2.4" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "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": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sift": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", + "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "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==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^7.1.2", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supertap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz", + "integrity": "sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==", + "dev": true, + "dependencies": { + "arrify": "^2.0.1", + "indent-string": "^4.0.0", + "js-yaml": "^3.14.0", + "serialize-error": "^7.0.1", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=" + }, + "node_modules/tap-nyan": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tap-nyan/-/tap-nyan-1.1.0.tgz", + "integrity": "sha1-K40TofnKUcGzraDGzNsRd9IGW7A=", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "duplexer2": "^0.1.4", + "supports-color": "^3.1.2", + "tap-parser": "^3.0.3" + }, + "bin": { + "tap-nyan": "bin/cmd.js", + "tnyan": "bin/cmd.js" + } + }, + "node_modules/tap-nyan/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap-nyan/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap-nyan/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap-nyan/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tap-nyan/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tap-nyan/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap-nyan/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap-nyan/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tap-parser": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-3.0.5.tgz", + "integrity": "sha1-uUf2ngs+U9S5IBH2zFUuFtrcfsk=", + "dev": true, + "dependencies": { + "events-to-array": "^1.0.1", + "js-yaml": "^3.2.7" + }, + "bin": { + "tap-parser": "bin/cmd.js" + }, + "optionalDependencies": { + "readable-stream": "^2" + } + }, + "node_modules/tap-parser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "node_modules/tap-parser/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/tap-parser/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tap-xunit": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tap-xunit/-/tap-xunit-2.4.1.tgz", + "integrity": "sha512-qcZStDtjjYjMKAo7QNiCtOW256g3tuSyCSe5kNJniG1Q2oeOExJq4vm8CwboHZURpkXAHvtqMl4TVL7mcbMVVA==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "minimist": "~1.2.0", + "tap-parser": "~1.2.2", + "through2": "~2.0.0", + "xmlbuilder": "~4.2.0", + "xtend": "~4.0.0" + }, + "bin": { + "tap-xunit": "bin/tap-xunit", + "txunit": "bin/tap-xunit" + } + }, + "node_modules/tap-xunit/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "node_modules/tap-xunit/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/tap-xunit/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tap-xunit/node_modules/tap-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-1.2.2.tgz", + "integrity": "sha1-Xi9pcGEfB5x8+FfeHceqG0gN56U=", + "dev": true, + "dependencies": { + "events-to-array": "^1.0.1", + "inherits": "~2.0.1", + "js-yaml": "^3.2.7" + }, + "bin": { + "tap-parser": "bin/cmd.js" + }, + "optionalDependencies": { + "readable-stream": "^2" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-write": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", + "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-write/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/terser": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.0.tgz", + "integrity": "sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==", + "dependencies": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/time-zone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "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", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz", + "integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.1.1", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=0.1.98" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/token-types/node_modules/@tokenizer/token": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz", + "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==", + "dev": true + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "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.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/underscore": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "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": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "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", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "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", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wolfy87-eventemitter": { + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", + "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "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", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true, + "dependencies": { + "lodash": "^4.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + } + }, "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.16.0" + "@babel/highlight": "^7.16.7" } }, "@babel/compat-data": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", "dev": true }, "@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "semver": "^6.3.0" }, "dependencies": { + "@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dev": true, "requires": { - "@babel/types": "^7.16.0", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } } }, "@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" }, @@ -95,138 +7775,117 @@ } } }, - "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", "dev": true, "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -251,21 +7910,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -290,45 +7934,62 @@ } }, "@babel/parser": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz", - "integrity": "sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw==" + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==" }, "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "dependencies": { + "@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true + } } }, "@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true + } } }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -350,48 +8011,43 @@ } }, "@es-joy/jsdoccomment": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.12.0.tgz", - "integrity": "sha512-Gw4/j9v36IKY8ET+W0GoOzrRw17xjf21EIFFRL3zx21fF5MnqmeNpNi+PU/LKjqLpPb2Pw2XdlJbYM31VVo/PQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", + "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", "dev": true, "requires": { - "comment-parser": "1.2.4", + "comment-parser": "1.3.0", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "2.0.0" + "jsdoc-type-pratt-parser": "~2.2.3" } }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.3.1", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "dependencies": { - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -403,6 +8059,15 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -412,12 +8077,12 @@ } }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } @@ -446,6 +8111,12 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true } } }, @@ -455,6 +8126,28 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -503,9 +8196,9 @@ } }, "@sinonjs/samsam": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", - "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", + "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", "dev": true, "requires": { "@sinonjs/commons": "^1.6.0", @@ -534,6 +8227,25 @@ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "dev": true }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -547,9 +8259,9 @@ "dev": true }, "@types/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", "dev": true, "optional": true }, @@ -576,107 +8288,124 @@ } }, "@ui5/fs": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-2.0.6.tgz", - "integrity": "sha512-dBugwsHP7F7IrfVAaqf7FSDhknK6RhrLOpgkp7FmL/WRA02Q3FQzroFJc7CZEP4bOnAvWC3TpghOfHV2/RqR3A==", + "version": "3.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-3.0.0-alpha.2.tgz", + "integrity": "sha512-GCcTUiI0Kjqab6mVWK8aHt9wMjMzSoRJx9pGZsbSdXLFR9C7A7x41OW7WL9pjeuiqUFcydC2Ia1+DdKe6TOrgw==", "requires": { - "@ui5/logger": "^2.0.1", + "@ui5/logger": "^3.0.1-alpha.1", "clone": "^2.1.0", - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", + "globby": "^11.1.0", + "graceful-fs": "^4.2.9", "make-dir": "^3.1.0", - "micromatch": "^4.0.2", + "micromatch": "^4.0.4", "minimatch": "^3.0.3", "pretty-hrtime": "^1.0.3", "random-int": "^2.0.1" } }, "@ui5/logger": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-2.0.1.tgz", - "integrity": "sha512-FU5moQF9HATZEIJVQxXWRsUKMveIRJNPSmH3Mptcuc05f6gKu1BWcamDaDHXmMSyoKRounY9Aok94NTQMi7eDw==", + "version": "3.0.1-alpha.1", + "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-3.0.1-alpha.1.tgz", + "integrity": "sha512-S0jK4e3FQYhIkGFoZSCCtHxKAYGOuCZM+KG06PoHlst73eN0Md89TgRrQtM48UCHEZF/V4A+anOEgza901ikMw==", "requires": { - "npmlog": "^4.1.2" + "npmlog": "^5.0.1" } }, "@vue/compiler-core": { - "version": "3.2.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.21.tgz", - "integrity": "sha512-NhhiQZNG71KNq1h5pMW/fAXdTF7lJRaSI7LDm2edhHXVz1ROMICo8SreUmQnSf4Fet0UPBVqJ988eF4+936iDQ==", + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz", + "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==", "dev": true, "requires": { - "@babel/parser": "^7.15.0", - "@vue/shared": "3.2.21", + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.31", "estree-walker": "^2.0.2", "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@vue/compiler-dom": { - "version": "3.2.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.21.tgz", - "integrity": "sha512-gsJD3DpYZSYquiA7UIPsMDSlAooYWDvHPq9VRsqzJEk2PZtFvLvHPb4aaMD8Ufd62xzYn32cnnkzsEOJhyGilA==", + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz", + "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==", "dev": true, "requires": { - "@vue/compiler-core": "3.2.21", - "@vue/shared": "3.2.21" + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31" } }, "@vue/compiler-sfc": { - "version": "3.2.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.21.tgz", - "integrity": "sha512-+yDlUSebKpz/ovxM2vLRRx7w/gVfY767pOfYTgbIhAs+ogvIV2BsIt4fpxlThnlCNChJ+yE0ERUNoROv2kEGEQ==", + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz", + "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==", "dev": true, "requires": { - "@babel/parser": "^7.15.0", - "@vue/compiler-core": "3.2.21", - "@vue/compiler-dom": "3.2.21", - "@vue/compiler-ssr": "3.2.21", - "@vue/ref-transform": "3.2.21", - "@vue/shared": "3.2.21", + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/compiler-dom": "3.2.31", + "@vue/compiler-ssr": "3.2.31", + "@vue/reactivity-transform": "3.2.31", + "@vue/shared": "3.2.31", "estree-walker": "^2.0.2", "magic-string": "^0.25.7", "postcss": "^8.1.10", "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@vue/compiler-ssr": { - "version": "3.2.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.21.tgz", - "integrity": "sha512-eU+A0iWYy+1zAo2CRIJ0zSVlv1iuGAIbNRCnllSJ31pV1lX3jypJYzGbJlSRAbB7VP6E+tYveVT1Oq8JKewa3g==", + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz", + "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==", "dev": true, "requires": { - "@vue/compiler-dom": "3.2.21", - "@vue/shared": "3.2.21" + "@vue/compiler-dom": "3.2.31", + "@vue/shared": "3.2.31" } }, - "@vue/ref-transform": { - "version": "3.2.21", - "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.21.tgz", - "integrity": "sha512-uiEWWBsrGeun9O7dQExYWzXO3rHm/YdtFNXDVqCSoPypzOVxWxdiL+8hHeWzxMB58fVuV2sT80aUtIVyaBVZgQ==", + "@vue/reactivity-transform": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz", + "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==", "dev": true, "requires": { - "@babel/parser": "^7.15.0", - "@vue/compiler-core": "3.2.21", - "@vue/shared": "3.2.21", + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "@vue/shared": { - "version": "3.2.21", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.21.tgz", - "integrity": "sha512-5EQmIPK6gw4UVYUbM959B0uPsJ58+xoMESCZs3N89XyvJ9e+fX4pqEPrOGV8OroIk3SbEvJcC+eYc8BH9JQrHA==", + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz", + "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==", "dev": true }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} }, "acorn-walk": { "version": "8.2.0", @@ -703,62 +8432,22 @@ "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "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": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "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", @@ -786,9 +8475,9 @@ } }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "archy": { "version": "1.0.0", @@ -797,18 +8486,19 @@ "dev": true }, "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" } }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -940,29 +8630,6 @@ "update-notifier": "^5.0.1", "write-file-atomic": "^3.0.3", "yargs": "^16.2.0" - }, - "dependencies": { - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "balanced-match": { @@ -1000,19 +8667,6 @@ "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "bluebird": { @@ -1047,38 +8701,6 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -1105,15 +8727,15 @@ } }, "browserslist": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.0.tgz", - "integrity": "sha512-ER2M0g5iAR84fS/zjBDqEgU6iO5fS9JI2EkHr5zxDxYEFk3LjhU9Vpp/INb6RMQphxko7PDV1FH38H/qVP5yCA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz", + "integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", + "caniuse-lite": "^1.0.30001313", + "electron-to-chromium": "^1.4.76", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" } }, @@ -1152,15 +8774,6 @@ "responselike": "^1.0.2" }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -1194,9 +8807,9 @@ "dev": true }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "camelcase-keys": { @@ -1219,9 +8832,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001280", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz", - "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==", + "version": "1.0.30001314", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz", + "integrity": "sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==", "dev": true }, "catharsis": { @@ -1233,15 +8846,16 @@ } }, "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", + "loupe": "^2.3.1", "pathval": "^1.1.1", "type-detect": "^4.0.5" } @@ -1274,6 +8888,21 @@ "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==", + "dev": true } } }, @@ -1310,9 +8939,9 @@ } }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -1369,21 +8998,6 @@ "wrap-ansi": "^5.1.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -1399,6 +9013,12 @@ "locate-path": "^3.0.0" } }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -1556,40 +9176,6 @@ "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "cliui": { @@ -1601,40 +9187,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "clone": { @@ -1660,35 +9212,35 @@ "convert-to-spaces": "^1.0.1" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "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==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "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==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "comment-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", - "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", + "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", "dev": true }, "common-path-prefix": { @@ -1774,20 +9326,6 @@ "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" - }, - "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - } } }, "cross-env": { @@ -1824,18 +9362,25 @@ "inherits": "^2.0.4", "source-map": "^0.6.1", "source-map-resolve": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "requires": { "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, "css-what": { @@ -1871,9 +9416,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -1953,14 +9498,6 @@ "dev": true, "requires": { "strip-bom": "^4.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - } } }, "defaults": { @@ -2008,12 +9545,12 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depcheck": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.2.tgz", - "integrity": "sha512-oYaBLRbF5NMkYxc5rltnqtuPAn25Lx5xPBIJXy5oUVBgrEDDtotCoYUfFH8lvcmSWzgk1Ts9H+f4Rk0oWL51LQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.3.tgz", + "integrity": "sha512-vy8xe1tlLFu7t4jFyoirMmOR7x7N601ubU9Gkifyr9z8rjBFtEdWHDBMqXyk6OkK+94NXutzddVXJuo0JlUQKQ==", "dev": true, "requires": { - "@babel/parser": "^7.12.5", + "@babel/parser": "7.16.4", "@babel/traverse": "^7.12.5", "@vue/compiler-sfc": "^3.0.5", "camelcase": "^6.2.0", @@ -2089,9 +9626,9 @@ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "requires": { "domelementtype": "^2.2.0" } @@ -2128,6 +9665,38 @@ "dev": true, "requires": { "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "duplexer3": { @@ -2137,9 +9706,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.896", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.896.tgz", - "integrity": "sha512-NcGkBVXePiuUrPLV8IxP43n1EOtdg+dudVjrfVEUd/bOqpQUFZ2diL5PPYzbgEhZFEltdXV3AcyKwGnEQ5lhMA==", + "version": "1.4.78", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.78.tgz", + "integrity": "sha512-o61+D/Lx7j/E0LIin/efOqeHpXhwi1TaQco9vUcRmr91m25SfZY6L5hWJDv/r+6kNjboFKgBw1LbfM0lbhuK6Q==", "dev": true }, "emittery": { @@ -2151,8 +9720,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "end-of-stream": { "version": "1.4.4", @@ -2163,15 +9731,6 @@ "once": "^1.4.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -2193,13 +9752,13 @@ } }, "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "version": "0.10.57", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.57.tgz", + "integrity": "sha512-L7cCNoPwTkAp7IBHxrKLsh7NKiVFkcdxlP9vbVw9QUvb7gF0Mz9bEBN0WY9xqdTjGF907EMT/iG013vnbqwu1Q==", "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" } }, "es6-error": { @@ -2293,9 +9852,10 @@ "dev": true }, "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "escape-unicode": { "version": "0.2.0", @@ -2314,121 +9874,79 @@ } }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.2.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "is-glob": "^4.0.3" } }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "ansi-regex": "^5.0.1" + "argparse": "^2.0.1" } }, "type-fest": { @@ -2443,57 +9961,73 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-jsdoc": { - "version": "37.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.0.3.tgz", - "integrity": "sha512-Qg/gIZAfcrM4Qu/JzcnxPGD45Je6wPLFzMZQboeqit/CL4aY6wuzBTkgUMiWXfw/PaPl+sb0GF1XdBlV23ReDA==", + "version": "37.9.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", + "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "0.12.0", - "comment-parser": "1.2.4", - "debug": "^4.3.2", + "@es-joy/jsdoccomment": "~0.20.1", + "comment-parser": "1.3.0", + "debug": "^4.3.3", + "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "^2.0.0", - "lodash": "^4.17.21", "regextras": "^0.8.0", "semver": "^7.3.5", "spdx-expression-parse": "^3.0.1" } }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" } }, "esprima": { @@ -2575,9 +10109,9 @@ }, "dependencies": { "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" } } }, @@ -2601,17 +10135,6 @@ "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" - }, - "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" - } - } } }, "fast-deep-equal": { @@ -2627,9 +10150,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -2745,9 +10268,9 @@ } }, "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "foreground-child": { @@ -2791,18 +10314,19 @@ "dev": true }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "requires": { - "aproba": "^1.0.3", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" } }, "gensync": { @@ -2812,9 +10336,9 @@ "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==", + "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 }, "get-func-name": { @@ -2836,9 +10360,9 @@ "dev": true }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "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" @@ -2887,15 +10411,15 @@ "dev": true }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, @@ -2916,12 +10440,23 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "hard-rejection": { "version": "2.1.0", @@ -2945,6 +10480,14 @@ "dev": true, "requires": { "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } } }, "has-flag": { @@ -2972,14 +10515,6 @@ "requires": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } } }, "hosted-git-info": { @@ -3018,9 +10553,9 @@ "dev": true }, "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "ignore-by-default": { "version": "2.0.0", @@ -3028,6 +10563,12 @@ "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==", "dev": true }, + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -3036,14 +10577,6 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } } }, "import-lazy": { @@ -3053,9 +10586,9 @@ "dev": true }, "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "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", @@ -3134,9 +10667,9 @@ } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" @@ -3160,12 +10693,9 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", @@ -3278,9 +10808,10 @@ "dev": true }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -3369,12 +10900,20 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -3412,30 +10951,38 @@ } }, "jsdoc": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.7.tgz", - "integrity": "sha512-sxKt7h0vzCd+3Y81Ey2qinupL6DpRSZJclS04ugHDNmRUXGzqicMJ6iwayhSA0S0DwwX30c5ozyUthr1QKF6uw==", + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", + "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", "requires": { "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", "bluebird": "^3.7.2", "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.1", - "klaw": "^3.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.7", - "marked": "^2.0.3", + "js2xmlparser": "^4.0.2", + "klaw": "^4.0.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", "mkdirp": "^1.0.4", "requizzle": "^0.2.3", "strip-json-comments": "^3.1.0", "taffydb": "2.6.2", - "underscore": "~1.13.1" + "underscore": "~1.13.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } } }, "jsdoc-type-pratt-parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.0.0.tgz", - "integrity": "sha512-sUuj2j48wxrEpbFjDp1sAesAxPiLT+z0SWVmMafyIINs6Lj5gIPKh3VrkBZu4E/Dv+wHpOot0m6H8zlHQjwqeQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", + "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", "dev": true }, "jsesc": { @@ -3505,12 +11052,9 @@ "dev": true }, "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "requires": { - "graceful-fs": "^4.1.9" - } + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", + "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==" }, "latest-version": { "version": "5.1.0", @@ -3542,15 +11086,15 @@ } }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "requires": { "uc.micro": "^1.0.1" } @@ -3566,6 +11110,30 @@ "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": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "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": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "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 + } } }, "locate-path": { @@ -3612,12 +11180,6 @@ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", "dev": true }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3637,6 +11199,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -3652,12 +11223,12 @@ } }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" } }, "make-dir": { @@ -3691,33 +11262,39 @@ "dev": true }, "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" } } }, "markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==" + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz", + "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==", + "requires": {} }, "marked": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", - "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==" + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==" }, "matcher": { "version": "3.0.0", @@ -3726,14 +11303,6 @@ "dev": true, "requires": { "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } } }, "md5-hex": { @@ -3758,14 +11327,6 @@ "requires": { "map-age-cleaner": "^0.1.3", "mimic-fn": "^3.1.0" - }, - "dependencies": { - "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 - } } }, "meow": { @@ -3787,27 +11348,11 @@ "yargs-parser": "^18.1.3" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, @@ -3831,9 +11376,9 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "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": { @@ -3849,9 +11394,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -3896,12 +11441,6 @@ "normalize-path": "^2.1.1" }, "dependencies": { - "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 - }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", @@ -3933,9 +11472,9 @@ } }, "nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, "natural-compare": { @@ -3945,18 +11484,18 @@ "dev": true }, "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "nise": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", - "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", + "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": ">=5", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", "path-to-regexp": "^1.7.0" @@ -3972,9 +11511,9 @@ } }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "dev": true }, "normalize-package-data": { @@ -4010,14 +11549,14 @@ "dev": true }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, "nth-check": { @@ -4028,11 +11567,6 @@ "boolbase": "^1.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -4068,12 +11602,6 @@ "yargs": "^15.0.2" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4083,12 +11611,6 @@ "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -4100,10 +11622,25 @@ "wrap-ansi": "^6.2.0" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "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==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "p-map": { @@ -4115,25 +11652,11 @@ "aggregate-error": "^3.0.0" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, "wrap-ansi": { "version": "6.2.0", @@ -4170,16 +11693,6 @@ "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, @@ -4203,6 +11716,14 @@ "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": { @@ -4257,23 +11778,6 @@ "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "p-cancelable": { @@ -4387,13 +11891,15 @@ } }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, "parse-ms": { @@ -4445,14 +11951,6 @@ "dev": true, "requires": { "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } } }, "path-type": { @@ -4467,9 +11965,9 @@ "dev": true }, "peek-readable": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz", - "integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", "dev": true }, "pend": { @@ -4485,9 +11983,9 @@ "dev": true }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { "version": "4.0.1", @@ -4569,14 +12067,14 @@ } }, "postcss": { - "version": "8.3.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", - "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", + "version": "8.4.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz", + "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==", "dev": true, "requires": { - "nanoid": "^3.1.30", + "nanoid": "^3.3.1", "picocolors": "^1.0.0", - "source-map-js": "^0.6.2" + "source-map-js": "^1.0.2" } }, "prelude-ls": { @@ -4624,12 +12122,6 @@ "fromentries": "^1.2.0" } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -4718,18 +12210,6 @@ "type-fest": "^0.6.0" }, "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -4747,28 +12227,16 @@ "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readable-web-to-node-stream": { @@ -4804,6 +12272,17 @@ "dev": true, "requires": { "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "redent": { @@ -4875,6 +12354,33 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -4884,12 +12390,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -4911,13 +12411,14 @@ } }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -4927,12 +12428,20 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "responselike": { @@ -4981,12 +12490,14 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "sass": { - "version": "1.43.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz", - "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==", + "version": "1.49.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", + "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", "dev": true, "requires": { - "chokidar": ">=3.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" } }, "sax": { @@ -5072,15 +12583,15 @@ "dev": true }, "sift": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/sift/-/sift-15.0.0.tgz", - "integrity": "sha512-FrKLXaUad4IYEpIzs9BAaXXNwcRnzg2vPfPTDgPRrKncMhgx9wftFzJrIRh9SCxxz0zHgvSKULQRRGA9JQWcZQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", + "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==", "dev": true }, "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sinon": { "version": "11.1.2", @@ -5121,23 +12632,33 @@ "color-convert": "^2.0.1" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "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==", "dev": true } } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, "source-map-resolve": { @@ -5150,19 +12671,25 @@ } }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "spawn-wrap": { "version": "2.0.0", @@ -5205,15 +12732,16 @@ } }, "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "stack-utils": { "version": "2.0.5", @@ -5222,38 +12750,53 @@ "dev": true, "requires": { "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "safe-buffer": "~5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, "strip-indent": { @@ -5271,13 +12814,13 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "strtok3": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz", - "integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", "dev": true, "requires": { "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.0.1" + "peek-readable": "^4.1.0" } }, "supertap": { @@ -5291,23 +12834,6 @@ "js-yaml": "^3.14.0", "serialize-error": "^7.0.1", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "supports-color": { @@ -5319,90 +12845,11 @@ "has-flag": "^4.0.0" } }, - "table": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", - "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.0.tgz", - "integrity": "sha512-L+cJ/+pkdICMueKR6wIx3VP2fjIx3yAhuvadUv/osv9yFD7OVZy442xFF+Oeu3ZvmhBGQzoF6mTSt+LUWBmGQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true }, "taffydb": { "version": "2.6.2", @@ -5421,6 +12868,12 @@ "tap-parser": "^3.0.3" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -5460,6 +12913,15 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -5480,6 +12942,41 @@ "events-to-array": "^1.0.1", "js-yaml": "^3.2.7", "readable-stream": "^2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "tap-xunit": { @@ -5496,6 +12993,39 @@ "xtend": "~4.0.0" }, "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "tap-parser": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-1.2.2.tgz", @@ -5507,15 +13037,6 @@ "js-yaml": "^3.2.7", "readable-stream": "^2" } - }, - "xmlbuilder": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", - "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "dev": true, - "requires": { - "lodash": "^4.0.0" - } } } }, @@ -5547,10 +13068,11 @@ } }, "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.0.tgz", + "integrity": "sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==", "requires": { + "acorn": "^8.5.0", "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" @@ -5588,6 +13110,38 @@ "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "time-zone": { @@ -5672,9 +13226,9 @@ "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==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "typedarray-to-buffer": { @@ -5692,9 +13246,9 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, "underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" }, "unique-string": { "version": "2.0.0", @@ -5817,40 +13371,6 @@ "dev": true, "requires": { "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "wolfy87-eventemitter": { @@ -5876,12 +13396,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5891,31 +13405,20 @@ "color-convert": "^2.0.1" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "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": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "color-name": "~1.1.4" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "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 } } }, @@ -5949,12 +13452,23 @@ "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + } } }, "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true, + "requires": { + "lodash": "^4.0.0" + } }, "xmlcreate": { "version": "2.0.4", @@ -5999,45 +13513,37 @@ "yargs-parser": "^20.2.2" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } }, "yauzl": { "version": "2.10.0", diff --git a/package.json b/package.json index 6cda9843b..58aafc8cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ui5/builder", - "version": "2.11.2", + "version": "3.0.0-alpha.3", "description": "UI5 Tooling - Builder", "author": { "name": "SAP SE", @@ -18,8 +18,8 @@ ], "main": "index.js", "engines": { - "node": ">= 10", - "npm": ">= 5" + "node": ">= 16.13.2", + "npm": ">= 8" }, "scripts": { "test": "npm run lint && npm run jsdoc-generate && npm run coverage && npm run depcheck", @@ -34,16 +34,17 @@ "coverage": "nyc npm run unit", "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": "node_modules/.bin/jsdoc -c ./jsdoc.json ./lib/ || (echo 'Error during JSDoc generation! Check log.' && exit 1)", + "jsdoc-generate": "jsdoc -c ./jsdoc.json -t $(node -p 'path.dirname(require.resolve(\"docdash\"))') ./lib/ || (echo 'Error during JSDoc generation! Check log.' && exit 1)", "jsdoc-watch": "npm run jsdoc && chokidar \"./lib/**/*.js\" -c \"npm run jsdoc-generate\"", "preversion": "npm test", - "version": "git-chglog --next-tag v$npm_package_version -o CHANGELOG.md && git add CHANGELOG.md", + "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 -c .chglog/release-config.yml v$npm_package_version", + "release-note": "git-chglog --sort semver -c .chglog/release-config.yml v$npm_package_version", "depcheck": "depcheck --ignores docdash" }, "files": [ "index.js", + "CHANGELOG.md", "CONTRIBUTING.md", "jsdoc.json", "lib/**", @@ -104,14 +105,14 @@ "url": "git@github.com:SAP/ui5-builder.git" }, "dependencies": { - "@ui5/fs": "^2.0.6", - "@ui5/logger": "^2.0.1", + "@ui5/fs": "^3.0.0-alpha.2", + "@ui5/logger": "^3.0.1-alpha.1", "cheerio": "1.0.0-rc.9", "escape-unicode": "^0.2.0", "escope": "^3.6.0", - "espree": "^6.2.1", - "globby": "^11.0.4", - "graceful-fs": "^4.2.8", + "espree": "^9.3.1", + "globby": "^11.1.0", + "graceful-fs": "^4.2.9", "jsdoc": "^3.6.7", "less-openui5": "^0.11.2", "make-dir": "^3.1.0", @@ -120,7 +121,8 @@ "replacestream": "^4.0.3", "rimraf": "^3.0.2", "semver": "^7.3.5", - "terser": "^5.9.0", + "sourcemap-codec": "^1.4.8", + "terser": "^5.10.0", "xml2js": "^0.4.23", "yazl": "^2.5.1" }, @@ -130,11 +132,11 @@ "chai-fs": "^2.0.0", "chokidar-cli": "^3.0.0", "cross-env": "^7.0.3", - "depcheck": "^1.4.2", + "depcheck": "^1.4.3", "docdash": "^1.2.0", - "eslint": "^7.32.0", + "eslint": "^8.7.0", "eslint-config-google": "^0.14.0", - "eslint-plugin-jsdoc": "^37.0.3", + "eslint-plugin-jsdoc": "^37.6.3", "extract-zip": "^2.0.1", "mock-require": "^3.0.3", "nyc": "^15.1.0", diff --git a/test/expected/build/application.a/dest-clean/fileWithoutExtension b/test/expected/build/application.a/dest-clean/fileWithoutExtension new file mode 100644 index 000000000..1a39ca7a7 --- /dev/null +++ b/test/expected/build/application.a/dest-clean/fileWithoutExtension @@ -0,0 +1 @@ +A file without an extension \ No newline at end of file diff --git a/test/expected/build/application.a/dest-clean/index.html b/test/expected/build/application.a/dest-clean/index.html new file mode 100644 index 000000000..1523b1dc3 --- /dev/null +++ b/test/expected/build/application.a/dest-clean/index.html @@ -0,0 +1,11 @@ + + + + Application A + + + + + + \ No newline at end of file diff --git a/test/expected/build/application.a/dest-clean/test.js b/test/expected/build/application.a/dest-clean/test.js new file mode 100644 index 000000000..cb4595405 --- /dev/null +++ b/test/expected/build/application.a/dest-clean/test.js @@ -0,0 +1,9 @@ +sap.ui.define([ + "library/d/some" +], function(someObject) { + function test(paramA) { + var variableA = paramA; + console.log(variableA); + } + test(); +}); diff --git a/test/expected/build/application.a/dest-deps-incl/fileWithoutExtension b/test/expected/build/application.a/dest-deps-incl/fileWithoutExtension new file mode 100644 index 000000000..1a39ca7a7 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/fileWithoutExtension @@ -0,0 +1 @@ +A file without an extension \ No newline at end of file diff --git a/test/expected/build/application.a/dest-deps-incl/index.html b/test/expected/build/application.a/dest-deps-incl/index.html new file mode 100644 index 000000000..1523b1dc3 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/index.html @@ -0,0 +1,11 @@ + + + + Application A + + + + + + \ No newline at end of file diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/a/.library b/test/expected/build/application.a/dest-deps-incl/resources/library/a/.library new file mode 100644 index 000000000..cddfadd9a --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/a/.library @@ -0,0 +1,17 @@ + + + + library.a + SAP SE + Some fancy copyright ${currentYear} + 1.0.0 + + Library A + + + + library.d + + + + diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library-RTL.css b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library-RTL.css new file mode 100644 index 000000000..5398b3f08 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library-RTL.css @@ -0,0 +1,3 @@ +.library-a-foo{color:#fafad2;padding:1px 4px 3px 2px} +/* Inline theming parameters */ +#sap-ui-theme-library\.a{background-image:url('data:text/plain;utf-8,%7B%22libraryAColor1%22%3A%22%23fafad2%22%7D')} diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library-parameters.json b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library-parameters.json new file mode 100644 index 000000000..da3b7a52f --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library-parameters.json @@ -0,0 +1 @@ +{"libraryAColor1":"#fafad2"} \ No newline at end of file diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library.css b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library.css new file mode 100644 index 000000000..ba056b3c0 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library.css @@ -0,0 +1,3 @@ +.library-a-foo{color:#fafad2;padding:1px 2px 3px 4px} +/* Inline theming parameters */ +#sap-ui-theme-library\.a{background-image:url('data:text/plain;utf-8,%7B%22libraryAColor1%22%3A%22%23fafad2%22%7D')} diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library.source.less b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library.source.less new file mode 100644 index 000000000..ff0f1d5e3 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/a/themes/base/library.source.less @@ -0,0 +1,6 @@ +@libraryAColor1: lightgoldenrodyellow; + +.library-a-foo { + color: @libraryAColor1; + padding: 1px 2px 3px 4px; +} diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/b/.library b/test/expected/build/application.a/dest-deps-incl/resources/library/b/.library new file mode 100644 index 000000000..8cfb124a9 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/b/.library @@ -0,0 +1,17 @@ + + + + library.b + SAP SE + Some fancy copyright ${currentYear} + 1.0.0 + + Library B + + + + library.d + + + + diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/c/.library b/test/expected/build/application.a/dest-deps-incl/resources/library/c/.library new file mode 100644 index 000000000..3c011ecd6 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/c/.library @@ -0,0 +1,17 @@ + + + + library.c + SAP SE + ${copyright} + 1.0.0 + + Library C + + + + library.d + + + + diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/d/.library b/test/expected/build/application.a/dest-deps-incl/resources/library/d/.library new file mode 100644 index 000000000..d6a612a92 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/d/.library @@ -0,0 +1,11 @@ + + + + library.d + SAP SE + Some fancy copyright + 1.0.0 + + Library D + + diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/d/some-dbg.js b/test/expected/build/application.a/dest-deps-incl/resources/library/d/some-dbg.js new file mode 100644 index 000000000..1e8c6a2f9 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/d/some-dbg.js @@ -0,0 +1,7 @@ +/*! + * Some fancy copyright + */ +(function() { + var someNonUglifiedVariable = "World"; + console.log('Hello ' + someNonUglifiedVariable); +})(); diff --git a/test/expected/build/application.a/dest-deps-incl/resources/library/d/some.js b/test/expected/build/application.a/dest-deps-incl/resources/library/d/some.js new file mode 100644 index 000000000..c23f5f207 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/library/d/some.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +(function(){var o="World";console.log("Hello "+o)})(); \ No newline at end of file diff --git a/test/expected/build/application.a/dest-deps-incl/resources/ui5loader-dbg.js b/test/expected/build/application.a/dest-deps-incl/resources/ui5loader-dbg.js new file mode 100644 index 000000000..0e76321fd --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/resources/ui5loader-dbg.js @@ -0,0 +1 @@ +// this is just a marker file to enable the EVO bundle format diff --git a/test/expected/build/application.a/dest-deps-incl/resources/ui5loader.js b/test/expected/build/application.a/dest-deps-incl/resources/ui5loader.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/expected/build/application.a/dest-deps-incl/test-dbg.js b/test/expected/build/application.a/dest-deps-incl/test-dbg.js new file mode 100644 index 000000000..cb4595405 --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/test-dbg.js @@ -0,0 +1,9 @@ +sap.ui.define([ + "library/d/some" +], function(someObject) { + function test(paramA) { + var variableA = paramA; + console.log(variableA); + } + test(); +}); diff --git a/test/expected/build/application.a/dest-deps-incl/test-resources/LibraryC/Test.html b/test/expected/build/application.a/dest-deps-incl/test-resources/LibraryC/Test.html new file mode 100644 index 000000000..e69de29bb diff --git a/test/expected/build/application.a/dest-deps-incl/test-resources/library/a/Test.html b/test/expected/build/application.a/dest-deps-incl/test-resources/library/a/Test.html new file mode 100644 index 000000000..e69de29bb diff --git a/test/expected/build/application.a/dest-deps-incl/test-resources/library/b/Test.html b/test/expected/build/application.a/dest-deps-incl/test-resources/library/b/Test.html new file mode 100644 index 000000000..e69de29bb diff --git a/test/expected/build/application.a/dest-deps-incl/test-resources/library/d/Test.html b/test/expected/build/application.a/dest-deps-incl/test-resources/library/d/Test.html new file mode 100644 index 000000000..e69de29bb diff --git a/test/expected/build/application.a/dest-deps-incl/test.js b/test/expected/build/application.a/dest-deps-incl/test.js new file mode 100644 index 000000000..fd8278c6e --- /dev/null +++ b/test/expected/build/application.a/dest-deps-incl/test.js @@ -0,0 +1 @@ +sap.ui.define(["library/d/some"],function(n){function o(n){var o=n;console.log(o)}o()}); \ No newline at end of file diff --git a/test/expected/build/application.a/dest-depself/resources/sap-ui-custom-dbg.js b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom-dbg.js index 456319972..54dbb5e7d 100644 --- a/test/expected/build/application.a/dest-depself/resources/sap-ui-custom-dbg.js +++ b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom-dbg.js @@ -1 +1,2 @@ //@ui5-bundle sap-ui-custom-dbg.js +//# sourceMappingURL=sap-ui-custom-dbg.js.map diff --git a/test/expected/build/application.a/dest-depself/resources/sap-ui-custom-dbg.js.map b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom-dbg.js.map new file mode 100644 index 000000000..7c185dcc4 --- /dev/null +++ b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-custom-dbg.js","sections":[]} \ No newline at end of file diff --git a/test/expected/build/application.a/dest-depself/resources/sap-ui-custom.js b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom.js index c1aee5600..0a39f3213 100644 --- a/test/expected/build/application.a/dest-depself/resources/sap-ui-custom.js +++ b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom.js @@ -1,10 +1,13 @@ //@ui5-bundle sap-ui-custom.js sap.ui.require.preload({ - "application/a/test.js":function(){sap.ui.define(["library/d/some"],function(n){function o(n){var o=n;console.log(o)}o()}); + "application/a/test.js":function(){ +sap.ui.define(["library/d/some"],function(n){function o(n){var o=n;console.log(o)}o()}); }, - "library/d/some.js":function(){/*! + "library/d/some.js":function(){ +/*! * Some fancy copyright */ (function(){var o="World";console.log("Hello "+o)})(); } }); +//# sourceMappingURL=sap-ui-custom.js.map diff --git a/test/expected/build/application.a/dest-depself/resources/sap-ui-custom.js.map b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom.js.map new file mode 100644 index 000000000..a8c0b442f --- /dev/null +++ b/test/expected/build/application.a/dest-depself/resources/sap-ui-custom.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-custom.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["sap-ui-custom.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["test-dbg.js"],"names":["sap","ui","define","someObject","test","paramA","variableA","console","log"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CACV,kBACD,SAASC,GACX,SAASC,EAAKC,GACb,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test.js","sourceRoot":"application/a"}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["some-dbg.js"],"names":["someNonUglifiedVariable","console","log"],"mappings":"AAAA;;;CAGA,WACC,IAAIA,EAA0B,QAC9BC,QAAQC,IAAI,SAAWF,IAFxB","file":"some.js","sourceRoot":"library/d"}}]} \ No newline at end of file diff --git a/test/expected/build/application.a/dest-self/resources/sap-ui-custom-dbg.js b/test/expected/build/application.a/dest-self/resources/sap-ui-custom-dbg.js index 456319972..54dbb5e7d 100644 --- a/test/expected/build/application.a/dest-self/resources/sap-ui-custom-dbg.js +++ b/test/expected/build/application.a/dest-self/resources/sap-ui-custom-dbg.js @@ -1 +1,2 @@ //@ui5-bundle sap-ui-custom-dbg.js +//# sourceMappingURL=sap-ui-custom-dbg.js.map diff --git a/test/expected/build/application.a/dest-self/resources/sap-ui-custom-dbg.js.map b/test/expected/build/application.a/dest-self/resources/sap-ui-custom-dbg.js.map new file mode 100644 index 000000000..7c185dcc4 --- /dev/null +++ b/test/expected/build/application.a/dest-self/resources/sap-ui-custom-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-custom-dbg.js","sections":[]} \ No newline at end of file diff --git a/test/expected/build/application.a/dest-self/resources/sap-ui-custom.js b/test/expected/build/application.a/dest-self/resources/sap-ui-custom.js index 7728d6932..9605939bb 100644 --- a/test/expected/build/application.a/dest-self/resources/sap-ui-custom.js +++ b/test/expected/build/application.a/dest-self/resources/sap-ui-custom.js @@ -1,10 +1,16 @@ //@ui5-bundle sap-ui-custom.js sap.ui.require.preload({ - "application/a/test.js":function(){sap.ui.define(["library/d/some"],function(n){function o(n){var o=n;console.log(o)}o()}); + "application/a/test.js":function(){ +sap.ui.define(["library/d/some"],function(n){function o(n){var o=n;console.log(o)}o()}); }, - "library/d/some.js":function(){/*! + "library/d/some.js":function(){ +/*! * ${copyright} */ -(function(){var o="World";console.log("Hello "+o)})(); +(function() { + var someNonUglifiedVariable = "World"; + console.log('Hello ' + someNonUglifiedVariable); +})(); } }); +//# sourceMappingURL=sap-ui-custom.js.map diff --git a/test/expected/build/application.a/dest-self/resources/sap-ui-custom.js.map b/test/expected/build/application.a/dest-self/resources/sap-ui-custom.js.map new file mode 100644 index 000000000..587957a0b --- /dev/null +++ b/test/expected/build/application.a/dest-self/resources/sap-ui-custom.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-custom.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["sap-ui-custom.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["test-dbg.js"],"names":["sap","ui","define","someObject","test","paramA","variableA","console","log"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CACV,kBACD,SAASC,GACX,SAASC,EAAKC,GACb,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test.js","sourceRoot":"application/a"}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["some.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":"library/d"}}]} \ No newline at end of file diff --git a/test/expected/build/application.b/dest/embedded/i18n_fr.properties b/test/expected/build/application.b/dest/embedded/i18n_fr.properties new file mode 100644 index 000000000..85e162740 --- /dev/null +++ b/test/expected/build/application.b/dest/embedded/i18n_fr.properties @@ -0,0 +1 @@ +title=embedded-i18n_fr-wrong \ No newline at end of file diff --git a/test/expected/build/application.b/dest/i18n.properties b/test/expected/build/application.b/dest/i18n.properties new file mode 100644 index 000000000..e8dc9e0da --- /dev/null +++ b/test/expected/build/application.b/dest/i18n.properties @@ -0,0 +1,2 @@ +title=app-i18n-wrong +fame=Stra\u00dfe \ No newline at end of file diff --git a/test/expected/build/application.b/dest/i18n/l10n.properties b/test/expected/build/application.b/dest/i18n/l10n.properties new file mode 100644 index 000000000..e8dc9e0da --- /dev/null +++ b/test/expected/build/application.b/dest/i18n/l10n.properties @@ -0,0 +1,2 @@ +title=app-i18n-wrong +fame=Stra\u00dfe \ No newline at end of file diff --git a/test/expected/build/application.b/dest/manifest-bundle.zip b/test/expected/build/application.b/dest/manifest-bundle.zip new file mode 100644 index 000000000..1e5d351a8 Binary files /dev/null and b/test/expected/build/application.b/dest/manifest-bundle.zip differ diff --git a/test/expected/build/application.b/standalone/resources/sap-ui-custom-dbg.js b/test/expected/build/application.b/standalone/resources/sap-ui-custom-dbg.js index 4c5f70cc4..431dde210 100644 --- a/test/expected/build/application.b/standalone/resources/sap-ui-custom-dbg.js +++ b/test/expected/build/application.b/standalone/resources/sap-ui-custom-dbg.js @@ -1,4 +1,10 @@ //@ui5-bundle sap-ui-custom-dbg.js +//@ui5-bundle-raw-include ui5loader-autoconfig.js +(function () { + var thisIsTheUi5LoaderAutoconfig = true; + console.log(thisIsTheUi5LoaderAutoconfig); +})() sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); +//# sourceMappingURL=sap-ui-custom-dbg.js.map diff --git a/test/expected/build/application.b/standalone/resources/sap-ui-custom-dbg.js.map b/test/expected/build/application.b/standalone/resources/sap-ui-custom-dbg.js.map new file mode 100644 index 000000000..0a374bce4 --- /dev/null +++ b/test/expected/build/application.b/standalone/resources/sap-ui-custom-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-custom-dbg.js","sections":[{"offset":{"line":2,"column":0},"map":{"version":3,"sources":["ui5loader-autoconfig.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["sap-ui-custom-dbg.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.requireSync(\"sap/ui/core/Core\");\n"],"sourceRoot":""}},{"offset":{"line":7,"column":0},"map":{"version":3,"sources":["sap-ui-custom-dbg.js?bundle-code-1"],"mappings":"AAAA;AACA","sourcesContent":["// as this module contains the Core, we ensure that the Core has been booted\nsap.ui.getCore().boot && sap.ui.getCore().boot();"],"sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.b/standalone/resources/sap-ui-custom.js b/test/expected/build/application.b/standalone/resources/sap-ui-custom.js index 08327d586..df8d2af8b 100644 --- a/test/expected/build/application.b/standalone/resources/sap-ui-custom.js +++ b/test/expected/build/application.b/standalone/resources/sap-ui-custom.js @@ -1,7 +1,10 @@ //@ui5-bundle sap-ui-custom.js -jQuery.sap.registerPreloadedModules({ -"version":"2.0", -"modules":{ +//@ui5-bundle-raw-include ui5loader-autoconfig.js +(function () { + var thisIsTheUi5LoaderAutoconfig = true; + console.log(thisIsTheUi5LoaderAutoconfig); +})() +sap.ui.require.preload({ "id1/embedded/i18n/i18n.properties":'title=embedded-i18n', "id1/embedded/i18n/i18n_de.properties":'title=embedded-i18n_de', "id1/embedded/i18n_fr.properties":'title=embedded-i18n_fr-wrong', @@ -12,8 +15,13 @@ jQuery.sap.registerPreloadedModules({ "id1/i18n/l10n.properties":'title=app-i18n-wrong\nfame=Stra\\u00dfe', "id1/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"id1","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}', "sap/ui/core/Core.js":function(){ +(function () { + var core = true; + console.log(core); +})() } -}}); +}); sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); +//# sourceMappingURL=sap-ui-custom.js.map diff --git a/test/expected/build/application.b/standalone/resources/sap-ui-custom.js.map b/test/expected/build/application.b/standalone/resources/sap-ui-custom.js.map new file mode 100644 index 000000000..d98966387 --- /dev/null +++ b/test/expected/build/application.b/standalone/resources/sap-ui-custom.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-custom.js","sections":[{"offset":{"line":2,"column":0},"map":{"version":3,"sources":["ui5loader-autoconfig.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["sap-ui-custom.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":17,"column":0},"map":{"version":3,"sources":["Core.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":"sap/ui/core"}},{"offset":{"line":23,"column":0},"map":{"version":3,"sources":["sap-ui-custom.js?bundle-code-1"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.requireSync(\"sap/ui/core/Core\");\n"],"sourceRoot":""}},{"offset":{"line":24,"column":0},"map":{"version":3,"sources":["sap-ui-custom.js?bundle-code-2"],"mappings":"AAAA;AACA","sourcesContent":["// as this module contains the Core, we ensure that the Core has been booted\nsap.ui.getCore().boot && sap.ui.getCore().boot();"],"sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster/Component-preload.js b/test/expected/build/application.g/cachebuster/Component-preload.js index 504dbcbe0..b1f089a2a 100644 --- a/test/expected/build/application.g/cachebuster/Component-preload.js +++ b/test/expected/build/application.g/cachebuster/Component-preload.js @@ -2,13 +2,17 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/g/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); + "application/g/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); }, "application/g/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g","type":"application","applicationVersion":{"version":"1.0.0"},"embeds":["embedded"],"title":"{{title}}"},"customCopyrightString":"Some fancy copyright"}', - "application/g/subcomponentA/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); + "application/g/subcomponentA/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); }, "application/g/subcomponentA/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentA","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}', - "application/g/subcomponentB/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); + "application/g/subcomponentB/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); }, "application/g/subcomponentB/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentB","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/cachebuster/Component-preload.js.map b/test/expected/build/application.g/cachebuster/Component-preload.js.map new file mode 100644 index 000000000..407e4420d --- /dev/null +++ b/test/expected/build/application.g/cachebuster/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":"subcomponentA"}},{"offset":{"line":13,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":"subcomponentB"}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster/sap-ui-cachebuster-info.json b/test/expected/build/application.g/cachebuster/sap-ui-cachebuster-info.json index b7b2814c7..b7fb26273 100644 --- a/test/expected/build/application.g/cachebuster/sap-ui-cachebuster-info.json +++ b/test/expected/build/application.g/cachebuster/sap-ui-cachebuster-info.json @@ -1,12 +1,16 @@ { - "Component-dbg.js": 1540570258000, - "subcomponentA/manifest.json": 1540570258000, - "subcomponentB/manifest.json": 1540570258000, - "subcomponentB/Component.js": 1540570258000, - "subcomponentA/Component.js": 1540570258000, - "Component.js": 1540570258000, - "Component-preload.js": 1554823987259, - "subcomponentB/Component-dbg.js": 1540570258000, - "subcomponentA/Component-dbg.js": 1540570258000, - "manifest.json": 1540570258000 -} + "subcomponentB/manifest.json": 1563262681148, + "subcomponentA/manifest.json": 1563262681148, + "manifest.json": 1563262681147, + "subcomponentB/Component.js": 1563262681148, + "subcomponentA/Component.js": 1563262681148, + "Component.js": 1563262681147, + "subcomponentA/Component-dbg.js": 1563262681148, + "subcomponentA/Component.js.map": 1645537451553, + "subcomponentB/Component-dbg.js": 1563262681148, + "subcomponentB/Component.js.map": 1645537451553, + "Component-dbg.js": 1563262681147, + "Component.js.map": 1645537451553, + "Component-preload.js": 1645537451980, + "Component-preload.js.map": 1645537451980 +} \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/Component-dbg.js b/test/expected/build/application.g/cachebuster_hash/Component-dbg.js new file mode 100644 index 000000000..fd86d4bd8 --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + metadata: { + manifest: "json" + } + }); +}); \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/Component-preload.js b/test/expected/build/application.g/cachebuster_hash/Component-preload.js new file mode 100644 index 000000000..b1f089a2a --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/Component-preload.js @@ -0,0 +1,18 @@ +//@ui5-bundle application/g/Component-preload.js +jQuery.sap.registerPreloadedModules({ +"version":"2.0", +"modules":{ + "application/g/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); +}, + "application/g/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g","type":"application","applicationVersion":{"version":"1.0.0"},"embeds":["embedded"],"title":"{{title}}"},"customCopyrightString":"Some fancy copyright"}', + "application/g/subcomponentA/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); +}, + "application/g/subcomponentA/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentA","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}', + "application/g/subcomponentB/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); +}, + "application/g/subcomponentB/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentB","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}' +}}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/cachebuster_hash/Component-preload.js.map b/test/expected/build/application.g/cachebuster_hash/Component-preload.js.map new file mode 100644 index 000000000..407e4420d --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":"subcomponentA"}},{"offset":{"line":13,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":"subcomponentB"}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/Component.js b/test/expected/build/application.g/cachebuster_hash/Component.js new file mode 100644 index 000000000..6fdb761a9 --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/Component.js @@ -0,0 +1 @@ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/manifest.json b/test/expected/build/application.g/cachebuster_hash/manifest.json new file mode 100644 index 000000000..620705334 --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/manifest.json @@ -0,0 +1,14 @@ +{ + "_version": "1.1.0", + "sap.app": { + "_version": "1.1.0", + "id": "application.g", + "type": "application", + "applicationVersion": { + "version": "1.0.0" + }, + "embeds": ["embedded"], + "title": "{{title}}" + }, + "customCopyrightString": "Some fancy copyright" +} diff --git a/test/expected/build/application.g/cachebuster_hash/sap-ui-cachebuster-info.json b/test/expected/build/application.g/cachebuster_hash/sap-ui-cachebuster-info.json new file mode 100644 index 000000000..5d91cc749 --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/sap-ui-cachebuster-info.json @@ -0,0 +1,16 @@ +{ + "Component-dbg.js": "874c35543ae850262d1552b6c2d00cecaae205a7", + "subcomponentA/manifest.json": "7dfcdf568dcfb47c74d309e2f00193688b112fb7", + "manifest.json": "a867583cff8c3a5135bfbdd97dcb7a9cad4948bd", + "subcomponentB/manifest.json": "3a08d0555e3e49fe683e01205090eed3182b4a9f", + "subcomponentA/Component.js": "37e2d3c99ddf728313ceaddd087c6d547fcbdf8f", + "Component.js": "174e92417f0fa7889c2bdb8a243c4d748d66a4da", + "subcomponentA/Component-dbg.js": "fef3a5814776e5575302f814e96ae31a13df12b7", + "subcomponentA/Component.js.map": "76cd9820f761dd43fe4b2a6f5397d09625603e0d", + "subcomponentB/Component-dbg.js": "c03da2c5ff162c1d9d5e5c4a3edc2cebcda6b0a1", + "subcomponentB/Component.js.map": "76cd9820f761dd43fe4b2a6f5397d09625603e0d", + "subcomponentB/Component.js": "d2a467cc8d05c693b22dbef82c2bff4610611d81", + "Component.js.map": "35e88e40f4933fe235a359361d7bd3459e6f5235", + "Component-preload.js": "5a4592408148af17538a1ee2c70c310931d2575c", + "Component-preload.js.map": "3b5d5de04ca05341ed50444277945dac240505f6" +} \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/subcomponentA/Component-dbg.js b/test/expected/build/application.g/cachebuster_hash/subcomponentA/Component-dbg.js new file mode 100644 index 000000000..5f1b47a8a --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/subcomponentA/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.subcomponentA.Component', { + metadata: { + manifest: "json" + } + }); +}); \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/subcomponentA/Component.js b/test/expected/build/application.g/cachebuster_hash/subcomponentA/Component.js new file mode 100644 index 000000000..0d3fd6ccc --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/subcomponentA/Component.js @@ -0,0 +1 @@ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/subcomponentA/manifest.json b/test/expected/build/application.g/cachebuster_hash/subcomponentA/manifest.json new file mode 100644 index 000000000..ac1f84ae8 --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/subcomponentA/manifest.json @@ -0,0 +1,13 @@ +{ + "_version": "1.1.0", + "sap.app": { + "_version": "1.1.0", + "id": "application.g.subcomponentA", + "type": "application", + "applicationVersion": { + "version": "1.2.2" + }, + "embeds": ["embedded"], + "title": "{{title}}" + } +} \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/subcomponentB/Component-dbg.js b/test/expected/build/application.g/cachebuster_hash/subcomponentB/Component-dbg.js new file mode 100644 index 000000000..5fb07ed25 --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/subcomponentB/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.subcomponentB.Component', { + metadata: { + manifest: "json" + } + }); +}); \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/subcomponentB/Component.js b/test/expected/build/application.g/cachebuster_hash/subcomponentB/Component.js new file mode 100644 index 000000000..c8af2ace9 --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/subcomponentB/Component.js @@ -0,0 +1 @@ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); \ No newline at end of file diff --git a/test/expected/build/application.g/cachebuster_hash/subcomponentB/manifest.json b/test/expected/build/application.g/cachebuster_hash/subcomponentB/manifest.json new file mode 100644 index 000000000..84cd1802f --- /dev/null +++ b/test/expected/build/application.g/cachebuster_hash/subcomponentB/manifest.json @@ -0,0 +1,13 @@ +{ + "_version": "1.1.0", + "sap.app": { + "_version": "1.1.0", + "id": "application.g.subcomponentB", + "type": "application", + "applicationVersion": { + "version": "1.2.2" + }, + "embeds": ["embedded"], + "title": "{{title}}" + } +} \ No newline at end of file diff --git a/test/expected/build/application.g/dest/Component-preload.js b/test/expected/build/application.g/dest/Component-preload.js index bb4d7436f..a186e8cc7 100644 --- a/test/expected/build/application.g/dest/Component-preload.js +++ b/test/expected/build/application.g/dest/Component-preload.js @@ -2,7 +2,9 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/g/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); + "application/g/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); }, "application/g/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g","type":"application","applicationVersion":{"version":"1.0.0"},"embeds":["embedded"],"title":"{{title}}"},"customCopyrightString":"Some fancy copyright"}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/dest/Component-preload.js.map b/test/expected/build/application.g/dest/Component-preload.js.map new file mode 100644 index 000000000..a7a60e6f3 --- /dev/null +++ b/test/expected/build/application.g/dest/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/dest/subcomponentA/Component-preload.js b/test/expected/build/application.g/dest/subcomponentA/Component-preload.js index 4c103c261..63ae65bd3 100644 --- a/test/expected/build/application.g/dest/subcomponentA/Component-preload.js +++ b/test/expected/build/application.g/dest/subcomponentA/Component-preload.js @@ -2,7 +2,9 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/g/subcomponentA/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); + "application/g/subcomponentA/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); }, "application/g/subcomponentA/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentA","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/dest/subcomponentA/Component-preload.js.map b/test/expected/build/application.g/dest/subcomponentA/Component-preload.js.map new file mode 100644 index 000000000..86937b5b0 --- /dev/null +++ b/test/expected/build/application.g/dest/subcomponentA/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/dest/subcomponentB/Component-preload.js b/test/expected/build/application.g/dest/subcomponentB/Component-preload.js index 14667fe94..ec2301f6d 100644 --- a/test/expected/build/application.g/dest/subcomponentB/Component-preload.js +++ b/test/expected/build/application.g/dest/subcomponentB/Component-preload.js @@ -2,7 +2,9 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/g/subcomponentB/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); + "application/g/subcomponentB/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); }, "application/g/subcomponentB/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentB","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/dest/subcomponentB/Component-preload.js.map b/test/expected/build/application.g/dest/subcomponentB/Component-preload.js.map new file mode 100644 index 000000000..86937b5b0 --- /dev/null +++ b/test/expected/build/application.g/dest/subcomponentB/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/Component-dbg.js b/test/expected/build/application.g/dest2/Component-dbg.js new file mode 100644 index 000000000..fd86d4bd8 --- /dev/null +++ b/test/expected/build/application.g/dest2/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + metadata: { + manifest: "json" + } + }); +}); \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/Component-preload.js b/test/expected/build/application.g/dest2/Component-preload.js new file mode 100644 index 000000000..a186e8cc7 --- /dev/null +++ b/test/expected/build/application.g/dest2/Component-preload.js @@ -0,0 +1,10 @@ +//@ui5-bundle application/g/Component-preload.js +jQuery.sap.registerPreloadedModules({ +"version":"2.0", +"modules":{ + "application/g/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); +}, + "application/g/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g","type":"application","applicationVersion":{"version":"1.0.0"},"embeds":["embedded"],"title":"{{title}}"},"customCopyrightString":"Some fancy copyright"}' +}}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/dest2/Component-preload.js.map b/test/expected/build/application.g/dest2/Component-preload.js.map new file mode 100644 index 000000000..a7a60e6f3 --- /dev/null +++ b/test/expected/build/application.g/dest2/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/Component.js b/test/expected/build/application.g/dest2/Component.js new file mode 100644 index 000000000..6fdb761a9 --- /dev/null +++ b/test/expected/build/application.g/dest2/Component.js @@ -0,0 +1 @@ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{metadata:{manifest:"json"}})}); \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/manifest.json b/test/expected/build/application.g/dest2/manifest.json new file mode 100644 index 000000000..620705334 --- /dev/null +++ b/test/expected/build/application.g/dest2/manifest.json @@ -0,0 +1,14 @@ +{ + "_version": "1.1.0", + "sap.app": { + "_version": "1.1.0", + "id": "application.g", + "type": "application", + "applicationVersion": { + "version": "1.0.0" + }, + "embeds": ["embedded"], + "title": "{{title}}" + }, + "customCopyrightString": "Some fancy copyright" +} diff --git a/test/expected/build/application.g/dest2/subcomponentA/Component-dbg.js b/test/expected/build/application.g/dest2/subcomponentA/Component-dbg.js new file mode 100644 index 000000000..5f1b47a8a --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentA/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.subcomponentA.Component', { + metadata: { + manifest: "json" + } + }); +}); \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/subcomponentA/Component-preload.js b/test/expected/build/application.g/dest2/subcomponentA/Component-preload.js new file mode 100644 index 000000000..63ae65bd3 --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentA/Component-preload.js @@ -0,0 +1,10 @@ +//@ui5-bundle application/g/subcomponentA/Component-preload.js +jQuery.sap.registerPreloadedModules({ +"version":"2.0", +"modules":{ + "application/g/subcomponentA/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); +}, + "application/g/subcomponentA/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentA","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}' +}}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/dest2/subcomponentA/Component-preload.js.map b/test/expected/build/application.g/dest2/subcomponentA/Component-preload.js.map new file mode 100644 index 000000000..86937b5b0 --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentA/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/subcomponentA/Component.js b/test/expected/build/application.g/dest2/subcomponentA/Component.js new file mode 100644 index 000000000..0d3fd6ccc --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentA/Component.js @@ -0,0 +1 @@ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentA.Component",{metadata:{manifest:"json"}})}); \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/subcomponentA/manifest.json b/test/expected/build/application.g/dest2/subcomponentA/manifest.json new file mode 100644 index 000000000..ac1f84ae8 --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentA/manifest.json @@ -0,0 +1,13 @@ +{ + "_version": "1.1.0", + "sap.app": { + "_version": "1.1.0", + "id": "application.g.subcomponentA", + "type": "application", + "applicationVersion": { + "version": "1.2.2" + }, + "embeds": ["embedded"], + "title": "{{title}}" + } +} \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/subcomponentB/Component-dbg.js b/test/expected/build/application.g/dest2/subcomponentB/Component-dbg.js new file mode 100644 index 000000000..5fb07ed25 --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentB/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.subcomponentB.Component', { + metadata: { + manifest: "json" + } + }); +}); \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/subcomponentB/Component-preload.js b/test/expected/build/application.g/dest2/subcomponentB/Component-preload.js new file mode 100644 index 000000000..ec2301f6d --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentB/Component-preload.js @@ -0,0 +1,10 @@ +//@ui5-bundle application/g/subcomponentB/Component-preload.js +jQuery.sap.registerPreloadedModules({ +"version":"2.0", +"modules":{ + "application/g/subcomponentB/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); +}, + "application/g/subcomponentB/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.g.subcomponentB","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}' +}}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.g/dest2/subcomponentB/Component-preload.js.map b/test/expected/build/application.g/dest2/subcomponentB/Component-preload.js.map new file mode 100644 index 000000000..86937b5b0 --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentB/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,wCAAyC,CAClEC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/subcomponentB/Component.js b/test/expected/build/application.g/dest2/subcomponentB/Component.js new file mode 100644 index 000000000..c8af2ace9 --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentB/Component.js @@ -0,0 +1 @@ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.subcomponentB.Component",{metadata:{manifest:"json"}})}); \ No newline at end of file diff --git a/test/expected/build/application.g/dest2/subcomponentB/manifest.json b/test/expected/build/application.g/dest2/subcomponentB/manifest.json new file mode 100644 index 000000000..84cd1802f --- /dev/null +++ b/test/expected/build/application.g/dest2/subcomponentB/manifest.json @@ -0,0 +1,13 @@ +{ + "_version": "1.1.0", + "sap.app": { + "_version": "1.1.0", + "id": "application.g.subcomponentB", + "type": "application", + "applicationVersion": { + "version": "1.2.2" + }, + "embeds": ["embedded"], + "title": "{{title}}" + } +} \ No newline at end of file diff --git a/test/expected/build/application.h/dest/Component-dbg.js b/test/expected/build/application.h/dest/Component-dbg.js new file mode 100644 index 000000000..cb9bd4068 --- /dev/null +++ b/test/expected/build/application.h/dest/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.h.Component', { + metadata: { + manifest: "json" + } + }); +}); diff --git a/test/expected/build/application.h/dest/sectionsA/customBundle.js b/test/expected/build/application.h/dest/sectionsA/customBundle.js index 4acc4444d..50d9eba4b 100644 --- a/test/expected/build/application.h/dest/sectionsA/customBundle.js +++ b/test/expected/build/application.h/dest/sectionsA/customBundle.js @@ -2,8 +2,11 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/h/sectionsA/section1.js":function(){sap.ui.define(["sap/m/Button"],function(n){console.log("Section 1 included")}); + "application/h/sectionsA/section1.js":function(){ +sap.ui.define(["sap/m/Button"],function(n){console.log("Section 1 included")}); }, - "application/h/sectionsA/section3.js":function(){sap.ui.define(["sap/m/Button"],function(n){console.log("Section 3 included")}); + "application/h/sectionsA/section3.js":function(){ +sap.ui.define(["sap/m/Button"],function(n){console.log("Section 3 included")}); } }}); +//# sourceMappingURL=customBundle.js.map diff --git a/test/expected/build/application.h/dest/sectionsA/customBundle.js.map b/test/expected/build/application.h/dest/sectionsA/customBundle.js.map new file mode 100644 index 000000000..d4d5782ad --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsA/customBundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["section1-dbg.js"],"names":["sap","ui","define","Button","console","log"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,gBAAiB,SAASC,GACxCC,QAAQC,IAAI","file":"section1.js","sourceRoot":""}},{"offset":{"line":8,"column":0},"map":{"version":3,"sources":["section3-dbg.js"],"names":["sap","ui","define","Button","console","log"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,gBAAiB,SAASC,GACxCC,QAAQC,IAAI","file":"section3.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.h/dest/sectionsA/section1-dbg.js b/test/expected/build/application.h/dest/sectionsA/section1-dbg.js new file mode 100644 index 000000000..ac4a81296 --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsA/section1-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 1 included"); +}); diff --git a/test/expected/build/application.h/dest/sectionsA/section2-dbg.js b/test/expected/build/application.h/dest/sectionsA/section2-dbg.js new file mode 100644 index 000000000..e009c8286 --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsA/section2-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 2 included"); +}); diff --git a/test/expected/build/application.h/dest/sectionsA/section3-dbg.js b/test/expected/build/application.h/dest/sectionsA/section3-dbg.js new file mode 100644 index 000000000..5fd9349d4 --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsA/section3-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 3 included"); +}); diff --git a/test/expected/build/application.h/dest/sectionsB/customBundle.js b/test/expected/build/application.h/dest/sectionsB/customBundle.js index 0e66f011b..ab1c24af1 100644 --- a/test/expected/build/application.h/dest/sectionsB/customBundle.js +++ b/test/expected/build/application.h/dest/sectionsB/customBundle.js @@ -2,10 +2,20 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/h/sectionsB/section1.js":function(){sap.ui.define(["sap/m/Button"],function(n){console.log("Section 1 included")}); + "application/h/sectionsB/section1.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 1 included"); +}); }, - "application/h/sectionsB/section2.js":function(){sap.ui.define(["sap/m/Button"],function(n){console.log("Section 2 included")}); + "application/h/sectionsB/section2.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 2 included"); +}); }, - "application/h/sectionsB/section3.js":function(){sap.ui.define(["sap/m/Button"],function(n){console.log("Section 3 included")}); + "application/h/sectionsB/section3.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 3 included"); +}); } }}); +//# sourceMappingURL=customBundle.js.map diff --git a/test/expected/build/application.h/dest/sectionsB/customBundle.js.map b/test/expected/build/application.h/dest/sectionsB/customBundle.js.map new file mode 100644 index 000000000..a4a89d247 --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsB/customBundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["section1-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":10,"column":0},"map":{"version":3,"sources":["section2-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["section3-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.h/dest/sectionsB/section1-dbg.js b/test/expected/build/application.h/dest/sectionsB/section1-dbg.js new file mode 100644 index 000000000..ac4a81296 --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsB/section1-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 1 included"); +}); diff --git a/test/expected/build/application.h/dest/sectionsB/section2-dbg.js b/test/expected/build/application.h/dest/sectionsB/section2-dbg.js new file mode 100644 index 000000000..e009c8286 --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsB/section2-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 2 included"); +}); diff --git a/test/expected/build/application.h/dest/sectionsB/section3-dbg.js b/test/expected/build/application.h/dest/sectionsB/section3-dbg.js new file mode 100644 index 000000000..5fd9349d4 --- /dev/null +++ b/test/expected/build/application.h/dest/sectionsB/section3-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 3 included"); +}); diff --git a/test/expected/build/application.h/no-minify/Component.js b/test/expected/build/application.h/no-minify/Component.js new file mode 100644 index 000000000..cb9bd4068 --- /dev/null +++ b/test/expected/build/application.h/no-minify/Component.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.h.Component', { + metadata: { + manifest: "json" + } + }); +}); diff --git a/test/expected/build/application.h/no-minify/manifest.json b/test/expected/build/application.h/no-minify/manifest.json new file mode 100644 index 000000000..32b7e4a84 --- /dev/null +++ b/test/expected/build/application.h/no-minify/manifest.json @@ -0,0 +1,13 @@ +{ + "_version": "1.1.0", + "sap.app": { + "_version": "1.1.0", + "id": "application.h", + "type": "application", + "applicationVersion": { + "version": "1.2.2" + }, + "embeds": ["embedded"], + "title": "{{title}}" + } +} diff --git a/test/expected/build/application.h/no-minify/sectionsA/customBundle.js b/test/expected/build/application.h/no-minify/sectionsA/customBundle.js new file mode 100644 index 000000000..3512dedd4 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsA/customBundle.js @@ -0,0 +1,16 @@ +//@ui5-bundle application/h/sectionsA/customBundle.js +jQuery.sap.registerPreloadedModules({ +"version":"2.0", +"modules":{ + "application/h/sectionsA/section1.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 1 included"); +}); +}, + "application/h/sectionsA/section3.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 3 included"); +}); +} +}}); +//# sourceMappingURL=customBundle.js.map diff --git a/test/expected/build/application.h/no-minify/sectionsA/customBundle.js.map b/test/expected/build/application.h/no-minify/sectionsA/customBundle.js.map new file mode 100644 index 000000000..fb67f722e --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsA/customBundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["section1.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":10,"column":0},"map":{"version":3,"sources":["section3.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.h/no-minify/sectionsA/section1.js b/test/expected/build/application.h/no-minify/sectionsA/section1.js new file mode 100644 index 000000000..ac4a81296 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsA/section1.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 1 included"); +}); diff --git a/test/expected/build/application.h/no-minify/sectionsA/section2.js b/test/expected/build/application.h/no-minify/sectionsA/section2.js new file mode 100644 index 000000000..e009c8286 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsA/section2.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 2 included"); +}); diff --git a/test/expected/build/application.h/no-minify/sectionsA/section3.js b/test/expected/build/application.h/no-minify/sectionsA/section3.js new file mode 100644 index 000000000..5fd9349d4 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsA/section3.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 3 included"); +}); diff --git a/test/expected/build/application.h/no-minify/sectionsB/customBundle.js b/test/expected/build/application.h/no-minify/sectionsB/customBundle.js new file mode 100644 index 000000000..ab1c24af1 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsB/customBundle.js @@ -0,0 +1,21 @@ +//@ui5-bundle application/h/sectionsB/customBundle.js +jQuery.sap.registerPreloadedModules({ +"version":"2.0", +"modules":{ + "application/h/sectionsB/section1.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 1 included"); +}); +}, + "application/h/sectionsB/section2.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 2 included"); +}); +}, + "application/h/sectionsB/section3.js":function(){ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 3 included"); +}); +} +}}); +//# sourceMappingURL=customBundle.js.map diff --git a/test/expected/build/application.h/no-minify/sectionsB/customBundle.js.map b/test/expected/build/application.h/no-minify/sectionsB/customBundle.js.map new file mode 100644 index 000000000..f42d1805c --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsB/customBundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["section1.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":10,"column":0},"map":{"version":3,"sources":["section2.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["section3.js"],"mappings":"AAAA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.h/no-minify/sectionsB/section1.js b/test/expected/build/application.h/no-minify/sectionsB/section1.js new file mode 100644 index 000000000..ac4a81296 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsB/section1.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 1 included"); +}); diff --git a/test/expected/build/application.h/no-minify/sectionsB/section2.js b/test/expected/build/application.h/no-minify/sectionsB/section2.js new file mode 100644 index 000000000..e009c8286 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsB/section2.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 2 included"); +}); diff --git a/test/expected/build/application.h/no-minify/sectionsB/section3.js b/test/expected/build/application.h/no-minify/sectionsB/section3.js new file mode 100644 index 000000000..5fd9349d4 --- /dev/null +++ b/test/expected/build/application.h/no-minify/sectionsB/section3.js @@ -0,0 +1,3 @@ +sap.ui.define(["sap/m/Button"], function(Button) { + console.log("Section 3 included"); +}); diff --git a/test/expected/build/application.i/dest/Component-dbg.js b/test/expected/build/application.i/dest/Component-dbg.js new file mode 100644 index 000000000..f402cb140 --- /dev/null +++ b/test/expected/build/application.i/dest/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.i.Component', { + metadata: { + manifest: "json" + } + }); +}); diff --git a/test/expected/build/application.i/dest/Component-preload.js b/test/expected/build/application.i/dest/Component-preload.js index 938149674..b974b8084 100644 --- a/test/expected/build/application.i/dest/Component-preload.js +++ b/test/expected/build/application.i/dest/Component-preload.js @@ -2,11 +2,14 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/i/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.i.Component",{metadata:{manifest:"json"}})}); + "application/i/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.i.Component",{metadata:{manifest:"json"}})}); }, "application/i/changes/changes-bundle.json":'[{"fileName":"id_456_addField","fileType":"change","changeType":"hideControl","component":"application.i.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.i.Component/changes","creation":"2023-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}},{"fileName":"id_123_addField","fileType":"change","changeType":"hideControl","component":"application.i.Component","content":{},"selector":{"id":"control1"},"layer":"CUSTOMER","texts":{},"namespace":"apps/application.i.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"Max Mustermann"}}]', - "application/i/changes/coding/MyExtension.js":function(){sap.ui.define([],function(){return{}}); + "application/i/changes/coding/MyExtension.js":function(){ +sap.ui.define([],function(){return{}}); }, "application/i/changes/fragments/MyFragment.fragment.xml":'', - "application/i/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.i","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"},"sap.ui5":{"dependencies":{"libs":{"sap.ui.layout":{},"sap.ui.core":{},"sap.m":{},"sap.ui.fl":{}}}}}' + "application/i/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.i","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"},"sap.ui5":{"dependencies":{"minUI5Version":"1.72","libs":{"sap.ui.layout":{},"sap.ui.core":{},"sap.m":{},"sap.ui.fl":{}}}}}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.i/dest/Component-preload.js.map b/test/expected/build/application.i/dest/Component-preload.js.map new file mode 100644 index 000000000..adda28edc --- /dev/null +++ b/test/expected/build/application.i/dest/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["MyExtension-dbg.js"],"names":["sap","ui","define"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,GAAG,WAChB,MAAO","file":"MyExtension.js","sourceRoot":"changes/coding"}}]} \ No newline at end of file diff --git a/test/expected/build/application.i/dest/changes/coding/MyExtension-dbg.js b/test/expected/build/application.i/dest/changes/coding/MyExtension-dbg.js new file mode 100644 index 000000000..dfb3da014 --- /dev/null +++ b/test/expected/build/application.i/dest/changes/coding/MyExtension-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define([],function () { + return {}; +}); diff --git a/test/expected/build/application.i/dest/manifest.json b/test/expected/build/application.i/dest/manifest.json index 73ea616ee..b40142f30 100644 --- a/test/expected/build/application.i/dest/manifest.json +++ b/test/expected/build/application.i/dest/manifest.json @@ -14,6 +14,7 @@ }, "sap.ui5": { "dependencies": { + "minUI5Version": "1.72", "libs": { "sap.ui.layout": {}, "sap.ui.core": {}, diff --git a/test/expected/build/application.j/dest-resources-json/Component-dbg.js b/test/expected/build/application.j/dest-resources-json/Component-dbg.js new file mode 100644 index 000000000..e40d21d9a --- /dev/null +++ b/test/expected/build/application.j/dest-resources-json/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.j.Component', { + metadata: { + manifest: "json" + } + }); +}); diff --git a/test/expected/build/application.j/dest-resources-json/Component-preload.js b/test/expected/build/application.j/dest-resources-json/Component-preload.js index 31e1ed1fe..23cbb1b7d 100644 --- a/test/expected/build/application.j/dest-resources-json/Component-preload.js +++ b/test/expected/build/application.j/dest-resources-json/Component-preload.js @@ -2,11 +2,14 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/j/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.j.Component",{metadata:{manifest:"json"}})}); + "application/j/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.j.Component",{metadata:{manifest:"json"}})}); }, - "application/j/changes/coding/MyExtension.js":function(){sap.ui.define([],function(){return{}}); + "application/j/changes/coding/MyExtension.js":function(){ +sap.ui.define([],function(){return{}}); }, "application/j/changes/flexibility-bundle.json":'{"changes":[{"fileName":"id_456_addField","fileType":"change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2023-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}},{"fileName":"id_123_addField","fileType":"change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"CUSTOMER","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"Max Mustermann"}}],"compVariants":[{"fileName":"id_111_compVariants","fileType":"variant","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"},"appDescriptorChange":false}],"variants":[{"fileName":"id_111_test","fileType":"ctrl_variant","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}}],"variantChanges":[{"fileName":"id_111_test","fileType":"ctrl_variant_change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}}],"variantDependentControlChanges":[{"fileName":"id_111_variantDependentControlChange","fileType":"change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"},"variantReference":"someting here"}],"variantManagementChanges":[{"fileName":"id_111_test","fileType":"ctrl_variant_management_change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}}]}', "application/j/changes/fragments/MyFragment.fragment.xml":'', - "application/j/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.j","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"},"sap.ui5":{"dependencies":{"minUI5Version":"1.73.2","libs":{"sap.ui.layout":{},"sap.ui.core":{},"sap.m":{},"sap.ui.fl":{"lazy":false}}}}}' + "application/j/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.j","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"},"sap.ui5":{"dependencies":{"minUI5Version":"1.100.2","libs":{"sap.ui.layout":{},"sap.ui.core":{},"sap.m":{},"sap.ui.fl":{"lazy":false}}}}}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.j/dest-resources-json/Component-preload.js.map b/test/expected/build/application.j/dest-resources-json/Component-preload.js.map new file mode 100644 index 000000000..a7bfb3e24 --- /dev/null +++ b/test/expected/build/application.j/dest-resources-json/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}},{"offset":{"line":8,"column":0},"map":{"version":3,"sources":["MyExtension-dbg.js"],"names":["sap","ui","define"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,GAAG,WAChB,MAAO","file":"MyExtension.js","sourceRoot":"changes/coding"}}]} \ No newline at end of file diff --git a/test/expected/build/application.j/dest-resources-json/changes/coding/MyExtension-dbg.js b/test/expected/build/application.j/dest-resources-json/changes/coding/MyExtension-dbg.js new file mode 100644 index 000000000..dfb3da014 --- /dev/null +++ b/test/expected/build/application.j/dest-resources-json/changes/coding/MyExtension-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define([],function () { + return {}; +}); diff --git a/test/expected/build/application.j/dest-resources-json/manifest.json b/test/expected/build/application.j/dest-resources-json/manifest.json index f82703903..e9fe49460 100644 --- a/test/expected/build/application.j/dest-resources-json/manifest.json +++ b/test/expected/build/application.j/dest-resources-json/manifest.json @@ -14,7 +14,7 @@ }, "sap.ui5": { "dependencies": { - "minUI5Version": "1.73.2", + "minUI5Version": "1.100.2", "libs": { "sap.ui.layout": {}, "sap.ui.core": {}, diff --git a/test/expected/build/application.j/dest-resources-json/resources.json b/test/expected/build/application.j/dest-resources-json/resources.json index 93780b448..268fb7365 100644 --- a/test/expected/build/application.j/dest-resources-json/resources.json +++ b/test/expected/build/application.j/dest-resources-json/resources.json @@ -1,10 +1,23 @@ { "_version": "1.1.0", "resources": [ + { + "name": "Component-dbg.js", + "module": "application/j/Component.js", + "size": 184, + "isDebug": true, + "required": [ + "sap/m/library.js", + "sap/ui/core/UIComponent.js", + "sap/ui/core/library.js", + "sap/ui/fl/library.js", + "sap/ui/layout/library.js" + ] + }, { "name": "Component-preload.js", "module": "application/j/Component-preload.js", - "size": 3682, + "size": 3731, "merged": true, "required": [ "sap/m/library.js", @@ -21,6 +34,11 @@ "application/j/manifest.json" ] }, + { + "name": "Component-preload.js.map", + "size": 836, + "isDebug": true + }, { "name": "Component.js", "module": "application/j/Component.js", @@ -33,6 +51,12 @@ "sap/ui/layout/library.js" ] }, + { + "name": "changes/coding/MyExtension-dbg.js", + "module": "application/j/changes/coding/MyExtension.js", + "size": 47, + "isDebug": true + }, { "name": "changes/coding/MyExtension.js", "module": "application/j/changes/coding/MyExtension.js", @@ -48,38 +72,6 @@ "module": "application/j/changes/fragments/MyFragment.fragment.xml", "size": 13 }, - { - "name": "changes/id_111_appDescriptor.change", - "size": 464 - }, - { - "name": "changes/id_111_compVariants.variant", - "size": 466 - }, - { - "name": "changes/id_111_test.ctrl_variant", - "size": 432 - }, - { - "name": "changes/id_111_test.ctrl_variant_change", - "size": 439 - }, - { - "name": "changes/id_111_test.ctrl_variant_management_change", - "size": 450 - }, - { - "name": "changes/id_111_variantDependentControlChange.change", - "size": 489 - }, - { - "name": "changes/id_123_addField.change", - "size": 432 - }, - { - "name": "changes/id_456_addField.change", - "size": 430 - }, { "name": "fileWithoutExtension", "size": 27 @@ -87,11 +79,11 @@ { "name": "manifest.json", "module": "application/j/manifest.json", - "size": 423 + "size": 424 }, { "name": "resources.json", - "size": 2098 + "size": 2006 } ] } \ No newline at end of file diff --git a/test/expected/build/application.j/dest/Component-dbg.js b/test/expected/build/application.j/dest/Component-dbg.js new file mode 100644 index 000000000..e40d21d9a --- /dev/null +++ b/test/expected/build/application.j/dest/Component-dbg.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.j.Component', { + metadata: { + manifest: "json" + } + }); +}); diff --git a/test/expected/build/application.j/dest/Component-preload.js b/test/expected/build/application.j/dest/Component-preload.js index 31e1ed1fe..23cbb1b7d 100644 --- a/test/expected/build/application.j/dest/Component-preload.js +++ b/test/expected/build/application.j/dest/Component-preload.js @@ -2,11 +2,14 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/j/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.j.Component",{metadata:{manifest:"json"}})}); + "application/j/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.j.Component",{metadata:{manifest:"json"}})}); }, - "application/j/changes/coding/MyExtension.js":function(){sap.ui.define([],function(){return{}}); + "application/j/changes/coding/MyExtension.js":function(){ +sap.ui.define([],function(){return{}}); }, "application/j/changes/flexibility-bundle.json":'{"changes":[{"fileName":"id_456_addField","fileType":"change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2023-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}},{"fileName":"id_123_addField","fileType":"change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"CUSTOMER","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"Max Mustermann"}}],"compVariants":[{"fileName":"id_111_compVariants","fileType":"variant","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"},"appDescriptorChange":false}],"variants":[{"fileName":"id_111_test","fileType":"ctrl_variant","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}}],"variantChanges":[{"fileName":"id_111_test","fileType":"ctrl_variant_change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}}],"variantDependentControlChanges":[{"fileName":"id_111_variantDependentControlChange","fileType":"change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"},"variantReference":"someting here"}],"variantManagementChanges":[{"fileName":"id_111_test","fileType":"ctrl_variant_management_change","changeType":"hideControl","component":"application.j.Component","content":{},"selector":{"id":"control1"},"layer":"VENDOR","texts":{},"namespace":"apps/application.j.Component/changes","creation":"2025-10-30T13:52:40.4754350Z","originalLanguage":"","conditions":{},"support":{"generator":"did it","user":"SAP"}}]}', "application/j/changes/fragments/MyFragment.fragment.xml":'', - "application/j/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.j","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"},"sap.ui5":{"dependencies":{"minUI5Version":"1.73.2","libs":{"sap.ui.layout":{},"sap.ui.core":{},"sap.m":{},"sap.ui.fl":{"lazy":false}}}}}' + "application/j/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.j","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"},"sap.ui5":{"dependencies":{"minUI5Version":"1.100.2","libs":{"sap.ui.layout":{},"sap.ui.core":{},"sap.m":{},"sap.ui.fl":{"lazy":false}}}}}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.j/dest/Component-preload.js.map b/test/expected/build/application.j/dest/Component-preload.js.map new file mode 100644 index 000000000..a7bfb3e24 --- /dev/null +++ b/test/expected/build/application.j/dest/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}},{"offset":{"line":8,"column":0},"map":{"version":3,"sources":["MyExtension-dbg.js"],"names":["sap","ui","define"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,GAAG,WAChB,MAAO","file":"MyExtension.js","sourceRoot":"changes/coding"}}]} \ No newline at end of file diff --git a/test/expected/build/application.j/dest/changes/coding/MyExtension-dbg.js b/test/expected/build/application.j/dest/changes/coding/MyExtension-dbg.js new file mode 100644 index 000000000..dfb3da014 --- /dev/null +++ b/test/expected/build/application.j/dest/changes/coding/MyExtension-dbg.js @@ -0,0 +1,3 @@ +sap.ui.define([],function () { + return {}; +}); diff --git a/test/expected/build/application.j/dest/manifest.json b/test/expected/build/application.j/dest/manifest.json index f82703903..e9fe49460 100644 --- a/test/expected/build/application.j/dest/manifest.json +++ b/test/expected/build/application.j/dest/manifest.json @@ -14,7 +14,7 @@ }, "sap.ui5": { "dependencies": { - "minUI5Version": "1.73.2", + "minUI5Version": "1.100.2", "libs": { "sap.ui.layout": {}, "sap.ui.core": {}, diff --git a/test/expected/build/application.k/dest-package-subcomponents/Component-preload.js b/test/expected/build/application.k/dest-package-subcomponents/Component-preload.js index d7133abe9..07f1270d6 100644 --- a/test/expected/build/application.k/dest-package-subcomponents/Component-preload.js +++ b/test/expected/build/application.k/dest-package-subcomponents/Component-preload.js @@ -2,15 +2,41 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/k/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.k.Component",{metadata:{manifest:"json"}})}); + "application/k/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.k.Component', { + metadata: { + manifest: "json" + } + }); +}); }, "application/k/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.k","type":"application","applicationVersion":{"version":"${version}"},"embeds":["embedded"],"title":"{{title}}"},"customCopyrightString":"${copyright}"}', - "application/k/subcomponentA/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.k.subcomponentA.Component",{metadata:{manifest:"json"}})}); + "application/k/subcomponentA/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.k.subcomponentA.Component', { + metadata: { + manifest: "json" + } + }); +}); }, "application/k/subcomponentA/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.k.subcomponentA","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}', - "application/k/subcomponentB/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.k.subcomponentB.Component",{metadata:{manifest:"json"}})}); + "application/k/subcomponentB/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.k.subcomponentB.Component', { + metadata: { + manifest: "json" + } + }); +}); }, "application/k/subcomponentB/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.k.subcomponentB","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}', - "application/k/subcomponentB/thirdparty/lib.js":function(){console.log("subcomponentB/thirdparty/lib.js"); + "application/k/subcomponentB/thirdparty/lib.js":function(){ +console.log("subcomponentB/thirdparty/lib.js"); } }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.k/dest-package-subcomponents/Component-preload.js.map b/test/expected/build/application.k/dest-package-subcomponents/Component-preload.js.map new file mode 100644 index 000000000..721564654 --- /dev/null +++ b/test/expected/build/application.k/dest-package-subcomponents/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":16,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":"subcomponentA"}},{"offset":{"line":27,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":"subcomponentB"}},{"offset":{"line":38,"column":0},"map":{"version":3,"sources":["lib.js"],"mappings":"AAAA;AACA","sourceRoot":"subcomponentB/thirdparty"}}]} \ No newline at end of file diff --git a/test/expected/build/application.k/dest/Component-preload.js b/test/expected/build/application.k/dest/Component-preload.js index 67ee5854d..9eefb8942 100644 --- a/test/expected/build/application.k/dest/Component-preload.js +++ b/test/expected/build/application.k/dest/Component-preload.js @@ -2,7 +2,16 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/k/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.k.Component",{metadata:{manifest:"json"}})}); + "application/k/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.k.Component', { + metadata: { + manifest: "json" + } + }); +}); }, "application/k/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.k","type":"application","applicationVersion":{"version":"${version}"},"embeds":["embedded"],"title":"{{title}}"},"customCopyrightString":"${copyright}"}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.k/dest/Component-preload.js.map b/test/expected/build/application.k/dest/Component-preload.js.map new file mode 100644 index 000000000..61c83ce28 --- /dev/null +++ b/test/expected/build/application.k/dest/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.k/dest/subcomponentA/Component-preload.js b/test/expected/build/application.k/dest/subcomponentA/Component-preload.js index 6ce44c11a..cb50c4d55 100644 --- a/test/expected/build/application.k/dest/subcomponentA/Component-preload.js +++ b/test/expected/build/application.k/dest/subcomponentA/Component-preload.js @@ -2,7 +2,16 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/k/subcomponentA/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.k.subcomponentA.Component",{metadata:{manifest:"json"}})}); + "application/k/subcomponentA/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.k.subcomponentA.Component', { + metadata: { + manifest: "json" + } + }); +}); }, "application/k/subcomponentA/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.k.subcomponentA","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}' }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.k/dest/subcomponentA/Component-preload.js.map b/test/expected/build/application.k/dest/subcomponentA/Component-preload.js.map new file mode 100644 index 000000000..61c83ce28 --- /dev/null +++ b/test/expected/build/application.k/dest/subcomponentA/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/application.k/dest/subcomponentB/Component-preload.js b/test/expected/build/application.k/dest/subcomponentB/Component-preload.js index e1c8f43cb..e09fbb22e 100644 --- a/test/expected/build/application.k/dest/subcomponentB/Component-preload.js +++ b/test/expected/build/application.k/dest/subcomponentB/Component-preload.js @@ -2,9 +2,19 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "application/k/subcomponentB/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.k.subcomponentB.Component",{metadata:{manifest:"json"}})}); + "application/k/subcomponentB/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.k.subcomponentB.Component', { + metadata: { + manifest: "json" + } + }); +}); }, "application/k/subcomponentB/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.k.subcomponentB","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"}}', - "application/k/subcomponentB/thirdparty/lib.js":function(){console.log("subcomponentB/thirdparty/lib.js"); + "application/k/subcomponentB/thirdparty/lib.js":function(){ +console.log("subcomponentB/thirdparty/lib.js"); } }}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/application.k/dest/subcomponentB/Component-preload.js.map b/test/expected/build/application.k/dest/subcomponentB/Component-preload.js.map new file mode 100644 index 000000000..555d13778 --- /dev/null +++ b/test/expected/build/application.k/dest/subcomponentB/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":16,"column":0},"map":{"version":3,"sources":["lib.js"],"mappings":"AAAA;AACA","sourceRoot":"thirdparty"}}]} \ No newline at end of file diff --git "a/test/expected/build/application.\303\270/dest/Component-preload.js" "b/test/expected/build/application.\303\270/dest/Component-preload.js" index cb92a7eef..eba461cf0 100644 --- "a/test/expected/build/application.\303\270/dest/Component-preload.js" +++ "b/test/expected/build/application.\303\270/dest/Component-preload.js" @@ -1,6 +1,8 @@ //@ui5-bundle application/ø/Component-preload.js sap.ui.require.preload({ - "application/ø/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.ø.Component",{metadata:{manifest:"json"}})}); + "application/ø/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.ø.Component",{metadata:{manifest:"json"}})}); }, "application/ø/manifest.json":'{"_version":"1.1.0","sap.app":{"_version":"1.1.0","id":"application.ø","type":"application","applicationVersion":{"version":"1.2.2"},"embeds":["embedded"],"title":"{{title}}"},"sap.ui5":{"dependencies":{"minUI5Version":"1.73.2","libs":{"sap.ui.core":{}}}}}' }); +//# sourceMappingURL=Component-preload.js.map diff --git "a/test/expected/build/application.\303\270/dest/Component-preload.js.map" "b/test/expected/build/application.\303\270/dest/Component-preload.js.map" new file mode 100644 index 000000000..cf93d8189 --- /dev/null +++ "b/test/expected/build/application.\303\270/dest/Component-preload.js.map" @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend","metadata","manifest"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B,CACpDC,SAAU,CACTC,SAAU","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.d/preload/resources/library/d/library-preload.js b/test/expected/build/library.d/preload/resources/library/d/library-preload.js index 3a8e66b86..12b0a1cb5 100644 --- a/test/expected/build/library.d/preload/resources/library/d/library-preload.js +++ b/test/expected/build/library.d/preload/resources/library/d/library-preload.js @@ -2,9 +2,14 @@ jQuery.sap.registerPreloadedModules({ "version":"2.0", "modules":{ - "library/d/some.js":function(){/*! + "library/d/some.js":function(){ +/*! * ${copyright} */ -(function(){var o="World";console.log("Hello "+o)})(); +(function() { + var someNonUglifiedVariable = "World"; + console.log('Hello ' + someNonUglifiedVariable); +})(); } }}); +//# sourceMappingURL=library-preload.js.map diff --git a/test/expected/build/library.d/preload/resources/library/d/library-preload.js.map b/test/expected/build/library.d/preload/resources/library/d/library-preload.js.map new file mode 100644 index 000000000..75adb2fe2 --- /dev/null +++ b/test/expected/build/library.d/preload/resources/library/d/library-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"library-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["library-preload.js?bundle-code-0"],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["jQuery.sap.registerPreloadedModules({\n\"version\":\"2.0\",\n\"modules\":{\n"],"sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["some.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.e/dest/resources/library/e/library-dbg.js b/test/expected/build/library.e/dest/resources/library/e/library-dbg.js index 653942f85..e45381daf 100644 --- a/test/expected/build/library.e/dest/resources/library/e/library-dbg.js +++ b/test/expected/build/library.e/dest/resources/library/e/library-dbg.js @@ -4,3 +4,5 @@ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ console.log('HelloWorld'); + +// 1.0.0 diff --git a/test/expected/build/library.e/dest/test-resources/library/e/Test.css b/test/expected/build/library.e/dest/test-resources/library/e/Test.css new file mode 100644 index 000000000..0c074af62 --- /dev/null +++ b/test/expected/build/library.e/dest/test-resources/library/e/Test.css @@ -0,0 +1,6 @@ +/* +UI development toolkit for HTML5 (OpenUI5) + * (c) Copyright 2009-xxx SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. +1.0.0 +*/ diff --git a/test/expected/build/library.e/dest/test-resources/library/e/Test.html b/test/expected/build/library.e/dest/test-resources/library/e/Test.html index e69de29bb..5a1a4014b 100644 --- a/test/expected/build/library.e/dest/test-resources/library/e/Test.html +++ b/test/expected/build/library.e/dest/test-resources/library/e/Test.html @@ -0,0 +1,6 @@ + diff --git a/test/expected/build/library.e/dest/test-resources/library/e/Test.js b/test/expected/build/library.e/dest/test-resources/library/e/Test.js new file mode 100644 index 000000000..0c074af62 --- /dev/null +++ b/test/expected/build/library.e/dest/test-resources/library/e/Test.js @@ -0,0 +1,6 @@ +/* +UI development toolkit for HTML5 (OpenUI5) + * (c) Copyright 2009-xxx SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. +1.0.0 +*/ diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-preload.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-preload.js index f66daec7d..416739324 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-preload.js +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-preload.js @@ -1,10 +1,13 @@ //@ui5-bundle library/h/components/Component-preload.js sap.ui.require.preload({ - "library/h/components/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); }, - "library/h/components/TodoComponent.js":function(){/*! + "library/h/components/TodoComponent.js":function(){ +/*! * Some fancy copyright */ console.log(" File "); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-preload.js.map b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-preload.js.map new file mode 100644 index 000000000..41305e36f --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["TodoComponent-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"TodoComponent.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/TodoComponent-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/TodoComponent-dbg.js new file mode 100644 index 000000000..ab9d806f6 --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/TodoComponent-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' File '); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/resources.json b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/resources.json index ab073db99..4df48478f 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/resources.json +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/resources.json @@ -1,10 +1,19 @@ { "_version": "1.1.0", "resources": [ + { + "name": "Component-dbg.js", + "module": "library/h/components/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "Component-preload.js", "module": "library/h/components/Component-preload.js", - "size": 361, + "size": 409, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -14,6 +23,11 @@ "library/h/components/TodoComponent.js" ] }, + { + "name": "Component-preload.js.map", + "size": 702, + "isDebug": true + }, { "name": "Component.js", "module": "library/h/components/Component.js", @@ -22,6 +36,13 @@ "sap/ui/core/UIComponent.js" ] }, + { + "name": "TodoComponent-dbg.js", + "module": "library/h/components/TodoComponent.js", + "size": 55, + "format": "raw", + "isDebug": true + }, { "name": "TodoComponent.js", "module": "library/h/components/TodoComponent.js", @@ -30,12 +51,21 @@ }, { "name": "resources.json", - "size": 2128 + "size": 3462 + }, + { + "name": "subcomponent1/Component-dbg.js", + "module": "library/h/components/subcomponent1/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] }, { "name": "subcomponent1/Component-preload.js", "module": "library/h/components/subcomponent1/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -44,6 +74,11 @@ "library/h/components/subcomponent1/Component.js" ] }, + { + "name": "subcomponent1/Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "subcomponent1/Component.js", "module": "library/h/components/subcomponent1/Component.js", @@ -52,10 +87,19 @@ "sap/ui/core/UIComponent.js" ] }, + { + "name": "subcomponent2/Component-dbg.js", + "module": "library/h/components/subcomponent2/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "subcomponent2/Component-preload.js", "module": "library/h/components/subcomponent2/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -64,6 +108,11 @@ "library/h/components/subcomponent2/Component.js" ] }, + { + "name": "subcomponent2/Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "subcomponent2/Component.js", "module": "library/h/components/subcomponent2/Component.js", @@ -72,10 +121,19 @@ "sap/ui/core/UIComponent.js" ] }, + { + "name": "subcomponent3/Component-dbg.js", + "module": "library/h/components/subcomponent3/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "subcomponent3/Component-preload.js", "module": "library/h/components/subcomponent3/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -84,6 +142,11 @@ "library/h/components/subcomponent3/Component.js" ] }, + { + "name": "subcomponent3/Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "subcomponent3/Component.js", "module": "library/h/components/subcomponent3/Component.js", diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-preload.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-preload.js index d2309dcdf..4e08fd2af 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-preload.js +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-preload.js @@ -1,5 +1,7 @@ //@ui5-bundle library/h/components/subcomponent1/Component-preload.js sap.ui.require.preload({ - "library/h/components/subcomponent1/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/subcomponent1/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-preload.js.map b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-preload.js.map new file mode 100644 index 000000000..cb1cd3f0a --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/resources.json b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/resources.json index 7ca30f3d7..3cb004e6c 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/resources.json +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent1/resources.json @@ -1,10 +1,19 @@ { "_version": "1.1.0", "resources": [ + { + "name": "Component-dbg.js", + "module": "library/h/components/subcomponent1/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "Component-preload.js", "module": "library/h/components/subcomponent1/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -13,6 +22,11 @@ "library/h/components/subcomponent1/Component.js" ] }, + { + "name": "Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "Component.js", "module": "library/h/components/subcomponent1/Component.js", @@ -23,7 +37,7 @@ }, { "name": "resources.json", - "size": 550 + "size": 828 } ] } \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-preload.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-preload.js index ce88226b9..854db6f10 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-preload.js +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-preload.js @@ -1,5 +1,7 @@ //@ui5-bundle library/h/components/subcomponent2/Component-preload.js sap.ui.require.preload({ - "library/h/components/subcomponent2/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/subcomponent2/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-preload.js.map b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-preload.js.map new file mode 100644 index 000000000..cb1cd3f0a --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/resources.json b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/resources.json index 7037628ac..55964fad6 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/resources.json +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent2/resources.json @@ -1,10 +1,19 @@ { "_version": "1.1.0", "resources": [ + { + "name": "Component-dbg.js", + "module": "library/h/components/subcomponent2/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "Component-preload.js", "module": "library/h/components/subcomponent2/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -13,6 +22,11 @@ "library/h/components/subcomponent2/Component.js" ] }, + { + "name": "Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "Component.js", "module": "library/h/components/subcomponent2/Component.js", @@ -23,7 +37,7 @@ }, { "name": "resources.json", - "size": 550 + "size": 828 } ] } \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-preload.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-preload.js index 4b88fc476..b37a05f21 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-preload.js +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-preload.js @@ -1,5 +1,7 @@ //@ui5-bundle library/h/components/subcomponent3/Component-preload.js sap.ui.require.preload({ - "library/h/components/subcomponent3/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/subcomponent3/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-preload.js.map b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-preload.js.map new file mode 100644 index 000000000..cb1cd3f0a --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/resources.json b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/resources.json index 92de203ca..6ca9bb8e6 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/resources.json +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/components/subcomponent3/resources.json @@ -1,10 +1,19 @@ { "_version": "1.1.0", "resources": [ + { + "name": "Component-dbg.js", + "module": "library/h/components/subcomponent3/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "Component-preload.js", "module": "library/h/components/subcomponent3/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -13,6 +22,11 @@ "library/h/components/subcomponent3/Component.js" ] }, + { + "name": "Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "Component.js", "module": "library/h/components/subcomponent3/Component.js", @@ -23,7 +37,7 @@ }, { "name": "resources.json", - "size": 550 + "size": 828 } ] } \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle-dbg.js new file mode 100644 index 000000000..b98361666 --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle-dbg.js @@ -0,0 +1,28 @@ +//@ui5-bundle library/h/customBundle-dbg.js +sap.ui.require.preload({ + "library/h/file.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' File '); +}, + "library/h/library.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' Library '); +}, + "library/h/some.js":function(){ +/*! + * Some fancy copyright + */ +//@ui5-bundle-raw-include library/h/other.js +console.log(' Some '); +} +}); +//@ui5-bundle-raw-include library/h/not.js +/*! + * Some fancy copyright + */ +console.log(' Not including '); +//# sourceMappingURL=customBundle-dbg.js.map diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle-dbg.js.map b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle-dbg.js.map new file mode 100644 index 000000000..f9420d627 --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle-dbg.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle-dbg.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["file-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["library-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["some-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":23,"column":0},"map":{"version":3,"sources":["not-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle.js index e9e0e00ed..336248ee2 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle.js +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle.js @@ -1,16 +1,19 @@ //@ui5-bundle library/h/customBundle.js sap.ui.require.preload({ - "library/h/file.js":function(){/*! + "library/h/file.js":function(){ +/*! * Some fancy copyright */ console.log(" File "); }, - "library/h/library.js":function(){/*! + "library/h/library.js":function(){ +/*! * Some fancy copyright */ console.log(" Library "); }, - "library/h/some.js":function(){/*! + "library/h/some.js":function(){ +/*! * Some fancy copyright */ //@ui5-bundle-raw-include library/h/other.js @@ -21,4 +24,5 @@ console.log(" Some "); /*! * Some fancy copyright */ -console.log(" Not including "); \ No newline at end of file +console.log(" Not including "); +//# sourceMappingURL=customBundle.js.map diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle.js.map b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle.js.map new file mode 100644 index 000000000..4a3b67496 --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/customBundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["file-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"file.js","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["library-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"library.js","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["some-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;;AAIAA,QAAQC,IAAI","file":"some.js","sourceRoot":""}},{"offset":{"line":23,"column":0},"map":{"version":3,"sources":["not-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"not.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/designtime/library-dbg.designtime.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/designtime/library-dbg.designtime.js new file mode 100644 index 000000000..34069d6ac --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/designtime/library-dbg.designtime.js @@ -0,0 +1,14 @@ +/*! + * Some fancy copyright + */ + +/** + * designtime and global export + */ +var myexport = (function() { + + "use strict"; + + String("asd"); + +}()); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/file-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/file-dbg.js new file mode 100644 index 000000000..ab9d806f6 --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/file-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' File '); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/library-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/library-dbg.js new file mode 100644 index 000000000..c9d3cbc0c --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/library-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' Library '); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/not-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/not-dbg.js new file mode 100644 index 000000000..d61495954 --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/not-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' Not including '); diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/resources.json b/test/expected/build/library.h/dest-resources-json/resources/library/h/resources.json index bf55e5d3c..84806ccc3 100644 --- a/test/expected/build/library.h/dest-resources-json/resources/library/h/resources.json +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/resources.json @@ -5,10 +5,19 @@ "name": ".library", "size": 473 }, + { + "name": "components/Component-dbg.js", + "module": "library/h/components/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "components/Component-preload.js", "module": "library/h/components/Component-preload.js", - "size": 361, + "size": 409, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -18,6 +27,11 @@ "library/h/components/TodoComponent.js" ] }, + { + "name": "components/Component-preload.js.map", + "size": 702, + "isDebug": true + }, { "name": "components/Component.js", "module": "library/h/components/Component.js", @@ -26,16 +40,32 @@ "sap/ui/core/UIComponent.js" ] }, + { + "name": "components/TodoComponent-dbg.js", + "module": "library/h/components/TodoComponent.js", + "size": 55, + "format": "raw", + "isDebug": true + }, { "name": "components/TodoComponent.js", "module": "library/h/components/TodoComponent.js", "size": 54, "format": "raw" }, + { + "name": "components/subcomponent1/Component-dbg.js", + "module": "library/h/components/subcomponent1/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "components/subcomponent1/Component-preload.js", "module": "library/h/components/subcomponent1/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -44,6 +74,11 @@ "library/h/components/subcomponent1/Component.js" ] }, + { + "name": "components/subcomponent1/Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "components/subcomponent1/Component.js", "module": "library/h/components/subcomponent1/Component.js", @@ -52,10 +87,19 @@ "sap/ui/core/UIComponent.js" ] }, + { + "name": "components/subcomponent2/Component-dbg.js", + "module": "library/h/components/subcomponent2/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "components/subcomponent2/Component-preload.js", "module": "library/h/components/subcomponent2/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -64,6 +108,11 @@ "library/h/components/subcomponent2/Component.js" ] }, + { + "name": "components/subcomponent2/Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "components/subcomponent2/Component.js", "module": "library/h/components/subcomponent2/Component.js", @@ -72,10 +121,19 @@ "sap/ui/core/UIComponent.js" ] }, + { + "name": "components/subcomponent3/Component-dbg.js", + "module": "library/h/components/subcomponent3/Component.js", + "size": 146, + "isDebug": true, + "required": [ + "sap/ui/core/UIComponent.js" + ] + }, { "name": "components/subcomponent3/Component-preload.js", "module": "library/h/components/subcomponent3/Component-preload.js", - "size": 279, + "size": 326, "merged": true, "required": [ "sap/ui/core/UIComponent.js" @@ -84,6 +142,11 @@ "library/h/components/subcomponent3/Component.js" ] }, + { + "name": "components/subcomponent3/Component-preload.js.map", + "size": 509, + "isDebug": true + }, { "name": "components/subcomponent3/Component.js", "module": "library/h/components/subcomponent3/Component.js", @@ -92,10 +155,29 @@ "sap/ui/core/UIComponent.js" ] }, + { + "name": "customBundle-dbg.js", + "module": "library/h/customBundle.js", + "size": 548, + "isDebug": true, + "merged": true, + "included": [ + "library/h/file.js", + "library/h/library.js", + "library/h/some.js", + "library/h/other.js", + "library/h/not.js" + ] + }, + { + "name": "customBundle-dbg.js.map", + "size": 784, + "isDebug": true + }, { "name": "customBundle.js", "module": "library/h/customBundle.js", - "size": 495, + "size": 540, "merged": true, "included": [ "library/h/file.js", @@ -105,6 +187,23 @@ "library/h/not.js" ] }, + { + "name": "customBundle.js.map", + "size": 942, + "isDebug": true + }, + { + "name": "designtime/library-dbg.designtime.js", + "module": "library/h/designtime/library.designtime.js", + "size": 142, + "requiresTopLevelScope": true, + "exposedGlobalNames": [ + "myexport" + ], + "format": "raw", + "isDebug": true, + "designtime": true + }, { "name": "designtime/library.designtime.js", "module": "library/h/designtime/library.designtime.js", @@ -116,6 +215,13 @@ "format": "raw", "designtime": true }, + { + "name": "file-dbg.js", + "module": "library/h/file.js", + "size": 55, + "format": "raw", + "isDebug": true + }, { "name": "file.js", "module": "library/h/file.js", @@ -136,6 +242,13 @@ "locale": "en", "raw": "i18n/messagebundle.properties" }, + { + "name": "library-dbg.js", + "module": "library/h/library.js", + "size": 58, + "format": "raw", + "isDebug": true + }, { "name": "library.js", "module": "library/h/library.js", @@ -147,6 +260,13 @@ "module": "library/h/manifest.json", "size": 614 }, + { + "name": "not-dbg.js", + "module": "library/h/not.js", + "size": 64, + "format": "raw", + "isDebug": true + }, { "name": "not.js", "module": "library/h/not.js", @@ -155,7 +275,18 @@ }, { "name": "resources.json", - "size": 3724 + "size": 6449 + }, + { + "name": "some-dbg.js", + "module": "library/h/some.js", + "size": 100, + "format": "raw", + "isDebug": true, + "merged": true, + "included": [ + "library/h/other.js" + ] }, { "name": "some.js", diff --git a/test/expected/build/library.h/dest-resources-json/resources/library/h/some-dbg.js b/test/expected/build/library.h/dest-resources-json/resources/library/h/some-dbg.js new file mode 100644 index 000000000..e03abda4d --- /dev/null +++ b/test/expected/build/library.h/dest-resources-json/resources/library/h/some-dbg.js @@ -0,0 +1,5 @@ +/*! + * Some fancy copyright + */ +//@ui5-bundle-raw-include library/h/other.js +console.log(' Some '); diff --git a/test/expected/build/library.h/dest/resources/library/h/components/Component-dbg.js b/test/expected/build/library.h/dest/resources/library/h/components/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest/resources/library/h/components/Component-preload.js b/test/expected/build/library.h/dest/resources/library/h/components/Component-preload.js index f66daec7d..416739324 100644 --- a/test/expected/build/library.h/dest/resources/library/h/components/Component-preload.js +++ b/test/expected/build/library.h/dest/resources/library/h/components/Component-preload.js @@ -1,10 +1,13 @@ //@ui5-bundle library/h/components/Component-preload.js sap.ui.require.preload({ - "library/h/components/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); }, - "library/h/components/TodoComponent.js":function(){/*! + "library/h/components/TodoComponent.js":function(){ +/*! * Some fancy copyright */ console.log(" File "); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest/resources/library/h/components/Component-preload.js.map b/test/expected/build/library.h/dest/resources/library/h/components/Component-preload.js.map new file mode 100644 index 000000000..41305e36f --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["TodoComponent-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"TodoComponent.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest/resources/library/h/components/TodoComponent-dbg.js b/test/expected/build/library.h/dest/resources/library/h/components/TodoComponent-dbg.js new file mode 100644 index 000000000..ab9d806f6 --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/TodoComponent-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' File '); diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-dbg.js b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-preload.js b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-preload.js index d2309dcdf..4e08fd2af 100644 --- a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-preload.js +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-preload.js @@ -1,5 +1,7 @@ //@ui5-bundle library/h/components/subcomponent1/Component-preload.js sap.ui.require.preload({ - "library/h/components/subcomponent1/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/subcomponent1/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-preload.js.map b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-preload.js.map new file mode 100644 index 000000000..cb1cd3f0a --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent1/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-dbg.js b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-preload.js b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-preload.js index ce88226b9..854db6f10 100644 --- a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-preload.js +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-preload.js @@ -1,5 +1,7 @@ //@ui5-bundle library/h/components/subcomponent2/Component-preload.js sap.ui.require.preload({ - "library/h/components/subcomponent2/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/subcomponent2/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-preload.js.map b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-preload.js.map new file mode 100644 index 000000000..cb1cd3f0a --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent2/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-dbg.js b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-dbg.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-dbg.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-preload.js b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-preload.js index 4b88fc476..b37a05f21 100644 --- a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-preload.js +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-preload.js @@ -1,5 +1,7 @@ //@ui5-bundle library/h/components/subcomponent3/Component-preload.js sap.ui.require.preload({ - "library/h/components/subcomponent3/Component.js":function(){sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); + "library/h/components/subcomponent3/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"],function(n){"use strict";return n.extend("application.g.Component",{})}); } }); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-preload.js.map b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-preload.js.map new file mode 100644 index 000000000..cb1cd3f0a --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/components/subcomponent3/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component-dbg.js"],"names":["sap","ui","define","UIComponent","extend"],"mappings":"AAAAA,IAAIC,GAAGC,OAAO,CAAC,2BAA4B,SAASC,GACnD,aACA,OAAOA,EAAYC,OAAO,0BAA2B","file":"Component.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest/resources/library/h/customBundle-dbg.js b/test/expected/build/library.h/dest/resources/library/h/customBundle-dbg.js new file mode 100644 index 000000000..b98361666 --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/customBundle-dbg.js @@ -0,0 +1,28 @@ +//@ui5-bundle library/h/customBundle-dbg.js +sap.ui.require.preload({ + "library/h/file.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' File '); +}, + "library/h/library.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' Library '); +}, + "library/h/some.js":function(){ +/*! + * Some fancy copyright + */ +//@ui5-bundle-raw-include library/h/other.js +console.log(' Some '); +} +}); +//@ui5-bundle-raw-include library/h/not.js +/*! + * Some fancy copyright + */ +console.log(' Not including '); +//# sourceMappingURL=customBundle-dbg.js.map diff --git a/test/expected/build/library.h/dest/resources/library/h/customBundle-dbg.js.map b/test/expected/build/library.h/dest/resources/library/h/customBundle-dbg.js.map new file mode 100644 index 000000000..f9420d627 --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/customBundle-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle-dbg.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle-dbg.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["file-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["library-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["some-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":23,"column":0},"map":{"version":3,"sources":["not-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest/resources/library/h/customBundle.js b/test/expected/build/library.h/dest/resources/library/h/customBundle.js index e9e0e00ed..336248ee2 100644 --- a/test/expected/build/library.h/dest/resources/library/h/customBundle.js +++ b/test/expected/build/library.h/dest/resources/library/h/customBundle.js @@ -1,16 +1,19 @@ //@ui5-bundle library/h/customBundle.js sap.ui.require.preload({ - "library/h/file.js":function(){/*! + "library/h/file.js":function(){ +/*! * Some fancy copyright */ console.log(" File "); }, - "library/h/library.js":function(){/*! + "library/h/library.js":function(){ +/*! * Some fancy copyright */ console.log(" Library "); }, - "library/h/some.js":function(){/*! + "library/h/some.js":function(){ +/*! * Some fancy copyright */ //@ui5-bundle-raw-include library/h/other.js @@ -21,4 +24,5 @@ console.log(" Some "); /*! * Some fancy copyright */ -console.log(" Not including "); \ No newline at end of file +console.log(" Not including "); +//# sourceMappingURL=customBundle.js.map diff --git a/test/expected/build/library.h/dest/resources/library/h/customBundle.js.map b/test/expected/build/library.h/dest/resources/library/h/customBundle.js.map new file mode 100644 index 000000000..4a3b67496 --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/customBundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["file-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"file.js","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["library-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"library.js","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["some-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;;AAIAA,QAAQC,IAAI","file":"some.js","sourceRoot":""}},{"offset":{"line":23,"column":0},"map":{"version":3,"sources":["not-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"not.js","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/dest/resources/library/h/designtime/library-dbg.designtime.js b/test/expected/build/library.h/dest/resources/library/h/designtime/library-dbg.designtime.js new file mode 100644 index 000000000..34069d6ac --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/designtime/library-dbg.designtime.js @@ -0,0 +1,14 @@ +/*! + * Some fancy copyright + */ + +/** + * designtime and global export + */ +var myexport = (function() { + + "use strict"; + + String("asd"); + +}()); diff --git a/test/expected/build/library.h/dest/resources/library/h/file-dbg.js b/test/expected/build/library.h/dest/resources/library/h/file-dbg.js new file mode 100644 index 000000000..ab9d806f6 --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/file-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' File '); diff --git a/test/expected/build/library.h/dest/resources/library/h/library-dbg.js b/test/expected/build/library.h/dest/resources/library/h/library-dbg.js new file mode 100644 index 000000000..c9d3cbc0c --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/library-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' Library '); diff --git a/test/expected/build/library.h/dest/resources/library/h/not-dbg.js b/test/expected/build/library.h/dest/resources/library/h/not-dbg.js new file mode 100644 index 000000000..d61495954 --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/not-dbg.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' Not including '); diff --git a/test/expected/build/library.h/dest/resources/library/h/some-dbg.js b/test/expected/build/library.h/dest/resources/library/h/some-dbg.js new file mode 100644 index 000000000..e03abda4d --- /dev/null +++ b/test/expected/build/library.h/dest/resources/library/h/some-dbg.js @@ -0,0 +1,5 @@ +/*! + * Some fancy copyright + */ +//@ui5-bundle-raw-include library/h/other.js +console.log(' Some '); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/.library b/test/expected/build/library.h/no-minify/resources/library/h/.library new file mode 100644 index 000000000..9084728e8 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/.library @@ -0,0 +1,19 @@ + + + + library.h + SAP SE + Some fancy copyright + 1.0.0 + + Library H + + + + + + + + + + diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/Component-preload.js b/test/expected/build/library.h/no-minify/resources/library/h/components/Component-preload.js new file mode 100644 index 000000000..c2ba18606 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/Component-preload.js @@ -0,0 +1,17 @@ +//@ui5-bundle library/h/components/Component-preload.js +sap.ui.require.preload({ + "library/h/components/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); +}, + "library/h/components/TodoComponent.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' File '); +} +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/Component-preload.js.map b/test/expected/build/library.h/no-minify/resources/library/h/components/Component-preload.js.map new file mode 100644 index 000000000..baa7012c8 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":10,"column":0},"map":{"version":3,"sources":["TodoComponent.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/Component.js b/test/expected/build/library.h/no-minify/resources/library/h/components/Component.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/Component.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/TodoComponent.js b/test/expected/build/library.h/no-minify/resources/library/h/components/TodoComponent.js new file mode 100644 index 000000000..ab9d806f6 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/TodoComponent.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' File '); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component-preload.js b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component-preload.js new file mode 100644 index 000000000..d2aff44c1 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component-preload.js @@ -0,0 +1,11 @@ +//@ui5-bundle library/h/components/subcomponent1/Component-preload.js +sap.ui.require.preload({ + "library/h/components/subcomponent1/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); +} +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component-preload.js.map b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component-preload.js.map new file mode 100644 index 000000000..ee8821bdb --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component.js b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent1/Component.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component-preload.js b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component-preload.js new file mode 100644 index 000000000..03abae7d8 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component-preload.js @@ -0,0 +1,11 @@ +//@ui5-bundle library/h/components/subcomponent2/Component-preload.js +sap.ui.require.preload({ + "library/h/components/subcomponent2/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); +} +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component-preload.js.map b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component-preload.js.map new file mode 100644 index 000000000..ee8821bdb --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component.js b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent2/Component.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component-preload.js b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component-preload.js new file mode 100644 index 000000000..f6c0783c0 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component-preload.js @@ -0,0 +1,11 @@ +//@ui5-bundle library/h/components/subcomponent3/Component-preload.js +sap.ui.require.preload({ + "library/h/components/subcomponent3/Component.js":function(){ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); +} +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component-preload.js.map b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component-preload.js.map new file mode 100644 index 000000000..ee8821bdb --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["Component.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component.js b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component.js new file mode 100644 index 000000000..998e27dce --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/components/subcomponent3/Component.js @@ -0,0 +1,5 @@ +sap.ui.define(["sap/ui/core/UIComponent"], function(UIComponent){ + "use strict"; + return UIComponent.extend('application.g.Component', { + }); +}); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/customBundle-dbg.js b/test/expected/build/library.h/no-minify/resources/library/h/customBundle-dbg.js new file mode 100644 index 000000000..b98361666 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/customBundle-dbg.js @@ -0,0 +1,28 @@ +//@ui5-bundle library/h/customBundle-dbg.js +sap.ui.require.preload({ + "library/h/file.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' File '); +}, + "library/h/library.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' Library '); +}, + "library/h/some.js":function(){ +/*! + * Some fancy copyright + */ +//@ui5-bundle-raw-include library/h/other.js +console.log(' Some '); +} +}); +//@ui5-bundle-raw-include library/h/not.js +/*! + * Some fancy copyright + */ +console.log(' Not including '); +//# sourceMappingURL=customBundle-dbg.js.map diff --git a/test/expected/build/library.h/no-minify/resources/library/h/customBundle-dbg.js.map b/test/expected/build/library.h/no-minify/resources/library/h/customBundle-dbg.js.map new file mode 100644 index 000000000..26839da42 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/customBundle-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle-dbg.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle-dbg.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["file.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["library.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["some.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":23,"column":0},"map":{"version":3,"sources":["not.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/customBundle.js b/test/expected/build/library.h/no-minify/resources/library/h/customBundle.js new file mode 100644 index 000000000..380250bbe --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/customBundle.js @@ -0,0 +1,28 @@ +//@ui5-bundle library/h/customBundle.js +sap.ui.require.preload({ + "library/h/file.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' File '); +}, + "library/h/library.js":function(){ +/*! + * Some fancy copyright + */ +console.log(' Library '); +}, + "library/h/some.js":function(){ +/*! + * Some fancy copyright + */ +//@ui5-bundle-raw-include library/h/other.js +console.log(' Some '); +} +}); +//@ui5-bundle-raw-include library/h/not.js +/*! + * Some fancy copyright + */ +console.log(' Not including '); +//# sourceMappingURL=customBundle.js.map diff --git a/test/expected/build/library.h/no-minify/resources/library/h/customBundle.js.map b/test/expected/build/library.h/no-minify/resources/library/h/customBundle.js.map new file mode 100644 index 000000000..3a2f6c0e8 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/customBundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customBundle.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["customBundle.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["file.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":9,"column":0},"map":{"version":3,"sources":["library.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":15,"column":0},"map":{"version":3,"sources":["some.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":23,"column":0},"map":{"version":3,"sources":["not.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/designtime/library.designtime.js b/test/expected/build/library.h/no-minify/resources/library/h/designtime/library.designtime.js new file mode 100644 index 000000000..34069d6ac --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/designtime/library.designtime.js @@ -0,0 +1,14 @@ +/*! + * Some fancy copyright + */ + +/** + * designtime and global export + */ +var myexport = (function() { + + "use strict"; + + String("asd"); + +}()); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/file.js b/test/expected/build/library.h/no-minify/resources/library/h/file.js new file mode 100644 index 000000000..ab9d806f6 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/file.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' File '); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/i18n/messagebundle.properties b/test/expected/build/library.h/no-minify/resources/library/h/i18n/messagebundle.properties new file mode 100644 index 000000000..1c6a1a9e8 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/i18n/messagebundle.properties @@ -0,0 +1 @@ +a=b \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/i18n/messagebundle_en.properties b/test/expected/build/library.h/no-minify/resources/library/h/i18n/messagebundle_en.properties new file mode 100644 index 000000000..1c6a1a9e8 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/i18n/messagebundle_en.properties @@ -0,0 +1 @@ +a=b \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/library.js b/test/expected/build/library.h/no-minify/resources/library/h/library.js new file mode 100644 index 000000000..c9d3cbc0c --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/library.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' Library '); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/manifest.json b/test/expected/build/library.h/no-minify/resources/library/h/manifest.json new file mode 100644 index 000000000..808d3df90 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/manifest.json @@ -0,0 +1,34 @@ +{ + "_version": "1.21.0", + "sap.app": { + "id": "library.h", + "type": "library", + "embeds": [], + "applicationVersion": { + "version": "1.0.0" + }, + "title": "Library H", + "description": "Library H", + "resources": "resources.json", + "offline": true + }, + "sap.ui": { + "technology": "UI5", + "supportedThemes": [] + }, + "sap.ui5": { + "dependencies": { + "minUI5Version": "1.0", + "libs": {} + }, + "library": { + "i18n": false, + "content": { + "controls": [], + "elements": [], + "types": [], + "interfaces": [] + } + } + } +} \ No newline at end of file diff --git a/test/expected/build/library.h/no-minify/resources/library/h/not.js b/test/expected/build/library.h/no-minify/resources/library/h/not.js new file mode 100644 index 000000000..d61495954 --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/not.js @@ -0,0 +1,4 @@ +/*! + * Some fancy copyright + */ +console.log(' Not including '); diff --git a/test/expected/build/library.h/no-minify/resources/library/h/some.js b/test/expected/build/library.h/no-minify/resources/library/h/some.js new file mode 100644 index 000000000..e03abda4d --- /dev/null +++ b/test/expected/build/library.h/no-minify/resources/library/h/some.js @@ -0,0 +1,5 @@ +/*! + * Some fancy copyright + */ +//@ui5-bundle-raw-include library/h/other.js +console.log(' Some '); diff --git a/test/expected/build/library.h/no-minify/test-resources/library/d/Test.html b/test/expected/build/library.h/no-minify/test-resources/library/d/Test.html new file mode 100644 index 000000000..e69de29bb diff --git "a/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.js" "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.js" index b25d5ac7a..0a38dc7b0 100644 --- "a/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.js" +++ "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.js" @@ -1,9 +1,11 @@ //@ui5-bundle library/ø/library-preload.js sap.ui.require.preload({ "library/ø/manifest.json":'{"_version":"1.21.0","sap.app":{"id":"library.ø","type":"library","embeds":[],"applicationVersion":{"version":"1.0.0"},"title":"Library Ø","description":"Library Ø","resources":"resources.json","offline":true},"sap.ui":{"technology":"UI5","supportedThemes":["цветя"]},"sap.ui5":{"dependencies":{"minUI5Version":"1.0","libs":{}},"library":{"i18n":false}}}', - "library/ø/some.js":function(){/*! + "library/ø/some.js":function(){ +/*! * Some fancy copyright */ (function(){var o="World";console.log("Hello "+o)})(); } }); +//# sourceMappingURL=library-preload.js.map diff --git "a/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.js.map" "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.js.map" new file mode 100644 index 000000000..ba9e10c92 --- /dev/null +++ "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.js.map" @@ -0,0 +1 @@ +{"version":3,"file":"library-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["library-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":4,"column":0},"map":{"version":3,"sources":["some-dbg.js"],"names":["someNonUglifiedVariable","console","log"],"mappings":"AAAA;;;CAGA,WACC,IAAIA,EAA0B,QAC9BC,QAAQC,IAAI,SAAWF,IAFxB","file":"some.js","sourceRoot":""}}]} \ No newline at end of file diff --git "a/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.support.js" "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.support.js" new file mode 100644 index 000000000..a4cbccba8 --- /dev/null +++ "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.support.js" @@ -0,0 +1,38 @@ +//@ui5-bundle library/ø/library-preload.support.js +/*! + * Some fancy copyright + */ +/** + * Defines support rules + */ + sap.ui.predefine("library/ø/rules/MyControl.support", ['sap/ui/support/library', 'sap/base/Log'], + function(SupportLib, Log) { + 'use strict'; + + //********************************************************** + // Rule Definitions + //********************************************************** + + var oRule = { + id: "oRule", + audiences: [Audiences.Application], + categories: [Categories.Usage], + enabled: true, + minversion: '1.71', + title: 'Title', + description: 'description', + resolution: 'resolution', + check: function(oIssueManager, oCoreFacade, oScope) { + oIssueManager.addIssue({ + severity: Severity.High, + details: 'Looking good today!' + }); + } + }; + + return [ + oRule + ]; + + }, true); +//# sourceMappingURL=library-preload.support.js.map diff --git "a/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.support.js.map" "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.support.js.map" new file mode 100644 index 000000000..be89c1e24 --- /dev/null +++ "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/library-preload.support.js.map" @@ -0,0 +1 @@ +{"version":3,"file":"library-preload.support.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["MyControl.support.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourceRoot":"rules"}}]} \ No newline at end of file diff --git "a/test/expected/build/library.\303\270/dest/resources/library/\303\270/rules/MyControl.support.js" "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/rules/MyControl.support.js" new file mode 100644 index 000000000..6f084d6ef --- /dev/null +++ "b/test/expected/build/library.\303\270/dest/resources/library/\303\270/rules/MyControl.support.js" @@ -0,0 +1,36 @@ +/*! + * Some fancy copyright + */ +/** + * Defines support rules + */ + sap.ui.define(['sap/ui/support/library', 'sap/base/Log'], + function(SupportLib, Log) { + 'use strict'; + + //********************************************************** + // Rule Definitions + //********************************************************** + + var oRule = { + id: "oRule", + audiences: [Audiences.Application], + categories: [Categories.Usage], + enabled: true, + minversion: '1.71', + title: 'Title', + description: 'description', + resolution: 'resolution', + check: function(oIssueManager, oCoreFacade, oScope) { + oIssueManager.addIssue({ + severity: Severity.High, + details: 'Looking good today!' + }); + } + }; + + return [ + oRule + ]; + + }, true); diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-dbg.js b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-dbg.js index ad90626c5..2a2414795 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-dbg.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-dbg.js @@ -1,4 +1,10 @@ //@ui5-bundle sap-ui-core-dbg.js +//@ui5-bundle-raw-include ui5loader-autoconfig.js +(function () { + var thisIsTheUi5LoaderAutoconfig = true; + console.log(thisIsTheUi5LoaderAutoconfig); +})() sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); +//# sourceMappingURL=sap-ui-core-dbg.js.map diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-dbg.js.map b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-dbg.js.map new file mode 100644 index 000000000..42fc15159 --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-core-dbg.js","sections":[{"offset":{"line":2,"column":0},"map":{"version":3,"sources":["ui5loader-autoconfig-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["sap-ui-core-dbg.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.requireSync(\"sap/ui/core/Core\");\n"],"sourceRoot":""}},{"offset":{"line":7,"column":0},"map":{"version":3,"sources":["sap-ui-core-dbg.js?bundle-code-1"],"mappings":"AAAA;AACA","sourcesContent":["// as this module contains the Core, we ensure that the Core has been booted\nsap.ui.getCore().boot && sap.ui.getCore().boot();"],"sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery-dbg.js b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery-dbg.js index 59acdf55a..b5a8e28a4 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery-dbg.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery-dbg.js @@ -1,4 +1,10 @@ //@ui5-bundle sap-ui-core-nojQuery-dbg.js +//@ui5-bundle-raw-include ui5loader-autoconfig.js +(function () { + var thisIsTheUi5LoaderAutoconfig = true; + console.log(thisIsTheUi5LoaderAutoconfig); +})() sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); +//# sourceMappingURL=sap-ui-core-nojQuery-dbg.js.map diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery-dbg.js.map b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery-dbg.js.map new file mode 100644 index 000000000..d6f967ff5 --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-core-nojQuery-dbg.js","sections":[{"offset":{"line":2,"column":0},"map":{"version":3,"sources":["ui5loader-autoconfig-dbg.js"],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}},{"offset":{"line":6,"column":0},"map":{"version":3,"sources":["sap-ui-core-nojQuery-dbg.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.requireSync(\"sap/ui/core/Core\");\n"],"sourceRoot":""}},{"offset":{"line":7,"column":0},"map":{"version":3,"sources":["sap-ui-core-nojQuery-dbg.js?bundle-code-1"],"mappings":"AAAA;AACA","sourcesContent":["// as this module contains the Core, we ensure that the Core has been booted\nsap.ui.getCore().boot && sap.ui.getCore().boot();"],"sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery.js b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery.js index e01a57ec5..14731c9fe 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery.js @@ -1,10 +1,17 @@ //@ui5-bundle sap-ui-core-nojQuery.js -jQuery.sap.registerPreloadedModules({ -"version":"2.0", -"modules":{ +window["sap-ui-optimized"] = true; +try { +//@ui5-bundle-raw-include ui5loader-autoconfig.js +(function(){var o=true;console.log(o)})(); +sap.ui.require.preload({ "sap/ui/core/Core.js":function(){ +(function(){var o=true;console.log(o)})(); } -}}); +}); sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); +} catch(oError) { +if (oError.name != "Restart") { throw oError; } +} +//# sourceMappingURL=sap-ui-core-nojQuery.js.map diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery.js.map b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery.js.map new file mode 100644 index 000000000..ca9a8e492 --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core-nojQuery.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-core-nojQuery.js","sections":[{"offset":{"line":4,"column":0},"map":{"version":3,"sources":["ui5loader-autoconfig-dbg.js"],"names":["thisIsTheUi5LoaderAutoconfig","console","log"],"mappings":"CAAA,WACC,IAAIA,EAA+B,KACnCC,QAAQC,IAAIF,IAFb","file":"ui5loader-autoconfig.js","sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["sap-ui-core-nojQuery.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":7,"column":0},"map":{"version":3,"sources":["Core-dbg.js"],"names":["core","console","log"],"mappings":"CAAA,WACC,IAAIA,EAAO,KACXC,QAAQC,IAAIF,IAFb","file":"Core.js","sourceRoot":"sap/ui/core"}},{"offset":{"line":10,"column":0},"map":{"version":3,"sources":["sap-ui-core-nojQuery.js?bundle-code-1"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.requireSync(\"sap/ui/core/Core\");\n"],"sourceRoot":""}},{"offset":{"line":11,"column":0},"map":{"version":3,"sources":["sap-ui-core-nojQuery.js?bundle-code-2"],"mappings":"AAAA;AACA","sourcesContent":["// as this module contains the Core, we ensure that the Core has been booted\nsap.ui.getCore().boot && sap.ui.getCore().boot();"],"sourceRoot":""}},{"offset":{"line":13,"column":0},"map":{"version":3,"sources":["sap-ui-core-nojQuery.js?bundle-code-3"],"mappings":"AAAA;AACA;AACA","sourcesContent":["} catch(oError) {\nif (oError.name != \"Restart\") { throw oError; }\n}"],"sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core.js b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core.js index 71e97011c..bf5d44549 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core.js @@ -1,10 +1,17 @@ //@ui5-bundle sap-ui-core.js -jQuery.sap.registerPreloadedModules({ -"version":"2.0", -"modules":{ +window["sap-ui-optimized"] = true; +try { +//@ui5-bundle-raw-include ui5loader-autoconfig.js +(function(){var o=true;console.log(o)})(); +sap.ui.require.preload({ "sap/ui/core/Core.js":function(){ +(function(){var o=true;console.log(o)})(); } -}}); +}); sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); +} catch(oError) { +if (oError.name != "Restart") { throw oError; } +} +//# sourceMappingURL=sap-ui-core.js.map diff --git a/test/expected/build/sap.ui.core/preload/resources/sap-ui-core.js.map b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core.js.map new file mode 100644 index 000000000..dcfd83f5d --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap-ui-core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sap-ui-core.js","sections":[{"offset":{"line":4,"column":0},"map":{"version":3,"sources":["ui5loader-autoconfig-dbg.js"],"names":["thisIsTheUi5LoaderAutoconfig","console","log"],"mappings":"CAAA,WACC,IAAIA,EAA+B,KACnCC,QAAQC,IAAIF,IAFb","file":"ui5loader-autoconfig.js","sourceRoot":""}},{"offset":{"line":5,"column":0},"map":{"version":3,"sources":["sap-ui-core.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":7,"column":0},"map":{"version":3,"sources":["Core-dbg.js"],"names":["core","console","log"],"mappings":"CAAA,WACC,IAAIA,EAAO,KACXC,QAAQC,IAAIF,IAFb","file":"Core.js","sourceRoot":"sap/ui/core"}},{"offset":{"line":10,"column":0},"map":{"version":3,"sources":["sap-ui-core.js?bundle-code-1"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.requireSync(\"sap/ui/core/Core\");\n"],"sourceRoot":""}},{"offset":{"line":11,"column":0},"map":{"version":3,"sources":["sap-ui-core.js?bundle-code-2"],"mappings":"AAAA;AACA","sourcesContent":["// as this module contains the Core, we ensure that the Core has been booted\nsap.ui.getCore().boot && sap.ui.getCore().boot();"],"sourceRoot":""}},{"offset":{"line":13,"column":0},"map":{"version":3,"sources":["sap-ui-core.js?bundle-code-3"],"mappings":"AAAA;AACA;AACA","sourcesContent":["} catch(oError) {\nif (oError.name != \"Restart\") { throw oError; }\n}"],"sourceRoot":""}}]} \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/Core-dbg.js b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/Core-dbg.js new file mode 100644 index 000000000..66bd2c43f --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/Core-dbg.js @@ -0,0 +1,4 @@ +(function () { + var core = true; + console.log(core); +})() diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/Core.js b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/Core.js index e69de29bb..dd81f8b0e 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/Core.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/Core.js @@ -0,0 +1 @@ +(function(){var o=true;console.log(o)})(); \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/library-preload.js b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/library-preload.js index 5f9e0796e..d368503ac 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/library-preload.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/library-preload.js @@ -1,13 +1,17 @@ //@ui5-bundle sap/ui/core/library-preload.js -jQuery.sap.registerPreloadedModules({ -"version":"2.0", -"modules":{ - "sap/ui/core/one.js":function(){function One(){return 1} +sap.ui.require.preload({ + "sap/ui/core/one.js":function(){ +function One(){return 1} this.One=One; }, - "sap/ui/core/some.js":function(){/*! + "sap/ui/core/some.js":function(){ +/*! * ${copyright} */ console.log("HelloWorld"); +}, + "ui5loader.js":function(){ +(function(){var o=true;console.log(o)})(); } -}}); +}); +//# sourceMappingURL=library-preload.js.map diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/library-preload.js.map b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/library-preload.js.map new file mode 100644 index 000000000..e22c32c23 --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/library-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"library-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"sources":["library-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"sources":["one-dbg.js"],"names":["One"],"mappings":"AAAA,SAASA,MACR,OAAO","file":"one.js","sourceRoot":""}},{"offset":{"line":4,"column":0},"map":{"version":3,"sources":["library-preload.js?bundle-code-1"],"mappings":"AAAA;AACA","sourcesContent":["this.One=One;\n"],"sourceRoot":""}},{"offset":{"line":7,"column":0},"map":{"version":3,"sources":["some-dbg.js"],"names":["console","log"],"mappings":"AAAA;;;AAGAA,QAAQC,IAAI","file":"some.js","sourceRoot":""}},{"offset":{"line":13,"column":0},"map":{"version":3,"sources":["ui5loader-dbg.js"],"names":["thisIsTheUi5Loader","console","log"],"mappings":"CAAA,WACC,IAAIA,EAAqB,KACzBC,QAAQC,IAAIF,IAFb","file":"ui5loader.js","sourceRoot":"../../.."}}]} \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/one-dbg.js b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/one-dbg.js new file mode 100644 index 000000000..753bd0523 --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/one-dbg.js @@ -0,0 +1,3 @@ +function One(){ + return 1; +} diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/one.js b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/one.js index 753bd0523..5aa630fcf 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/one.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/one.js @@ -1,3 +1 @@ -function One(){ - return 1; -} +function One(){return 1} \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/some-dbg.js b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/some-dbg.js new file mode 100644 index 000000000..f39184874 --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/some-dbg.js @@ -0,0 +1,14 @@ +/*! + * ${copyright} + */ +console.log('HelloWorld'); + +/* + * function add(c) - this is still not implemented. + * @private + * @param {Component} c + * @name add + * This comment should be removed in the preload bundle although it contains the magic + * sequence "opening parenthesis - letter c - closing parenthesis" which usually indicates + * a c o p y r i g h t comment. + */ diff --git a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/some.js b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/some.js index f39184874..f4ab0a202 100644 --- a/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/some.js +++ b/test/expected/build/sap.ui.core/preload/resources/sap/ui/core/some.js @@ -1,14 +1,4 @@ /*! * ${copyright} */ -console.log('HelloWorld'); - -/* - * function add(c) - this is still not implemented. - * @private - * @param {Component} c - * @name add - * This comment should be removed in the preload bundle although it contains the magic - * sequence "opening parenthesis - letter c - closing parenthesis" which usually indicates - * a c o p y r i g h t comment. - */ +console.log("HelloWorld"); \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/ui5loader-autoconfig-dbg.js b/test/expected/build/sap.ui.core/preload/resources/ui5loader-autoconfig-dbg.js new file mode 100644 index 000000000..783bce8ec --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/ui5loader-autoconfig-dbg.js @@ -0,0 +1,4 @@ +(function () { + var thisIsTheUi5LoaderAutoconfig = true; + console.log(thisIsTheUi5LoaderAutoconfig); +})() diff --git a/test/expected/build/sap.ui.core/preload/resources/ui5loader-autoconfig.js b/test/expected/build/sap.ui.core/preload/resources/ui5loader-autoconfig.js new file mode 100644 index 000000000..dd81f8b0e --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/ui5loader-autoconfig.js @@ -0,0 +1 @@ +(function(){var o=true;console.log(o)})(); \ No newline at end of file diff --git a/test/expected/build/sap.ui.core/preload/resources/ui5loader-dbg.js b/test/expected/build/sap.ui.core/preload/resources/ui5loader-dbg.js new file mode 100644 index 000000000..5e44b1dd6 --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/ui5loader-dbg.js @@ -0,0 +1,4 @@ +(function () { + var thisIsTheUi5Loader = true; + console.log(thisIsTheUi5Loader); +})() diff --git a/test/expected/build/sap.ui.core/preload/resources/ui5loader.js b/test/expected/build/sap.ui.core/preload/resources/ui5loader.js new file mode 100644 index 000000000..dd81f8b0e --- /dev/null +++ b/test/expected/build/sap.ui.core/preload/resources/ui5loader.js @@ -0,0 +1 @@ +(function(){var o=true;console.log(o)})(); \ No newline at end of file diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/Button.less b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/Button.less new file mode 100644 index 000000000..ca968183f --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/Button.less @@ -0,0 +1,3 @@ +.someClass { + color: @someColor +} diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/css_variables.css b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/css_variables.css new file mode 100644 index 000000000..6232d9e35 --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/css_variables.css @@ -0,0 +1,3 @@ +:root{--someColor:#000} +/* Inline theming parameters */ +#sap-ui-theme-theme\.j{background-image:url('data:text/plain;utf-8,%7B%22someColor%22%3A%22%23000%22%7D')} diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/css_variables.source.less b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/css_variables.source.less new file mode 100644 index 000000000..5a6ce08e9 --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/css_variables.source.less @@ -0,0 +1,5 @@ +@someColor: #000000; + +:root { +--someColor: @someColor; +} diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library-RTL.css b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library-RTL.css new file mode 100644 index 000000000..5009ca50e --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library-RTL.css @@ -0,0 +1,3 @@ +.someClass{color:#000} +/* Inline theming parameters */ +#sap-ui-theme-theme\.j{background-image:url('data:text/plain;utf-8,%7B%22someColor%22%3A%22%23000%22%7D')} diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library-parameters.json b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library-parameters.json new file mode 100644 index 000000000..a190cda03 --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library-parameters.json @@ -0,0 +1 @@ +{"someColor":"#000"} \ No newline at end of file diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library.css b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library.css new file mode 100644 index 000000000..5009ca50e --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library.css @@ -0,0 +1,3 @@ +.someClass{color:#000} +/* Inline theming parameters */ +#sap-ui-theme-theme\.j{background-image:url('data:text/plain;utf-8,%7B%22someColor%22%3A%22%23000%22%7D')} diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library.source.less b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library.source.less new file mode 100644 index 000000000..834de919e --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library.source.less @@ -0,0 +1,2 @@ +@someColor: black; +@import "Button.less"; diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library_skeleton-RTL.css b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library_skeleton-RTL.css new file mode 100644 index 000000000..7db086289 --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library_skeleton-RTL.css @@ -0,0 +1 @@ +.someClass{color:var(--someColor)} \ No newline at end of file diff --git a/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library_skeleton.css b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library_skeleton.css new file mode 100644 index 000000000..7db086289 --- /dev/null +++ b/test/expected/build/theme.j/dest-css-variables/resources/theme/j/themes/somefancytheme/library_skeleton.css @@ -0,0 +1 @@ +.someClass{color:var(--someColor)} \ No newline at end of file diff --git a/test/fixtures/application.h/ui5.yaml b/test/fixtures/application.h/ui5.yaml deleted file mode 100644 index 9365040dc..000000000 --- a/test/fixtures/application.h/ui5.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -specVersion: "2.0" -type: application -metadata: - name: application.h -builder: - bundles: - - name: sap/ushell/bootstrap/cdm.js - defaultFileTypes: - - ".js" - sections: - - mode: raw - filters: - - ui5loader.js - - ui5loader-autoconfig.js - declareModules: false - resolve: true - - mode: preload - name: sap/ushell/bootstrap/common - filters: - - sap/ushell/bootstrap/cdm/cdm-def.js - resolve: true - - mode: require - filters: - - sap/ushell/bootstrap/cdm/cdm-def.js \ No newline at end of file diff --git a/test/fixtures/application.i/ui5.yaml b/test/fixtures/application.i/ui5.yaml deleted file mode 100644 index 7c526c7e8..000000000 --- a/test/fixtures/application.i/ui5.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -specVersion: "0.1" -type: application -metadata: - name: application.i -builder: - bundles: - - name: sap/ushell/bootstrap/cdm.js - defaultFileTypes: - - ".js" - sections: - - mode: raw - filters: - - ui5loader.js - - ui5loader-autoconfig.js - declareModules: false - resolve: true - - mode: preload - name: sap/ushell/bootstrap/common - filters: - - sap/ushell/bootstrap/cdm/cdm-def.js - resolve: true - - mode: require - filters: - - sap/ushell/bootstrap/cdm/cdm-def.js \ No newline at end of file diff --git a/test/fixtures/application.i/webapp/manifest.json b/test/fixtures/application.i/webapp/manifest.json index 557627fd4..d9da4a8b9 100644 --- a/test/fixtures/application.i/webapp/manifest.json +++ b/test/fixtures/application.i/webapp/manifest.json @@ -12,6 +12,7 @@ }, "sap.ui5": { "dependencies": { + "minUI5Version": "1.72", "libs": { "sap.ui.layout": {}, "sap.ui.core": {}, diff --git a/test/fixtures/application.j/ui5.yaml b/test/fixtures/application.j/ui5.yaml deleted file mode 100644 index 5cc8b006d..000000000 --- a/test/fixtures/application.j/ui5.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -specVersion: "0.1" -type: application -metadata: - name: application.j -builder: - bundles: - - name: sap/ushell/bootstrap/cdm.js - defaultFileTypes: - - ".js" - sections: - - mode: raw - filters: - - ui5loader.js - - ui5loader-autoconfig.js - declareModules: false - resolve: true - - mode: preload - name: sap/ushell/bootstrap/common - filters: - - sap/ushell/bootstrap/cdm/cdm-def.js - resolve: true - - mode: require - filters: - - sap/ushell/bootstrap/cdm/cdm-def.js diff --git a/test/fixtures/application.j/webapp/manifest.json b/test/fixtures/application.j/webapp/manifest.json index 97ce1c9a7..dd82248ac 100644 --- a/test/fixtures/application.j/webapp/manifest.json +++ b/test/fixtures/application.j/webapp/manifest.json @@ -12,7 +12,7 @@ }, "sap.ui5": { "dependencies": { - "minUI5Version": "1.73.2", + "minUI5Version": "1.100.2", "libs": { "sap.ui.layout": {}, "sap.ui.core": {}, diff --git "a/test/fixtures/application.\303\270/ui5.yaml" "b/test/fixtures/application.\303\270/ui5.yaml" deleted file mode 100644 index 67342283e..000000000 --- "a/test/fixtures/application.\303\270/ui5.yaml" +++ /dev/null @@ -1,9 +0,0 @@ ---- -specVersion: "2.0" -type: application -metadata: - name: application.ø -resources: - configuration: - paths: - webapp: wêbäpp diff --git a/test/fixtures/lbt/modules/es6-syntax.js b/test/fixtures/lbt/modules/es6-syntax.js index 5d6914f9b..2f9924594 100644 --- a/test/fixtures/lbt/modules/es6-syntax.js +++ b/test/fixtures/lbt/modules/es6-syntax.js @@ -40,4 +40,9 @@ sap.ui.define([ await Promise.resolve(); }; + // chain expression + if (m1?.foo?.bar) { + sap.ui.require(["conditional/module4"]); + } + }); diff --git a/test/fixtures/library.e/src/library/e/library.js b/test/fixtures/library.e/src/library/e/library.js index 719155d1e..e6676c815 100644 --- a/test/fixtures/library.e/src/library/e/library.js +++ b/test/fixtures/library.e/src/library/e/library.js @@ -2,3 +2,5 @@ * ${copyright} */ console.log('HelloWorld'); + +// ${version} diff --git a/test/fixtures/library.e/src/library/e/manifest.json b/test/fixtures/library.e/src/library/e/manifest.json index 6ff551fd1..01221dedc 100644 --- a/test/fixtures/library.e/src/library/e/manifest.json +++ b/test/fixtures/library.e/src/library/e/manifest.json @@ -5,7 +5,7 @@ "type": "library", "embeds": [], "applicationVersion": { - "version": "1.0.0" + "version": "${version}" }, "title": "Library E", "description": "Library E", diff --git a/test/fixtures/library.e/test/library/e/Test.css b/test/fixtures/library.e/test/library/e/Test.css new file mode 100644 index 000000000..3f46b4c60 --- /dev/null +++ b/test/fixtures/library.e/test/library/e/Test.css @@ -0,0 +1,4 @@ +/* +${copyright} +${version} +*/ diff --git a/test/fixtures/library.e/test/library/e/Test.html b/test/fixtures/library.e/test/library/e/Test.html index e69de29bb..be546dc05 100644 --- a/test/fixtures/library.e/test/library/e/Test.html +++ b/test/fixtures/library.e/test/library/e/Test.html @@ -0,0 +1,4 @@ + diff --git a/test/fixtures/library.e/test/library/e/Test.js b/test/fixtures/library.e/test/library/e/Test.js new file mode 100644 index 000000000..3f46b4c60 --- /dev/null +++ b/test/fixtures/library.e/test/library/e/Test.js @@ -0,0 +1,4 @@ +/* +${copyright} +${version} +*/ diff --git "a/test/fixtures/library.\303\270/m\303\241in/\303\237rc/library/\303\270/rules/MyControl.support.js" "b/test/fixtures/library.\303\270/m\303\241in/\303\237rc/library/\303\270/rules/MyControl.support.js" new file mode 100644 index 000000000..105f08ef0 --- /dev/null +++ "b/test/fixtures/library.\303\270/m\303\241in/\303\237rc/library/\303\270/rules/MyControl.support.js" @@ -0,0 +1,36 @@ +/*! + * ${copyright} + */ +/** + * Defines support rules + */ + sap.ui.define(['sap/ui/support/library', 'sap/base/Log'], + function(SupportLib, Log) { + 'use strict'; + + //********************************************************** + // Rule Definitions + //********************************************************** + + var oRule = { + id: "oRule", + audiences: [Audiences.Application], + categories: [Categories.Usage], + enabled: true, + minversion: '1.71', + title: 'Title', + description: 'description', + resolution: 'resolution', + check: function(oIssueManager, oCoreFacade, oScope) { + oIssueManager.addIssue({ + severity: Severity.High, + details: 'Looking good today!' + }); + } + }; + + return [ + oRule + ]; + + }, true); diff --git a/test/fixtures/sap.ui.core/main/src/sap-ui-core.js b/test/fixtures/sap.ui.core/main/src/sap-ui-core.js index e69de29bb..bd9958b6e 100644 --- a/test/fixtures/sap.ui.core/main/src/sap-ui-core.js +++ b/test/fixtures/sap.ui.core/main/src/sap-ui-core.js @@ -0,0 +1,4 @@ +(function () { + var thisShouldBeOverwritten = true; + console.log(thisShouldBeOverwritten); +})() diff --git a/test/fixtures/sap.ui.core/main/src/sap/ui/core/Core.js b/test/fixtures/sap.ui.core/main/src/sap/ui/core/Core.js index e69de29bb..66bd2c43f 100644 --- a/test/fixtures/sap.ui.core/main/src/sap/ui/core/Core.js +++ b/test/fixtures/sap.ui.core/main/src/sap/ui/core/Core.js @@ -0,0 +1,4 @@ +(function () { + var core = true; + console.log(core); +})() diff --git a/test/fixtures/sap.ui.core/main/src/ui5loader-autoconfig.js b/test/fixtures/sap.ui.core/main/src/ui5loader-autoconfig.js new file mode 100644 index 000000000..783bce8ec --- /dev/null +++ b/test/fixtures/sap.ui.core/main/src/ui5loader-autoconfig.js @@ -0,0 +1,4 @@ +(function () { + var thisIsTheUi5LoaderAutoconfig = true; + console.log(thisIsTheUi5LoaderAutoconfig); +})() diff --git a/test/fixtures/sap.ui.core/main/src/ui5loader.js b/test/fixtures/sap.ui.core/main/src/ui5loader.js new file mode 100644 index 000000000..5e44b1dd6 --- /dev/null +++ b/test/fixtures/sap.ui.core/main/src/ui5loader.js @@ -0,0 +1,4 @@ +(function () { + var thisIsTheUi5Loader = true; + console.log(thisIsTheUi5Loader); +})() diff --git a/test/lib/builder/BuildContext.js b/test/lib/builder/BuildContext.js index 1021fce32..83af09a80 100644 --- a/test/lib/builder/BuildContext.js +++ b/test/lib/builder/BuildContext.js @@ -25,12 +25,35 @@ test("getRootProject", (t) => { t.is(buildContext.getRootProject(), "pony", "Returned correct value"); }); +test("getBuildOption", (t) => { + const buildContext = new BuildContext({ + rootProject: "root_project", + options: { + a: true, + b: "Pony", + c: 235, + d: { + d1: "Bee" + } + } + }); + + t.is(buildContext.getOption("a"), true, "Returned 'boolean' value is correct"); + t.is(buildContext.getOption("b"), "Pony", "Returned 'String' value is correct"); + t.is(buildContext.getOption("c"), 235, "Returned 'Number' value is correct"); + t.deepEqual(buildContext.getOption("d"), {d1: "Bee"}, "Returned 'object' value is correct"); +}); + test.serial("createProjectContext", (t) => { class DummyProjectContext { - constructor({buildContext, project, resources}) { + constructor({buildContext, project, resources, globalTags}) { t.is(buildContext, testBuildContext, "Correct buildContext parameter"); t.is(project, "project", "Correct project parameter"); t.is(resources, "resources", "Correct resources parameter"); + t.deepEqual(globalTags, { + IsDebugVariant: "ui5:IsDebugVariant", + HasDebugVariant: "ui5:HasDebugVariant", + }, "Correct globalTags parameter"); } } mock("../../../lib/builder/ProjectBuildContext", DummyProjectContext); @@ -70,3 +93,28 @@ test("executeCleanupTasks", async (t) => { t.is(executeCleanupTasks.callCount, 2, "Project context executeCleanupTasks got called twice"); }); + +test.serial("getResourceTagCollection", (t) => { + class DummyResourceTagCollection { + constructor({allowedTags, superCollection}) { + t.deepEqual(allowedTags, [ + "ui5:IsDebugVariant", + "ui5:HasDebugVariant", + ], + "Correct allowedTags parameter supplied"); + } + } + mock("@ui5/fs", { + ResourceTagCollection: DummyResourceTagCollection + }); + + const BuildContext = mock.reRequire("../../../lib/builder/BuildContext"); + const buildContext = new BuildContext({ + rootProject: "pony" + }); + + const collection = buildContext.getResourceTagCollection(); + + t.true(collection instanceof DummyResourceTagCollection, + "Returned an instance of mocked DummyResourceTagCollection"); +}); diff --git a/test/lib/builder/ProjectBuildContext.js b/test/lib/builder/ProjectBuildContext.js index d14b3072c..da765408f 100644 --- a/test/lib/builder/ProjectBuildContext.js +++ b/test/lib/builder/ProjectBuildContext.js @@ -1,7 +1,13 @@ const test = require("ava"); const sinon = require("sinon"); const mock = require("mock-require"); +const ResourceTagCollection = require("@ui5/fs").ResourceTagCollection; +test.beforeEach((t) => { + t.context.resourceTagCollection = new ResourceTagCollection({ + allowedTags: ["me:MyTag"] + }); +}); test.afterEach.always((t) => { sinon.restore(); mock.stopAll(); @@ -11,7 +17,12 @@ const ProjectBuildContext = require("../../../lib/builder/ProjectBuildContext"); test("Missing parameters", (t) => { const error = t.throws(() => { - new ProjectBuildContext({}); + new ProjectBuildContext({ + buildContext: { + getResourceTagCollection: () => t.context.resourceTagCollection + }, + globalTags: {MyTag: "me:MyTag"}, + }); }); t.is(error.message, `One or more mandatory parameters are missing`, "Threw with expected error message"); @@ -20,8 +31,10 @@ test("Missing parameters", (t) => { test("isRootProject: true", (t) => { const projectBuildContext = new ProjectBuildContext({ buildContext: { - getRootProject: () => "root project" + getRootProject: () => "root project", + getResourceTagCollection: () => t.context.resourceTagCollection }, + globalTags: {MyTag: "me:MyTag"}, project: "root project", resources: "resources" }); @@ -32,8 +45,10 @@ test("isRootProject: true", (t) => { test("isRootProject: false", (t) => { const projectBuildContext = new ProjectBuildContext({ buildContext: { - getRootProject: () => "root project" + getRootProject: () => "root project", + getResourceTagCollection: () => t.context.resourceTagCollection }, + globalTags: {MyTag: "me:MyTag"}, project: "no root project", resources: "resources" }); @@ -41,11 +56,25 @@ test("isRootProject: false", (t) => { t.false(projectBuildContext.isRootProject(), "Correctly identified non-root project"); }); +test("getBuildOption", (t) => { + const projectBuildContext = new ProjectBuildContext({ + buildContext: { + getOption: () => "Pony" + }, + project: "my project", + resources: "resources" + }); + + t.deepEqual(projectBuildContext.getOption("a"), "Pony", "Returned value is correct"); +}); + test("registerCleanupTask", (t) => { const projectBuildContext = new ProjectBuildContext({ buildContext: { - getRootProject: () => "root project" + getRootProject: () => "root project", + getResourceTagCollection: () => t.context.resourceTagCollection }, + globalTags: {MyTag: "me:MyTag"}, project: "no root project", resources: "resources" }); @@ -59,8 +88,10 @@ test("registerCleanupTask", (t) => { test("executeCleanupTasks", (t) => { const projectBuildContext = new ProjectBuildContext({ buildContext: { - getRootProject: () => "root project" + getRootProject: () => "root project", + getResourceTagCollection: () => t.context.resourceTagCollection }, + globalTags: {MyTag: "me:MyTag"}, project: "no root project", resources: "resources" }); @@ -78,26 +109,33 @@ test("executeCleanupTasks", (t) => { test("STANDARD_TAGS constant", (t) => { const projectBuildContext = new ProjectBuildContext({ buildContext: { - getRootProject: () => "root project" + getRootProject: () => "root project", + getResourceTagCollection: () => t.context.resourceTagCollection }, + globalTags: {MyTag: "me:MyTag"}, project: "no root project", resources: "resources" }); t.deepEqual(projectBuildContext.STANDARD_TAGS, { OmitFromBuildResult: "ui5:OmitFromBuildResult", + MyTag: "me:MyTag", IsBundle: "ui5:IsBundle" }, "Exposes correct STANDARD_TAGS constant"); }); test.serial("getResourceTagCollection", (t) => { class DummyResourceTagCollection { - constructor({allowedTags}) { + constructor({allowedTags, superCollection}) { t.deepEqual(allowedTags, [ "ui5:OmitFromBuildResult", - "ui5:IsBundle" + "ui5:IsBundle", + "me:MyTag", ], "Correct allowedTags parameter supplied"); + + t.is(superCollection, "build context's tag collection", + "Correct superCollection parameter supplied"); } } mock("@ui5/fs", { @@ -107,8 +145,10 @@ test.serial("getResourceTagCollection", (t) => { const ProjectBuildContext = mock.reRequire("../../../lib/builder/ProjectBuildContext"); const projectBuildContext = new ProjectBuildContext({ buildContext: { - getRootProject: () => "root project" + getRootProject: () => "root project", + getResourceTagCollection: () => "build context's tag collection", }, + globalTags: {MyTag: "me:MyTag"}, project: "no root project", resources: "resources" }); diff --git a/test/lib/builder/builder-composeTaskList.js b/test/lib/builder/builder-composeTaskList.js index 3f4c94470..3c7780947 100644 --- a/test/lib/builder/builder-composeTaskList.js +++ b/test/lib/builder/builder-composeTaskList.js @@ -31,9 +31,8 @@ test.afterEach.always(() => { "replaceCopyright", "replaceVersion", "replaceBuildtime", - "createDebugFiles", "escapeNonAsciiCharacters", - "uglify", + "minify", "buildThemes", "generateLibraryManifest", "generateVersionInfo", @@ -67,9 +66,8 @@ test.afterEach.always(() => { "replaceCopyright", "replaceVersion", "replaceBuildtime", - "createDebugFiles", "escapeNonAsciiCharacters", - "uglify", + "minify", "buildThemes", "transformBootstrapHtml", "generateLibraryManifest", @@ -106,9 +104,8 @@ test.afterEach.always(() => { }, [ "replaceVersion", "replaceBuildtime", - "createDebugFiles", "escapeNonAsciiCharacters", - "uglify", + "minify", "buildThemes", "generateLibraryManifest", "generateVersionInfo", @@ -130,12 +127,11 @@ test.afterEach.always(() => { "replaceCopyright", "replaceVersion", "replaceBuildtime", - "createDebugFiles", "escapeNonAsciiCharacters", "executeJsdocSdkTransformation", "generateApiIndex", "generateJsdoc", - "uglify", + "minify", "buildThemes", "transformBootstrapHtml", "generateLibraryManifest", @@ -171,9 +167,8 @@ test.afterEach.always(() => { "replaceCopyright", "replaceVersion", "replaceBuildtime", - "createDebugFiles", "escapeNonAsciiCharacters", - "uglify", + "minify", "buildThemes", "generateLibraryManifest", "generateVersionInfo", @@ -203,9 +198,8 @@ test.afterEach.always(() => { "replaceCopyright", "replaceVersion", "replaceBuildtime", - "createDebugFiles", "escapeNonAsciiCharacters", - "uglify", + "minify", "buildThemes", "generateLibraryManifest", "generateVersionInfo", diff --git a/test/lib/builder/builder.js b/test/lib/builder/builder.js index b40fa6d45..1d807f1ab 100644 --- a/test/lib/builder/builder.js +++ b/test/lib/builder/builder.js @@ -31,6 +31,7 @@ const libraryØPath = path.join(__dirname, "..", "..", "fixtures", "library.ø") const libraryCore = path.join(__dirname, "..", "..", "fixtures", "sap.ui.core-evo"); const libraryCoreBuildtime = path.join(__dirname, "..", "..", "fixtures", "sap.ui.core-buildtime"); const themeJPath = path.join(__dirname, "..", "..", "fixtures", "theme.j"); +const themeLibraryEPath = path.join(__dirname, "..", "..", "fixtures", "theme.library.e"); const recursive = require("recursive-readdir"); @@ -111,9 +112,11 @@ test.serial("Build", async (t) => { getTag: getTagStub }); const isRootProjectStub = sinon.stub().returns(true); + const getOptionStub = sinon.stub().returns("Pony"); const dummyProjectContext = { getResourceTagCollection: getResourceTagCollectionStub, isRootProject: isRootProjectStub, + getOption: getOptionStub, STANDARD_TAGS: { OmitFromBuildResult: "👻" } @@ -162,9 +165,8 @@ test.serial("Build", async (t) => { "replaceCopyright", "replaceVersion", "replaceBuildtime", - "createDebugFiles", "escapeNonAsciiCharacters", - "uglify", + "minify", "buildThemes", "generateLibraryManifest", "generateVersionInfo", @@ -448,7 +450,28 @@ test.serial("Build application.h", (t) => { return builder.build({ tree: applicationHTree, destPath, - excludedTasks: ["createDebugFiles", "generateComponentPreload", + excludedTasks: ["generateComponentPreload", + "generateStandaloneAppBundle", "generateVersionInfo"] + }).then(() => { + return findFiles(expectedPath); + }).then((expectedFiles) => { + // Check for all directories and files + assert.directoryDeepEqual(destPath, expectedPath); + // Check for all file contents + return checkFileContentsIgnoreLineFeeds(t, expectedFiles, expectedPath, destPath); + }).then(() => { + t.pass(); + }); +}); + +test.serial("Build application.h (no minify)", (t) => { + const destPath = "./test/tmp/build/application.h/no-minify"; + const expectedPath = path.join("test", "expected", "build", "application.h", "no-minify"); + + return builder.build({ + tree: applicationHTree, + destPath, + excludedTasks: ["minify", "generateComponentPreload", "generateStandaloneAppBundle", "generateVersionInfo"] }).then(() => { return findFiles(expectedPath); @@ -469,7 +492,7 @@ test.serial("Build application.i", (t) => { return builder.build({ tree: applicationITree, destPath, - excludedTasks: ["createDebugFiles", "generateStandaloneAppBundle", "generateVersionInfo"] + excludedTasks: ["generateStandaloneAppBundle", "generateVersionInfo"] }).then(() => { return findFiles(expectedPath); }).then((expectedFiles) => { @@ -489,7 +512,7 @@ test.serial("Build application.j", (t) => { return builder.build({ tree: applicationJTree, destPath, - excludedTasks: ["createDebugFiles", "generateStandaloneAppBundle", "generateVersionInfo"] + excludedTasks: ["generateStandaloneAppBundle", "generateVersionInfo"] }).then(() => { return findFiles(expectedPath); }).then((expectedFiles) => { @@ -534,7 +557,7 @@ test.serial("Build application.j with resources.json and version info", (t) => { ], tree: applicationJTree, destPath, - excludedTasks: ["createDebugFiles", "generateStandaloneAppBundle"] + excludedTasks: ["generateStandaloneAppBundle"] }).then(() => { return findFiles(expectedPath); }).then((expectedFiles) => { @@ -698,7 +721,29 @@ test.serial("Build library.h with custom bundles and component-preloads", (t) => return builder.build({ tree: libraryHTree, destPath, - excludedTasks: ["createDebugFiles", "generateLibraryPreload"] + excludedTasks: ["generateLibraryPreload"] + }).then(() => { + return findFiles(expectedPath); + }).then((expectedFiles) => { + // Check for all directories and files + assert.directoryDeepEqual(destPath, expectedPath); + + // Check for all file contents + return checkFileContentsIgnoreLineFeeds(t, expectedFiles, expectedPath, destPath); + }).then(() => { + t.pass(); + }); +}); + + +test.serial("Build library.h with custom bundles and component-preloads (no minify)", (t) => { + const destPath = path.join("test", "tmp", "build", "library.h", "no-minify"); + const expectedPath = path.join("test", "expected", "build", "library.h", "no-minify"); + + return builder.build({ + tree: libraryHTree, + destPath, + excludedTasks: ["minify", "generateLibraryPreload"] }).then(() => { return findFiles(expectedPath); }).then((expectedFiles) => { @@ -722,7 +767,7 @@ test.serial("Build library.h with custom bundles and component-preloads with res ], tree: libraryHTree, destPath, - excludedTasks: ["createDebugFiles", "generateLibraryPreload"] + excludedTasks: ["generateLibraryPreload"] }).then(() => { return findFiles(expectedPath); }).then((expectedFiles) => { @@ -743,7 +788,7 @@ test.serial("Build library.i with manifest info taken from .library and library. return builder.build({ tree: libraryITree, destPath, - excludedTasks: ["createDebugFiles", "generateLibraryPreload", "uglify"] + excludedTasks: ["generateLibraryPreload", "minify"] }).then(() => { return findFiles(expectedPath); }).then((expectedFiles) => { @@ -859,7 +904,7 @@ test.serial("Build library.ø", (t) => { }); test.serial("Build library.coreBuildtime: replaceBuildtime", (t) => { - const destPath = path.join("test", "tmp", "build", "library.coreBuildtime", "dest"); + const destPath = path.join("test", "tmp", "build", "sap.ui.core-buildtime", "dest"); const expectedPath = path.join("test", "expected", "build", "sap.ui.core-buildtime", "dest"); const dateStubs = [ @@ -888,6 +933,44 @@ test.serial("Build library.coreBuildtime: replaceBuildtime", (t) => { }); }); +test.serial("Build library with theme configured for CSS variables", (t) => { + const destPath = "./test/tmp/build/theme.j/dest-css-variables"; + const expectedPath = "./test/expected/build/theme.j/dest-css-variables"; + return builder.build({ + tree: themeJTree, + cssVariables: true, + destPath + }).then(() => { + return findFiles(expectedPath); + }).then((expectedFiles) => { + // Check for all directories and files + assert.directoryDeepEqual(destPath, expectedPath); + + return checkFileContentsIgnoreLineFeeds(t, expectedFiles, expectedPath, destPath); + }).then(() => { + t.pass(); + }); +}); + +test.serial("Build theme-library with CSS variables", (t) => { + const destPath = "./test/tmp/build/theme.library.e/dest-css-variables"; + const expectedPath = "./test/expected/build/theme.library.e/dest-css-variables"; + return builder.build({ + tree: themeLibraryETree, + cssVariables: true, + destPath + }).then(() => { + return findFiles(expectedPath); + }).then((expectedFiles) => { + // Check for all directories and files + assert.directoryDeepEqual(destPath, expectedPath); + + return checkFileContentsIgnoreLineFeeds(t, expectedFiles, expectedPath, destPath); + }).then(() => { + t.pass(); + }); +}); + test.serial("Cleanup", async (t) => { const BuildContext = require("../../../lib/builder/BuildContext"); const createProjectContextStub = sinon.spy(BuildContext.prototype, "createProjectContext"); @@ -1289,7 +1372,7 @@ const applicationHTree = { }] }, "bundleOptions": { - "optimize": true, + "optimize": false, "usePredefinedCalls": true } }] @@ -1613,7 +1696,7 @@ const libraryHTree = { "filters": [ "library/h/some.js", "library/h/library.js", - "library/h/file.js", + "library/h/fi*.js", "!library/h/components/" ], "resolve": false, @@ -1633,6 +1716,35 @@ const libraryHTree = { "optimize": true, "usePredefinedCalls": true } + }, { + "bundleDefinition": { + "name": "library/h/customBundle-dbg.js", + "defaultFileTypes": [".js"], + "sections": [{ + "mode": "preload", + "filters": [ + "library/h/some.js", + "library/h/library.js", + "library/h/fi*.js", + "!library/h/components/" + ], + "resolve": false, + "renderer": false + }, { + "mode": "raw", + "filters": [ + "library/h/not.js" + ], + "resolve": true, + "declareModules": false, + "sort": true, + "renderer": false + }] + }, + "bundleOptions": { + "optimize": false, + "usePredefinedCalls": true + } }], "componentPreload": { "namespaces": [ @@ -1868,3 +1980,27 @@ const themeJTree = { } } }; + +const themeLibraryETree = { + "id": "theme.library.e.id", + "version": "1.0.0", + "path": themeLibraryEPath, + "dependencies": [], + "_level": 0, + "_isRoot": true, + "specVersion": "1.1", + "type": "theme-library", + "metadata": { + "name": "theme.library.e", + "namespace": "theme/library/e", + "copyright": "Some fancy copyright" + }, + "resources": { + "configuration": { + "paths": { + "src": "src", + "test": "test" + } + } + } +}; diff --git a/test/lib/index.js b/test/lib/index.js index b9d5ea003..c79476f60 100644 --- a/test/lib/index.js +++ b/test/lib/index.js @@ -11,12 +11,10 @@ test("index.js exports all expected modules", (t) => { t.truthy(index.processors.jsdocGenerator, "Module exported"); t.truthy(index.processors.sdkTransformer, "Module exported"); t.truthy(index.processors.bootstrapHtmlTransformer, "Module exported"); - t.truthy(index.processors.debugFileCreator, "Module exported"); - t.truthy(index.processors.resourceCopier, "Module exported"); + t.truthy(index.processors.minifier, "Module exported"); t.truthy(index.processors.nonAsciiEscaper, "Module exported"); t.truthy(index.processors.stringReplacer, "Module exported"); t.truthy(index.processors.themeBuilder, "Module exported"); - t.truthy(index.processors.uglifier, "Module exported"); t.truthy(index.processors.versionInfoGenerator, "Module exported"); t.truthy(index.tasks.generateComponentPreload, "Module exported"); @@ -28,7 +26,7 @@ test("index.js exports all expected modules", (t) => { t.truthy(index.tasks.generateBundle, "Module exported"); t.truthy(index.tasks.generateCachebusterInfo, "Module exported"); t.truthy(index.tasks.buildThemes, "Module exported"); - t.truthy(index.tasks.createDebugFiles, "Module exported"); + t.truthy(index.tasks.minify, "Module exported"); t.truthy(index.tasks.executeJsdocSdkTransformation, "Module exported"); t.truthy(index.tasks.generateApiIndex, "Module exported"); t.truthy(index.tasks.generateJsdoc, "Module exported"); @@ -38,7 +36,6 @@ test("index.js exports all expected modules", (t) => { t.truthy(index.tasks.replaceVersion, "Module exported"); t.truthy(index.tasks.replaceBuildtime, "Module exported"); t.truthy(index.tasks.transformBootstrapHtml, "Module exported"); - t.truthy(index.tasks.uglify, "Module exported"); t.truthy(index.tasks.taskRepository, "Module exported"); t.truthy(index.types.AbstractBuilder, "Module exported"); diff --git a/test/lib/lbt/analyzer/JSModuleAnalyzer.js b/test/lib/lbt/analyzer/JSModuleAnalyzer.js index 93bd8bcef..10b5da6e5 100644 --- a/test/lib/lbt/analyzer/JSModuleAnalyzer.js +++ b/test/lib/lbt/analyzer/JSModuleAnalyzer.js @@ -493,6 +493,7 @@ test("ES6 Syntax", (t) => { "conditional/module1.js", "conditional/module2.js", "conditional/module3.js", + "conditional/module4.js", "static/module1.js", "static/module2.js", "static/module3.js", diff --git a/test/lib/lbt/analyzer/XMLTemplateAnalyzer.js b/test/lib/lbt/analyzer/XMLTemplateAnalyzer.js index 7019fa03f..1c9877cdc 100644 --- a/test/lib/lbt/analyzer/XMLTemplateAnalyzer.js +++ b/test/lib/lbt/analyzer/XMLTemplateAnalyzer.js @@ -326,6 +326,26 @@ test("integration: Analysis of an xml fragment", async (t) => { "Implicit dependency should be added since a fragment is analyzed"); }); +test("integration: Analysis of an xml fragment with core:require", async (t) => { + const xml = ` + + `; + + const moduleInfo = new ModuleInfo(); + + const analyzer = new XMLTemplateAnalyzer(fakeMockPool); + await analyzer.analyzeFragment(xml, moduleInfo); + t.deepEqual(moduleInfo.dependencies, + [ + "sap/ui/core/Fragment.js", + "sap/m/MessageToast.js" + ], "Dependencies should come from the XML template"); + t.true(moduleInfo.isImplicitDependency("sap/ui/core/Fragment.js"), + "Implicit dependency should be added since an XML Fragment is analyzed"); +}); + test("integration: Analysis of an empty xml view", async (t) => { const xml = ""; diff --git a/test/lib/lbt/bundle/AutoSplitter.js b/test/lib/lbt/bundle/AutoSplitter.js index c6a0874e0..4e704fd70 100644 --- a/test/lib/lbt/bundle/AutoSplitter.js +++ b/test/lib/lbt/bundle/AutoSplitter.js @@ -1,6 +1,5 @@ const test = require("ava"); const sinon = require("sinon"); -const terser = require("terser"); const {pd} = require("pretty-data"); const BundleResolver = require("../../../../lib/lbt/bundle/Resolver"); const AutoSplitter = require("../../../../lib/lbt/bundle/AutoSplitter"); @@ -55,7 +54,7 @@ test("integration: AutoSplitter with numberOfParts 1", async (t) => { defaultFileTypes: [".js", ".fragment.xml", ".view.xml", ".properties", ".json"], sections: [{ mode: "preload", - filters: ["a.js", "b.json"], + filters: ["x.view.xml", "c.properties", "b.json"], // intentionally unsorted resolve: false, resolveConditional: false, renderer: false @@ -67,7 +66,7 @@ test("integration: AutoSplitter with numberOfParts 1", async (t) => { name: `Component-preload-0.js`, sections: [{ mode: "preload", - filters: ["a.js", "b.json"], + filters: ["b.json", "c.properties", "x.view.xml"], // preload section modules should be sorted name: undefined }] }); @@ -155,11 +154,11 @@ test("_calcMinSize: compressedSize", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - t.deepEqual(await autpSplitter._calcMinSize("mymodule.js"), 123); + const autoSplitter = new AutoSplitter(pool); + t.deepEqual(await autoSplitter._calcMinSize("mymodule.js"), 123); }); -test("_calcMinSize: js resource", async (t) => { +test("_calcMinSize: js resource (optimize=false)", async (t) => { const pool = { findResourceWithInfo: function() { return { @@ -172,13 +171,11 @@ test("_calcMinSize: js resource", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - t.deepEqual(await autpSplitter._calcMinSize("mymodule.js"), 13); + const autoSplitter = new AutoSplitter(pool); + t.deepEqual(await autoSplitter._calcMinSize("mymodule.js"), 13); }); - -test.serial("_calcMinSize: uglify js resource", async (t) => { - const stubTerser = sinon.stub(terser, "minify").resolves({code: "123"}); +test.serial("_calcMinSize: js resource (optimize=true)", async (t) => { const pool = { findResourceWithInfo: function() { return { @@ -191,10 +188,13 @@ test.serial("_calcMinSize: uglify js resource", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - autpSplitter.optimize = true; - t.deepEqual(await autpSplitter._calcMinSize("mymodule.js"), 3); - stubTerser.restore(); + const autoSplitter = new AutoSplitter(pool); + + // The optimize flag should not be taken into account and the resource + // should not get optimized by the AutoSplitter. + autoSplitter.optimize = true; + + t.deepEqual(await autoSplitter._calcMinSize("mymodule.js"), 13); }); test("_calcMinSize: properties resource", async (t) => { @@ -221,8 +221,8 @@ test("_calcMinSize: properties resource", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - t.deepEqual(await autpSplitter._calcMinSize("mymodule.properties"), 10, "length of 1234\\u00df"); + const autoSplitter = new AutoSplitter(pool); + t.deepEqual(await autoSplitter._calcMinSize("mymodule.properties"), 10, "length of 1234\\u00df"); }); test("_calcMinSize: xml view resource", async (t) => { @@ -234,9 +234,9 @@ test("_calcMinSize: xml view resource", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - autpSplitter.optimizeXMLViews = true; - t.deepEqual(await autpSplitter._calcMinSize("mymodule.view.xml"), 5); + const autoSplitter = new AutoSplitter(pool); + autoSplitter.optimizeXMLViews = true; + t.deepEqual(await autoSplitter._calcMinSize("mymodule.view.xml"), 5); }); test("_calcMinSize: xml view resource without optimizeXMLViews", async (t) => { @@ -248,8 +248,8 @@ test("_calcMinSize: xml view resource without optimizeXMLViews", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - t.deepEqual(await autpSplitter._calcMinSize("mymodule.view.xml"), 6); + const autoSplitter = new AutoSplitter(pool); + t.deepEqual(await autoSplitter._calcMinSize("mymodule.view.xml"), 6); }); test.serial("_calcMinSize: optimize xml view resource", async (t) => { @@ -262,10 +262,10 @@ test.serial("_calcMinSize: optimize xml view resource", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - autpSplitter.optimizeXMLViews = true; - autpSplitter.optimize = true; - t.deepEqual(await autpSplitter._calcMinSize("mymodule.view.xml"), 6); + const autoSplitter = new AutoSplitter(pool); + autoSplitter.optimizeXMLViews = true; + autoSplitter.optimize = true; + t.deepEqual(await autoSplitter._calcMinSize("mymodule.view.xml"), 6); stubXmlmin.restore(); }); @@ -279,11 +279,11 @@ test.serial("_calcMinSize: optimize xml view resource and pre tag", async (t) => }; } }; - const autpSplitter = new AutoSplitter(pool); - autpSplitter.optimizeXMLViews = true; - autpSplitter.optimize = true; + const autoSplitter = new AutoSplitter(pool); + autoSplitter.optimizeXMLViews = true; + autoSplitter.optimize = true; t.false(stubXmlmin.called, "xmlmin should not be called"); - t.deepEqual(await autpSplitter._calcMinSize("mymodule.view.xml"), 19); + t.deepEqual(await autoSplitter._calcMinSize("mymodule.view.xml"), 19); stubXmlmin.restore(); }); @@ -293,8 +293,8 @@ test("_calcMinSize: no resource", async (t) => { return null; } }; - const autpSplitter = new AutoSplitter(pool); - t.deepEqual(await autpSplitter._calcMinSize("mymodule.properties"), 0); + const autoSplitter = new AutoSplitter(pool); + t.deepEqual(await autoSplitter._calcMinSize("mymodule.properties"), 0); }); test("_calcMinSize: unknown resource with info", async (t) => { @@ -307,6 +307,6 @@ test("_calcMinSize: unknown resource with info", async (t) => { }; } }; - const autpSplitter = new AutoSplitter(pool); - t.deepEqual(await autpSplitter._calcMinSize("mymodule.mjs"), 47); + const autoSplitter = new AutoSplitter(pool); + t.deepEqual(await autoSplitter._calcMinSize("mymodule.mjs"), 47); }); diff --git a/test/lib/lbt/bundle/Builder.js b/test/lib/lbt/bundle/Builder.js index f76295a33..19dd58518 100644 --- a/test/lib/lbt/bundle/Builder.js +++ b/test/lib/lbt/bundle/Builder.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ const test = require("ava"); const sinon = require("sinon"); const mock = require("mock-require"); @@ -5,6 +6,11 @@ const mock = require("mock-require"); const Builder = require("../../../../lib/lbt/bundle/Builder"); const ResourcePool = require("../../../../lib/lbt/resources/ResourcePool"); +// Node.js itself tries to parse sourceMappingURLs in all JavaScript files. This is unwanted and might even lead to +// obscure errors when dynamically generating Data-URI soruceMappingURL values. +// Therefore use this constant to never write the actual string. +const SOURCE_MAPPING_URL = "//" + "# sourceMappingURL"; + test.afterEach.always((t) => { mock.stopAll(); sinon.restore(); @@ -30,13 +36,15 @@ test.serial("writePreloadModule: with invalid json content", async (t) => { write: writeStub }; const invalidJsonResource = { + string: function() { + return this.buffer(); + }, buffer: async () => { return invalidJsonContent; } }; const result = await builder.writePreloadModule("invalid.json", undefined, invalidJsonResource); - t.is(verboseLogStub.callCount, 2, "called 2 times"); t.is(verboseLogStub.firstCall.args[0], "Failed to parse JSON file %s. Ignoring error, skipping compression.", "first verbose log argument 0 is correct"); @@ -52,14 +60,26 @@ test("integration: createBundle with exposedGlobals", async (t) => { const pool = new ResourcePool(); pool.addResource({ name: "a.js", + getPath: () => "a.js", + string: function() { + return this.buffer(); + }, buffer: async () => "function One(){return 1;}" }); pool.addResource({ name: "ui5loader.js", + getPath: () => "ui5loader.js", + string: function() { + return this.buffer(); + }, buffer: async () => "" }); pool.addResource({ name: "a.library", + getPath: () => "a.library", + string: function() { + return this.buffer(); + }, buffer: async () => ` @@ -91,11 +111,13 @@ test("integration: createBundle with exposedGlobals", async (t) => { t.deepEqual(oResult.name, "library-preload.js"); const expectedContent = `//@ui5-bundle library-preload.js sap.ui.require.preload({ - "a.js":function(){function One(){return 1;} + "a.js":function(){ +function One(){return 1;} this.One=One; } },"preload-section"); sap.ui.requireSync("ui5loader"); +${SOURCE_MAPPING_URL}=library-preload.js.map `; t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat " + "should contain:" + @@ -111,14 +133,26 @@ test("integration: createBundle EVOBundleFormat (ui5loader.js)", async (t) => { const pool = new ResourcePool(); pool.addResource({ name: "ui5loader.js", + getPath: () => "ui5loader.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(__global) {sap.ui.require = function(){};}(window));" }); pool.addResource({ name: "jquery.sap.global-dbg.js", + getPath: () => "jquery.sap.global-dbg.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([], function(){return {};});" }); pool.addResource({ name: "myModule.js", + getPath: () => "myModule.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(){window.mine = {};}());" }); @@ -146,14 +180,16 @@ test("integration: createBundle EVOBundleFormat (ui5loader.js)", async (t) => { const expectedContent = `//@ui5-bundle Component-preload.js window["sap-ui-optimized"] = true; sap.ui.require.preload({ - "jquery.sap.global-dbg.js":function(){sap.ui.define([], function(){return {};}); + "jquery.sap.global-dbg.js":function(){ +sap.ui.define([], function(){return {};}); } },"preload-section"); //@ui5-bundle-raw-include myModule.js (function(){window.mine = {};}()); sap.ui.requireSync("ui5loader"); +${SOURCE_MAPPING_URL}=Component-preload.js.map `; - t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optomization and " + + t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optimization and " + "should contain:" + " preload part from jquery.sap.global-dbg.js" + " raw part from myModule.js" + @@ -168,22 +204,42 @@ test("integration: createBundle EVOBundleFormat, using predefine calls", async ( const pool = new ResourcePool(); pool.addResource({ name: "ui5loader.js", + getPath: () => "ui5loader.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(__global) {sap.ui.require = function(){};}(window));" }); pool.addResource({ // the pool must contain this to activate optimization markers name: "jquery.sap.global-dbg.js", + getPath: () => "jquery.sap.global-dbg.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([], function(){return {};});" }); pool.addResource({ name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([], function(){return {};});" }); pool.addResource({ name: "jquery.sap.pony1.js", + getPath: () => "jquery.sap.pony1.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define(); // hello" }); pool.addResource({ name: "jquery.sap.pony2.js", + getPath: () => "jquery.sap.pony2.js", + string: function() { + return this.buffer(); + }, buffer: async () => `sap. ui.define /*hello*/ @@ -191,10 +247,18 @@ test("integration: createBundle EVOBundleFormat, using predefine calls", async ( }); pool.addResource({ name: "myRawModule.js", + getPath: () => "myRawModule.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(){window.mine = {};}());" }); pool.addResource({ name: "myModuleUsingGlobalScope.js", + getPath: () => "myModuleUsingGlobalScope.js", + string: function() { + return this.buffer(); + }, buffer: async () => "var magic = {};" }); @@ -226,22 +290,26 @@ test("integration: createBundle EVOBundleFormat, using predefine calls", async ( usePredefineCalls: true, numberOfParts: 1, decorateBootstrapModule: true, - optimize: true // Note: using 'optimize' makes the test sensitive to changes in terser + optimize: true }); t.deepEqual(oResult.name, "Component-preload.js"); const expectedContent = `//@ui5-bundle Component-preload.js window["sap-ui-optimized"] = true; -sap.ui.predefine("jquery.sap.global",[],function(){return{}}); -sap.ui.predefine("jquery.sap.pony1"); -sap.ui.predefine("jquery.sap.pony2"); +sap.ui.predefine("jquery.sap.global", [], function(){return {};}); +sap.ui.predefine("jquery.sap.pony1"); // hello +sap. + ui.predefine + /*hello*/ + ("jquery.sap.pony2"); sap.ui.require.preload({ - "myModuleUsingGlobalScope.js":'var magic={};' + "myModuleUsingGlobalScope.js":'var magic = {};' },"preload-section"); //@ui5-bundle-raw-include myRawModule.js -(function(){window.mine={}})(); +(function(){window.mine = {};}()); sap.ui.requireSync("ui5loader"); +${SOURCE_MAPPING_URL}=Component-preload.js.map `; - t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optomization and " + + t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optimization and " + "should contain:" + " preload part from jquery.sap.global-dbg.js" + " raw part from myModule.js" + @@ -262,22 +330,42 @@ test("integration: createBundle EVOBundleFormat, using predefine calls, no optim const pool = new ResourcePool(); pool.addResource({ name: "ui5loader.js", + getPath: () => "ui5loader.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(__global) {sap.ui.require = function(){};}(window));" }); pool.addResource({ // the pool must contain this to activate optimization markers name: "jquery.sap.global-dbg.js", + getPath: () => "jquery.sap.global-dbg.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([], function(){return {};});" }); pool.addResource({ name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([], function(){return {};});" }); pool.addResource({ name: "jquery.sap.pony1.js", + getPath: () => "jquery.sap.pony1.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define(); // hello" }); pool.addResource({ name: "jquery.sap.pony2.js", + getPath: () => "jquery.sap.pony2.js", + string: function() { + return this.buffer(); + }, buffer: async () => `sap. ui.define /*hello*/ @@ -285,10 +373,18 @@ test("integration: createBundle EVOBundleFormat, using predefine calls, no optim }); pool.addResource({ name: "myRawModule.js", + getPath: () => "myRawModule.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(){window.mine = {};}());" }); pool.addResource({ name: "myModuleUsingGlobalScope.js", + getPath: () => "myModuleUsingGlobalScope.js", + string: function() { + return this.buffer(); + }, buffer: async () => "var magic = {};" }); @@ -337,8 +433,9 @@ sap.ui.require.preload({ //@ui5-bundle-raw-include myRawModule.js (function(){window.mine = {};}()); sap.ui.requireSync("ui5loader"); +${SOURCE_MAPPING_URL}=Component-preload.js.map `; - t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optomization and " + + t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optimization and " + "should contain:" + " preload part from jquery.sap.global-dbg.js" + " raw part from myModule.js" + @@ -359,10 +456,18 @@ test("integration: createBundle (bootstrap bundle)", async (t) => { const pool = new ResourcePool(); pool.addResource({ name: "ui5loader.js", + getPath: () => "ui5loader.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(__global) {sap.ui.require = function(){};}(window));" }); pool.addResource({ name: "sap/ui/core/Core.js", + getPath: () => "sap/ui/core/Core.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([],function(){return {};});" }); @@ -397,16 +502,17 @@ test("integration: createBundle (bootstrap bundle)", async (t) => { window["sap-ui-optimized"] = true; try { //@ui5-bundle-raw-include ui5loader.js -(function(i){sap.ui.require=function(){}})(window); -sap.ui.predefine("sap/ui/core/Core",[],function(){return{}}); +(function(__global) {sap.ui.require = function(){};}(window)); +sap.ui.predefine("sap/ui/core/Core", [],function(){return {};}); sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); } catch(oError) { if (oError.name != "Restart") { throw oError; } } +${SOURCE_MAPPING_URL}=bootstrap.js.map `; - t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optomization and " + + t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optimization and " + "should contain:" + " preload part from jquery.sap.global-dbg.js" + " raw part from myModule.js" + @@ -421,14 +527,26 @@ test("integration: createBundle UI5BundleFormat (non ui5loader.js)", async (t) = const pool = new ResourcePool(); pool.addResource({ name: "sap-ui-core.js", + getPath: () => "sap-ui-core.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(__global) {sap.ui.require = function(){};}(window));" }); pool.addResource({ name: "jquery.sap.global-dbg.js", + getPath: () => "jquery.sap.global-dbg.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([], function(){/* comment */ return {};});" }); pool.addResource({ name: "myModule.js", + getPath: () => "myModule.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(){window.mine = {};}());" }); @@ -458,12 +576,14 @@ jQuery.sap.registerPreloadedModules({ "name":"preload-section", "version":"2.0", "modules":{ - "jquery.sap.global-dbg.js":function(){sap.ui.define([], function(){/* comment */ return {};}); + "jquery.sap.global-dbg.js":function(){ +sap.ui.define([], function(){/* comment */ return {};}); } }}); //@ui5-bundle-raw-include myModule.js (function(){window.mine = {};}()); sap.ui.requireSync("sap-ui-core"); +${SOURCE_MAPPING_URL}=Component-preload.js.map `; t.deepEqual(oResult.content, expectedContent, "Ui5BundleFormat should start with registerPreloadedModules " + "and should contain:" + @@ -480,18 +600,26 @@ test("integration: createBundle (bootstrap bundle, UI5BundleFormat)", async (t) const pool = new ResourcePool(); pool.addResource({ name: "jquery.sap.global.js", - buffer: async () => "(function(__global) {sap.ui.require = function(){};}(window));" - }); - pool.addResource({ - name: "jquery.sap.global-dbg.js", + getPath: () => "jquery.sap.global.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(__global) {sap.ui.require = function(){};}(window));" }); pool.addResource({ name: "myRawModule.js", + getPath: () => "myRawModule.js", + string: function() { + return this.buffer(); + }, buffer: async () => "(function(){window.mine = {};}());" }); pool.addResource({ name: "sap/ui/core/Core.js", + getPath: () => "sap/ui/core/Core.js", + string: function() { + return this.buffer(); + }, buffer: async () => "sap.ui.define([],function(){return {};});" }); @@ -526,20 +654,21 @@ test("integration: createBundle (bootstrap bundle, UI5BundleFormat)", async (t) window["sap-ui-optimized"] = true; try { //@ui5-bundle-raw-include jquery.sap.global.js -(function(i){sap.ui.require=function(){}})(window); +(function(__global) {sap.ui.require = function(){};}(window)); //@ui5-bundle-raw-include myRawModule.js -(function(){window.mine={}})(); +(function(){window.mine = {};}()); jQuery.sap.declare('jquery.sap.global', false); jQuery.sap.declare('myRawModule', false); -sap.ui.predefine("sap/ui/core/Core",[],function(){return{}}); +sap.ui.predefine("sap/ui/core/Core", [],function(){return {};}); sap.ui.requireSync("sap/ui/core/Core"); // as this module contains the Core, we ensure that the Core has been booted sap.ui.getCore().boot && sap.ui.getCore().boot(); } catch(oError) { if (oError.name != "Restart") { throw oError; } } +${SOURCE_MAPPING_URL}=bootstrap.js.map `; - t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optomization and " + + t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat should start with optimization and " + "should contain:" + " preload part from jquery.sap.global-dbg.js" + " raw part from myModule.js" + @@ -550,7 +679,7 @@ if (oError.name != "Restart") { throw oError; } "bundle info subModules are correct"); }); -test("integration: createBundle with bundleInfo", async (t) => { +test.serial("integration: createBundle with bundleInfo", async (t) => { const logger = require("@ui5/logger"); const verboseLogStub = sinon.stub(); const warnLogStub = sinon.stub(); @@ -564,22 +693,42 @@ test("integration: createBundle with bundleInfo", async (t) => { const pool = new ResourcePool(); pool.addResource({ name: "a.js", + getPath: () => "a.js", + string: function() { + return this.buffer(); + }, buffer: async () => "function One(){return 1;}" }); pool.addResource({ name: "b.js", + getPath: () => "b.js", + string: function() { + return this.buffer(); + }, buffer: async () => "function Two(){return 2;}" }); pool.addResource({ name: "c.js", + getPath: () => "c.js", + string: function() { + return this.buffer(); + }, buffer: async () => "function Three(){return 3;}" }); pool.addResource({ name: "ui5loader.js", + getPath: () => "ui5loader.js", + string: function() { + return this.buffer(); + }, buffer: async () => "" }); pool.addResource({ name: "a.library", + getPath: () => "a.library", + string: function() { + return this.buffer(); + }, buffer: async () => ` @@ -619,7 +768,8 @@ test("integration: createBundle with bundleInfo", async (t) => { t.deepEqual(oResult.name, "library-preload.js"); const expectedContent = `//@ui5-bundle library-preload.js sap.ui.require.preload({ - "a.js":function(){function One(){return 1;} + "a.js":function(){ +function One(){return 1;} this.One=One; } },"preload-section"); @@ -628,6 +778,7 @@ sap.ui.loader.config({bundlesUI5:{ "my-custom-bundle":['b.js'], "my-other-custom-bundle.js":['c.js'] }}); +${SOURCE_MAPPING_URL}=library-preload.js.map `; t.deepEqual(oResult.content, expectedContent, "EVOBundleFormat " + "should contain:" + @@ -645,3 +796,1207 @@ sap.ui.loader.config({bundlesUI5:{ `The name must match the bundle filename (incl. extension such as '.js')` ]); }); + +test("integration: createBundle using predefine calls with source maps and a single, simple source", async (t) => { + const pool = new ResourcePool(); + + // jquery.sap.global-dbg.js: + // /* Some comment */ + // sap.ui.define([], function (){ + // console.log("Put me on a map!"); + // return {}; + // }); + + const originalSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "console", + "log" + ], + "mappings": "AACAA,IAAIC,GAAGC,OAAO,GAAI,WACjBC,QAAQC,IAAI,oBACZ,MAAO", + "file": "jquery.sap.global.js" + }; + pool.addResource({ + name: "jquery.sap.global.js.map", + getPath: () => "jquery.sap.global.js.map", + buffer: async () => JSON.stringify(originalSourceMap) + }); + pool.addResource({ + name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + buffer: async () => `sap.ui.define([],function(){console.log("Put me on a map!");return{}}); +${SOURCE_MAPPING_URL}=jquery.sap.global.js.map` + }); + + const bundleDefinition = { + name: `Component-preload.js`, + defaultFileTypes: [".js"], + sections: [{ + mode: "preload", + name: "preload-section", + filters: [ + "jquery.sap.global.js" + ] + }] + }; + + const builder = new Builder(pool); + const oResult = await builder.createBundle(bundleDefinition, { + usePredefineCalls: true, + optimize: false + }); + t.deepEqual(oResult.name, "Component-preload.js"); + const expectedContent = `//@ui5-bundle Component-preload.js +sap.ui.predefine("jquery.sap.global", [],function(){console.log("Put me on a map!");return{}}); +${SOURCE_MAPPING_URL}=Component-preload.js.map +`; + t.deepEqual(oResult.content, expectedContent, "Correct bundle content"); + t.deepEqual(oResult.bundleInfo.name, "Component-preload.js", "bundle info name is correct"); + t.deepEqual(oResult.bundleInfo.size, expectedContent.length, "bundle info size is correct"); + t.deepEqual(oResult.bundleInfo.subModules, + [ + "jquery.sap.global.js" + ], "bundle info subModules are correct"); + const indexMap = JSON.parse(oResult.sourceMap); + t.is(indexMap.sections.length, 1, "Bundle index source map contains one section"); + t.deepEqual(indexMap.sections[0].offset, { + line: 1, + column: 0 + }, "Section has correct offset"); + + const expectedSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "console", + "log" + ], + "mappings": "AACAA,IAAIC,GAAGC,+BAAO,GAAI,WACjBC,QAAQC,IAAI,oBACZ,MAAO", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[0].map, expectedSourceMap, "Section contains correct map"); +}); + +test("integration: createBundle using predefine calls with source maps and a single, multi-line source", async (t) => { + const pool = new ResourcePool(); + + // jquery.sap.global-dbg.js: + // /* Some comment */ + // sap. + // ui. + // define( + // [ + // ], function (){ + // console.log("Put me on a map!"); + // return {}; + // }); + + const originalSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "console", + "log" + ], + "mappings": "AACAA,IACAC,GACAC,OACA,GACG,WACFC,QAAQC,IAAI,oBACZ,MAAO", + "file": "jquery.sap.global.js" + }; + pool.addResource({ + name: "jquery.sap.global.js.map", + getPath: () => "jquery.sap.global.js.map", + buffer: async () => JSON.stringify(originalSourceMap) + }); + pool.addResource({ + name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + buffer: async () => `sap.ui.define([],function(){console.log("Put me on a map!");return{}}); +${SOURCE_MAPPING_URL}=jquery.sap.global.js.map` + }); + + const bundleDefinition = { + name: `Component-preload.js`, + defaultFileTypes: [".js"], + sections: [{ + mode: "preload", + name: "preload-section", + filters: [ + "jquery.sap.global.js" + ] + }] + }; + + const builder = new Builder(pool); + const oResult = await builder.createBundle(bundleDefinition, { + usePredefineCalls: true, + numberOfParts: 1, + decorateBootstrapModule: true, + optimize: false + }); + t.deepEqual(oResult.name, "Component-preload.js"); + const expectedContent = `//@ui5-bundle Component-preload.js +sap.ui.predefine("jquery.sap.global", [],function(){console.log("Put me on a map!");return{}}); +${SOURCE_MAPPING_URL}=Component-preload.js.map +`; + t.deepEqual(oResult.content, expectedContent, "Correct bundle content"); + t.deepEqual(oResult.bundleInfo.name, "Component-preload.js", "bundle info name is correct"); + t.deepEqual(oResult.bundleInfo.size, expectedContent.length, "bundle info size is correct"); + t.deepEqual(oResult.bundleInfo.subModules, + [ + "jquery.sap.global.js" + ], "bundle info subModules are correct"); + const indexMap = JSON.parse(oResult.sourceMap); + t.is(indexMap.sections.length, 1, "Bundle index source map contains one section"); + t.deepEqual(indexMap.sections[0].offset, { + line: 1, + column: 0 + }, "Section has correct offset"); + + const expectedSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "console", + "log" + ], + "mappings": "AACAA,IACAC,GACAC,+BACA,GACG,WACFC,QAAQC,IAAI,oBACZ,MAAO", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[0].map, expectedSourceMap, "Section contains correct map"); +}); + +test("integration: createBundle using predefine calls with source maps and a single source with non-executable code in 1st line", async (t) => { + const pool = new ResourcePool(); + + // jquery.sap.global-dbg.js: + // /*! + // * OpenUI5 + // * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + // * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + // */ + // /*global XMLHttpRequest, localStorage, alert, document */ + // /** + // * @namespace jQuery + // * @public + // */ + // sap.ui.define([ + // // new sap/base/* modules + // "sap/base/util/now", "sap/base/util/Version", "sap/base/assert", "sap/base/Log" + // ], function(now, Version, assert, Log) { + // return now; + // }); + + const originalSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "now", + "Version", + "assert", + "Log" + ], + "mappings": ";;;;;AAYAA,IAAIC,GAAGC,OAAO,CAEb,oBAAqB,wBAAyB,kBAAmB,gBAC/D,SAASC,EAAKC,EAASC,EAAQC,GACjC,OAAOH", + "file": "jquery.sap.global.js" + }; + pool.addResource({ + name: "jquery.sap.global.js.map", + getPath: () => "jquery.sap.global.js.map", + buffer: async () => JSON.stringify(originalSourceMap) + }); + pool.addResource({ + name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + buffer: async () => `/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.define(["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +${SOURCE_MAPPING_URL}=jquery.sap.global.js.map` + }); + + const bundleDefinition = { + name: `Component-preload.js`, + defaultFileTypes: [".js"], + sections: [{ + mode: "preload", + name: "preload-section", + filters: [ + "jquery.sap.global.js" + ] + }] + }; + + const builder = new Builder(pool); + const oResult = await builder.createBundle(bundleDefinition, { + usePredefineCalls: true, + numberOfParts: 1, + decorateBootstrapModule: true, + optimize: false + }); + t.deepEqual(oResult.name, "Component-preload.js"); + const expectedContent = `//@ui5-bundle Component-preload.js +/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.predefine("jquery.sap.global", ["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +${SOURCE_MAPPING_URL}=Component-preload.js.map +`; + t.deepEqual(oResult.content, expectedContent, "Correct bundle content"); + t.deepEqual(oResult.bundleInfo.name, "Component-preload.js", "bundle info name is correct"); + t.deepEqual(oResult.bundleInfo.size, expectedContent.length, "bundle info size is correct"); + t.deepEqual(oResult.bundleInfo.subModules, + [ + "jquery.sap.global.js" + ], "bundle info subModules are correct"); + const indexMap = JSON.parse(oResult.sourceMap); + t.is(indexMap.sections.length, 1, "Bundle index source map contains one section"); + t.deepEqual(indexMap.sections[0].offset, { + line: 1, + column: 0 + }, "Section has correct offset"); + + const expectedSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "now", + "Version", + "assert", + "Log" + ], + "mappings": "AAAA;;;;;AAYAA,IAAIC,GAAGC,+BAAO,CAEb,oBAAqB,wBAAyB,kBAAmB,gBAC/D,SAASC,EAAKC,EAASC,EAAQC,GACjC,OAAOH", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[0].map, expectedSourceMap, "Section contains correct map"); +}); + +test("integration: createBundle using predefine calls with source maps and multiple sources", async (t) => { + const pool = new ResourcePool(); + + // jquery.sap.global-dbg.js: + // /*! + // * OpenUI5 + // * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + // * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + // */ + // /*global XMLHttpRequest, localStorage, alert, document */ + // /** + // * @namespace jQuery + // * @public + // */ + // sap.ui.define([ + // // new sap/base/* modules + // "sap/base/util/now", "sap/base/util/Version", "sap/base/assert", "sap/base/Log" + // ], function(now, Version, assert, Log) { + // return now; + // }); + + const originalGlobalSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "now", + "Version", + "assert", + "Log" + ], + "mappings": ";;;;;AAYAA,IAAIC,GAAGC,OAAO,CAEb,oBAAqB,wBAAyB,kBAAmB,gBAC/D,SAASC,EAAKC,EAASC,EAAQC,GACjC,OAAOH", + "file": "jquery.sap.global.js" + }; + pool.addResource({ + name: "jquery.sap.global.js.map", + getPath: () => "jquery.sap.global.js.map", + buffer: async () => JSON.stringify(originalGlobalSourceMap) + }); + pool.addResource({ + name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + buffer: async () => `/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.define(["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +${SOURCE_MAPPING_URL}=jquery.sap.global.js.map` + }); + + // jquery.sap.dom-dbg.js: + // /*! + // * OpenUI5 + // * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + // * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + // */ + // // Provides functionality related to DOM analysis and manipulation which is not provided by jQuery itself. + // sap.ui.define([ + // 'jquery.sap.global', 'sap/ui/dom/containsOrEquals', + // 'sap/ui/core/syncStyleClass', 'sap/ui/dom/getOwnerWindow', 'sap/ui/dom/getScrollbarSize', + // 'sap/ui/dom/denormalizeScrollLeftRTL', 'sap/ui/dom/denormalizeScrollBeginRTL', + // 'sap/ui/dom/units/Rem', 'sap/ui/dom/jquery/Aria', + // 'sap/ui/dom/jquery/Selection', 'sap/ui/dom/jquery/zIndex', 'sap/ui/dom/jquery/parentByAttribute', + // 'sap/ui/dom/jquery/cursorPos', 'sap/ui/dom/jquery/selectText', 'sap/ui/dom/jquery/getSelectedText', + // 'sap/ui/dom/jquery/rect', 'sap/ui/dom/jquery/rectContains', 'sap/ui/dom/jquery/Focusable', + // 'sap/ui/dom/jquery/hasTabIndex', 'sap/ui/dom/jquery/scrollLeftRTL', 'sap/ui/dom/jquery/scrollRightRTL', 'sap/ui/dom/jquery/Selectors' + // ], function(jQuery, domContainsOrEquals, fnSyncStyleClass, domGetOwnerWindow, + // domGetScrollbarSize, domDenormalizeScrollLeftRTL, domDenormalizeScrollBeginRTL, domUnitsRem + // /* + // jqueryAria, + // jquerySelection, + // jqueryzIndex, + // jqueryParentByAttribute, + // jqueryCursorPos, + // jquerySelectText, + // jqueryGetSelectedText, + // jqueryRect, + // jqueryRectContains, + // jqueryFocusable, + // jqueryHasTabIndex, + // jqueryScrollLeftRTL, + // jqueryScrollRightRTL, + // jquerySelectors*/ + // ) { + // "use strict"; + // /** + // * Shortcut for document.getElementById(). + // * + // * @param {string} sId The id of the DOM element to return + // * @param {Window} [oWindow=window] The window (optional) + // * @return {Element} The DOMNode identified by the given sId + // * @public + // * @since 0.9.0 + // * @deprecated since 1.58 use document.getElementById instead + // */ + // jQuery.sap.domById = function domById(sId, oWindow) { + // return sId ? (oWindow || window).document.getElementById(sId) : null; + // }; + // return jQuery; + // }); + + const originalDomSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.dom-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "jQuery", + "domContainsOrEquals", + "fnSyncStyleClass", + "domGetOwnerWindow", + "domGetScrollbarSize", + "domDenormalizeScrollLeftRTL", + "domDenormalizeScrollBeginRTL", + "domUnitsRem", + "domById", + "sId", + "oWindow", + "window", + "document", + "getElementById" + ], + "mappings": ";;;;;AAOAA,IAAIC,GAAGC,OAAO,CACb,oBAAqB,8BACrB,6BAA8B,4BAA6B,8BAC3D,sCAAuC,uCACvC,uBAAwB,yBACxB,8BAA+B,2BAA4B,sCAC3D,8BAA+B,+BAAgC,oCAC/D,yBAA0B,iCAAkC,8BAC5D,gCAAiC,kCAAmC,mCAAoC,+BACtG,SAASC,OAAQC,EAAqBC,EAAkBC,EAC1DC,EAAqBC,EAA6BC,EAA8BC,GAiBhF,aAYAP,OAAOH,IAAIW,QAAU,SAASA,EAAQC,EAAKC,GAC1C,OAAOD,GAAOC,GAAWC,QAAQC,SAASC,eAAeJ,GAAO,MAGjE,OAAOT", + "file": "jquery.sap.dom.js" + }; + pool.addResource({ + name: "jquery.sap.dom.js.map", + getPath: () => "jquery.sap.dom.js.map", + buffer: async () => JSON.stringify(originalDomSourceMap) + }); + pool.addResource({ + name: "jquery.sap.dom.js", + getPath: () => "jquery.sap.dom.js", + buffer: async () => `/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.define(["jquery.sap.global","sap/ui/dom/containsOrEquals","sap/ui/core/syncStyleClass","sap/ui/dom/getOwnerWindow","sap/ui/dom/getScrollbarSize","sap/ui/dom/denormalizeScrollLeftRTL","sap/ui/dom/denormalizeScrollBeginRTL","sap/ui/dom/units/Rem","sap/ui/dom/jquery/Aria","sap/ui/dom/jquery/Selection","sap/ui/dom/jquery/zIndex","sap/ui/dom/jquery/parentByAttribute","sap/ui/dom/jquery/cursorPos","sap/ui/dom/jquery/selectText","sap/ui/dom/jquery/getSelectedText","sap/ui/dom/jquery/rect","sap/ui/dom/jquery/rectContains","sap/ui/dom/jquery/Focusable","sap/ui/dom/jquery/hasTabIndex","sap/ui/dom/jquery/scrollLeftRTL","sap/ui/dom/jquery/scrollRightRTL","sap/ui/dom/jquery/Selectors"],function(jQuery,e,u,o,s,i,r,a){"use strict";jQuery.sap.domById=function e(u,o){return u?(o||window).document.getElementById(u):null};return jQuery}); +${SOURCE_MAPPING_URL}=jquery.sap.dom.js.map` + }); + + const bundleDefinition = { + name: `Component-preload.js`, + defaultFileTypes: [".js"], + sections: [{ + mode: "preload", + name: "preload-section", + filters: [ + "jquery.sap.global.js", + "jquery.sap.dom.js" + ] + }] + }; + + const builder = new Builder(pool); + const oResult = await builder.createBundle(bundleDefinition, { + usePredefineCalls: true, + numberOfParts: 1, + decorateBootstrapModule: true, + optimize: false + }); + t.deepEqual(oResult.name, "Component-preload.js"); + const expectedContent = `//@ui5-bundle Component-preload.js +/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.predefine("jquery.sap.dom", ["jquery.sap.global","sap/ui/dom/containsOrEquals","sap/ui/core/syncStyleClass","sap/ui/dom/getOwnerWindow","sap/ui/dom/getScrollbarSize","sap/ui/dom/denormalizeScrollLeftRTL","sap/ui/dom/denormalizeScrollBeginRTL","sap/ui/dom/units/Rem","sap/ui/dom/jquery/Aria","sap/ui/dom/jquery/Selection","sap/ui/dom/jquery/zIndex","sap/ui/dom/jquery/parentByAttribute","sap/ui/dom/jquery/cursorPos","sap/ui/dom/jquery/selectText","sap/ui/dom/jquery/getSelectedText","sap/ui/dom/jquery/rect","sap/ui/dom/jquery/rectContains","sap/ui/dom/jquery/Focusable","sap/ui/dom/jquery/hasTabIndex","sap/ui/dom/jquery/scrollLeftRTL","sap/ui/dom/jquery/scrollRightRTL","sap/ui/dom/jquery/Selectors"],function(jQuery,e,u,o,s,i,r,a){"use strict";jQuery.sap.domById=function e(u,o){return u?(o||window).document.getElementById(u):null};return jQuery}); +/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.predefine("jquery.sap.global", ["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +${SOURCE_MAPPING_URL}=Component-preload.js.map +`; + t.deepEqual(oResult.content, expectedContent, "Correct bundle content"); + t.deepEqual(oResult.bundleInfo.name, "Component-preload.js", "bundle info name is correct"); + t.deepEqual(oResult.bundleInfo.size, expectedContent.length, "bundle info size is correct"); + t.deepEqual(oResult.bundleInfo.subModules, + [ + "jquery.sap.dom.js", + "jquery.sap.global.js" + ], "bundle info subModules are correct"); + const indexMap = JSON.parse(oResult.sourceMap); + t.is(indexMap.sections.length, 2, "Bundle index source map contains two sections"); + t.deepEqual(indexMap.sections[0].offset, { + line: 1, + column: 0 + }, "Section one has correct offset"); + + const expectedSourceMap1 = { + "version": 3, + "sources": + [ + "jquery.sap.dom-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "jQuery", + "domContainsOrEquals", + "fnSyncStyleClass", + "domGetOwnerWindow", + "domGetScrollbarSize", + "domDenormalizeScrollLeftRTL", + "domDenormalizeScrollBeginRTL", + "domUnitsRem", + "domById", + "sId", + "oWindow", + "window", + "document", + "getElementById" + ], + "mappings": "AAAA;;;;;AAOAA,IAAIC,GAAGC,4BAAO,CACb,oBAAqB,8BACrB,6BAA8B,4BAA6B,8BAC3D,sCAAuC,uCACvC,uBAAwB,yBACxB,8BAA+B,2BAA4B,sCAC3D,8BAA+B,+BAAgC,oCAC/D,yBAA0B,iCAAkC,8BAC5D,gCAAiC,kCAAmC,mCAAoC,+BACtG,SAASC,OAAQC,EAAqBC,EAAkBC,EAC1DC,EAAqBC,EAA6BC,EAA8BC,GAiBhF,aAYAP,OAAOH,IAAIW,QAAU,SAASA,EAAQC,EAAKC,GAC1C,OAAOD,GAAOC,GAAWC,QAAQC,SAASC,eAAeJ,GAAO,MAGjE,OAAOT", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[0].map, expectedSourceMap1, "Section one contains correct map"); + t.deepEqual(indexMap.sections[1].offset, { + line: 7, + column: 0 + }, "Section two has correct offset"); + + const expectedSourceMap2 = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "now", + "Version", + "assert", + "Log" + ], + "mappings": "AAAA;;;;;AAYAA,IAAIC,GAAGC,+BAAO,CAEb,oBAAqB,wBAAyB,kBAAmB,gBAC/D,SAASC,EAAKC,EAASC,EAAQC,GACjC,OAAOH", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[1].map, expectedSourceMap2, "Section two contains correct map"); +}); + +test("integration: createBundle using predefine calls with source maps and multiple sources 2", async (t) => { + const pool = new ResourcePool(); + + // jquery.sap.global-dbg.js: + // /*! + // * OpenUI5 + // * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + // * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + // */ + // /*global XMLHttpRequest, localStorage, alert, document */ + // /** + // * @namespace jQuery + // * @public + // */ + // sap.ui.define([ + // // new sap/base/* modules + // "sap/base/util/now", "sap/base/util/Version", "sap/base/assert", "sap/base/Log" + // ], function(now, Version, assert, Log) { + // return now; + // }); + + const originalGlobalSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "now", + "Version", + "assert", + "Log" + ], + "mappings": ";;;;;AAYAA,IAAIC,GAAGC,OAAO,CAEb,oBAAqB,wBAAyB,kBAAmB,gBAC/D,SAASC,EAAKC,EAASC,EAAQC,GACjC,OAAOH", + "file": "jquery.sap.global.js" + }; + pool.addResource({ + name: "jquery.sap.global.js.map", + getPath: () => "jquery.sap.global.js.map", + buffer: async () => JSON.stringify(originalGlobalSourceMap) + }); + pool.addResource({ + name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + buffer: async () => `/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.define(["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +${SOURCE_MAPPING_URL}=jquery.sap.global.js.map` + }); + + // No source map for "jquery.sap.xom.js" => Transitive source map will be created + pool.addResource({ + name: "jquery.sap.xom.js", + getPath: () => "jquery.sap.xom.js", + buffer: async () => `/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.define(function() { + console.log("Test"); +}); +` + }); + + const bundleDefinition = { + name: `Component-preload.js`, + defaultFileTypes: [".js"], + sections: [{ + mode: "preload", + name: "preload-section", + filters: [ + "jquery.sap.global.js", + "jquery.sap.xom.js" + ] + }] + }; + + const builder = new Builder(pool); + const oResult = await builder.createBundle(bundleDefinition, { + usePredefineCalls: true, + numberOfParts: 1, + decorateBootstrapModule: true, + optimize: false + }); + t.deepEqual(oResult.name, "Component-preload.js"); + const expectedContent = `//@ui5-bundle Component-preload.js +/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.predefine("jquery.sap.global", ["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.predefine("jquery.sap.xom", function() { + console.log("Test"); +}); +${SOURCE_MAPPING_URL}=Component-preload.js.map +`; + t.deepEqual(oResult.content, expectedContent, "Correct bundle content"); + t.deepEqual(oResult.bundleInfo.name, "Component-preload.js", "bundle info name is correct"); + t.deepEqual(oResult.bundleInfo.size, expectedContent.length, "bundle info size is correct"); + t.deepEqual(oResult.bundleInfo.subModules, + [ + "jquery.sap.global.js", + "jquery.sap.xom.js", + ], "bundle info subModules are correct"); + const indexMap = JSON.parse(oResult.sourceMap); + t.is(indexMap.sections.length, 2, "Bundle index source map contains two sections"); + t.deepEqual(indexMap.sections[0].offset, { + line: 1, + column: 0 + }, "Section one has correct offset"); + + const expectedSourceMap1 = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "now", + "Version", + "assert", + "Log" + ], + "mappings": "AAAA;;;;;AAYAA,IAAIC,GAAGC,+BAAO,CAEb,oBAAqB,wBAAyB,kBAAmB,gBAC/D,SAASC,EAAKC,EAASC,EAAQC,GACjC,OAAOH", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[0].map, expectedSourceMap1, "Section one contains correct map"); + t.deepEqual(indexMap.sections[1].offset, { + line: 7, + column: 0 + }, "Section two has correct offset"); + + const expectedSourceMap2 = { // Transitive source map + "version": 3, + "sources": + [ + "jquery.sap.xom.js" + ], + "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[1].map, expectedSourceMap2, "Section two contains correct map"); +}); + +test("integration: createBundle using predefine calls with inline source maps and a single source", async (t) => { + const pool = new ResourcePool(); + + // jquery.sap.global-dbg.js: + // /*! + // * OpenUI5 + // * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + // * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + // */ + // /*global XMLHttpRequest, localStorage, alert, document */ + // /** + // * @namespace jQuery + // * @public + // */ + // sap.ui.define([ + // // new sap/base/* modules + // "sap/base/util/now", "sap/base/util/Version", "sap/base/assert", "sap/base/Log" + // ], function(now, Version, assert, Log) { + // return now; + // }); + + // Source map should be identical to "single source" test above + pool.addResource({ + name: "jquery.sap.global.js", + getPath: () => "jquery.sap.global.js", + buffer: async () => `/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.define(["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +${SOURCE_MAPPING_URL}=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5zYXAuZ2xvYmFsLWRiZy5qcyJdLCJuYW1lcyI6WyJzYXAiLCJ1aSIsImRlZmluZSIsIm5vdyIsIlZlcnNpb24iLCJhc3NlcnQiLCJMb2ciXSwibWFwcGluZ3MiOiI7Ozs7O0FBWUFBLElBQUlDLEdBQUdDLE9BQU8sQ0FFYixvQkFBcUIsd0JBQXlCLGtCQUFtQixnQkFDL0QsU0FBU0MsRUFBS0MsRUFBU0MsRUFBUUMsR0FDakMsT0FBT0giLCJmaWxlIjoianF1ZXJ5LnNhcC5nbG9iYWwuanMifQ==` + }); + + const bundleDefinition = { + name: `Component-preload.js`, + defaultFileTypes: [".js"], + sections: [{ + mode: "preload", + name: "preload-section", + filters: [ + "jquery.sap.global.js" + ] + }] + }; + + const builder = new Builder(pool); + const oResult = await builder.createBundle(bundleDefinition, { + usePredefineCalls: true, + numberOfParts: 1, + decorateBootstrapModule: true, + optimize: false + }); + t.deepEqual(oResult.name, "Component-preload.js"); + const expectedContent = `//@ui5-bundle Component-preload.js +/*! + * OpenUI5 + * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. + * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. + */ +sap.ui.predefine("jquery.sap.global", ["sap/base/util/now","sap/base/util/Version","sap/base/assert","sap/base/Log"],function(s,a,e,i){return s}); +${SOURCE_MAPPING_URL}=Component-preload.js.map +`; + t.deepEqual(oResult.content, expectedContent, "Correct bundle content"); + t.deepEqual(oResult.bundleInfo.name, "Component-preload.js", "bundle info name is correct"); + t.deepEqual(oResult.bundleInfo.size, expectedContent.length, "bundle info size is correct"); + t.deepEqual(oResult.bundleInfo.subModules, + [ + "jquery.sap.global.js" + ], "bundle info subModules are correct"); + const indexMap = JSON.parse(oResult.sourceMap); + t.is(indexMap.sections.length, 1, "Bundle index source map contains one section"); + t.deepEqual(indexMap.sections[0].offset, { + line: 1, + column: 0 + }, "Section has correct offset"); + + const expectedSourceMap = { + "version": 3, + "sources": + [ + "jquery.sap.global-dbg.js" + ], + "names": + [ + "sap", + "ui", + "define", + "now", + "Version", + "assert", + "Log" + ], + "mappings": "AAAA;;;;;AAYAA,IAAIC,GAAGC,+BAAO,CAEb,oBAAqB,wBAAyB,kBAAmB,gBAC/D,SAASC,EAAKC,EAASC,EAAQC,GACjC,OAAOH", + "sourceRoot": "" + }; + t.deepEqual(indexMap.sections[0].map, expectedSourceMap, "Section contains correct map"); +}); + +test("rewriteDefine (without moduleSourceMap)", async (t) => { + const {rewriteDefine} = Builder.__localFunctions__; + + const {moduleContent, moduleSourceMap} = await rewriteDefine({ + moduleName: "my/test/module.js", + moduleContent: "sap.ui.define([],(()=>1));", + moduleSourceMap: undefined + }); + + t.is(moduleContent, `sap.ui.predefine("my/test/module", [],(()=>1));`); + t.is(moduleSourceMap, undefined); +}); + +test("rewriteDefine (with moduleSourceMap)", async (t) => { + const {rewriteDefine} = Builder.__localFunctions__; + const {encode: encodeMappings, decode: decodeMappings} = require("sourcemap-codec"); + + const inputMappings = [ + [ + [ + 0, 0, 0, 0, 0 + ], + [ + 4, 0, 0, 4, 1 + ], + [ + 7, 0, 0, 7, 2 + ], + [ + 14, 0, 0, 14 + ], + [ + 18, 0, 0, 18 + ], + [ + 22, 0, 1, 8 + ] + ] + ]; + + const {moduleContent, moduleSourceMap} = await rewriteDefine({ + moduleName: "my/test/module.js", + moduleContent: "sap.ui.define([],(()=>1));", + moduleSourceMap: { + "version": 3, + "file": "module.js", + "sources": ["my/test/module-dbg.js"], + "names": ["sap", "ui", "define"], + "mappings": encodeMappings(inputMappings) + } + }); + + const expectedMappings = JSON.parse(JSON.stringify(inputMappings)); + const expectedColumnDiff = `"my/test/module", `.length + "pre".length; + expectedMappings[0][3][0] += expectedColumnDiff; + expectedMappings[0][4][0] += expectedColumnDiff; + expectedMappings[0][5][0] += expectedColumnDiff; + + t.is(moduleContent, `sap.ui.predefine("my/test/module", [],(()=>1));`); + t.deepEqual(decodeMappings(moduleSourceMap.mappings), expectedMappings); + t.deepEqual(moduleSourceMap, { + "version": 3, + "sources": ["my/test/module-dbg.js"], + "names": ["sap", "ui", "define"], + "mappings": encodeMappings(expectedMappings) + }); +}); + +test("rewriteDefine (with empty moduleSourceMap)", async (t) => { + const {rewriteDefine} = Builder.__localFunctions__; + const {encode: encodeMappings, decode: decodeMappings} = require("sourcemap-codec"); + + const inputMappings = [ + [ + [ + 0, 0, 0, 0 + ] + ] + ]; + + const {moduleContent, moduleSourceMap} = await rewriteDefine({ + moduleName: "my/test/module.js", + moduleContent: `sap +.ui.define([], () => { + return 1; +});`, + moduleSourceMap: { + "version": 3, + "sources": ["my/test/module.js"], + "mappings": encodeMappings(inputMappings) + } + }); + + const expectedMappings = JSON.parse(JSON.stringify(inputMappings)); + + t.is(moduleContent, `sap +.ui.predefine("my/test/module", [], () => { + return 1; +});`); + t.deepEqual(decodeMappings(moduleSourceMap.mappings), expectedMappings); + t.deepEqual(moduleSourceMap, { + "version": 3, + "sources": ["my/test/module.js"], + "mappings": encodeMappings(expectedMappings) + }); +}); + +test("getSourceMapForModule: Source map resource named after module resource (no sourceMappingURL)", async (t) => { + const originalSourceMap = { + "version": 3, + "sources": + [ + "module-dbg.js" + ], + "names": + [ + ], + "mappings": "XXXX", + "file": "module.js" + }; + const pool = new ResourcePool(); + pool.addResource({ + name: "my/test/module.js.map", + getPath: () => "my/test/module.js.map", + string: function() { + return this.buffer(); + }, + buffer: async () => JSON.stringify(originalSourceMap) + }); + + const builder = new Builder(pool); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module.js", + moduleContent: `// Some content +` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, originalSourceMap, "Correct source map retrieved via relative URL"); +}); +test("getSourceMapForModule: No source map available for debug variant", async (t) => { + const originalSourceMap = { + "version": 3, + "sources": + [ + "module-dbg.js" + ], + "names": + [ + ], + "mappings": "XXXX", + "file": "module.js" + }; + const pool = new ResourcePool(); + pool.addResource({ + name: "my/test/module.js.map", + getPath: () => "my/test/module.js.map", + string: function() { + return this.buffer(); + }, + buffer: async () => JSON.stringify(originalSourceMap) + }); + + const builder = new Builder(pool); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module-dbg.js", + moduleContent: `// Some content +` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, { + mappings: "AAAA;AACA", + sources: [ + "module-dbg.js", + ], + version: 3, + }, "Expected transitive source map has been generated"); +}); + +test("getSourceMapForModule: Relative URL", async (t) => { + const originalSourceMap = { + "version": 3, + "sources": + [ + "module-dbg.js" + ], + "names": + [ + ], + "mappings": "XXXX", + "file": "module.js" + }; + const pool = new ResourcePool(); + pool.addResource({ + name: "my/test/module.js.map", + getPath: () => "my/test/module.js.map", + string: function() { + return this.buffer(); + }, + buffer: async () => JSON.stringify(originalSourceMap) + }); + + const builder = new Builder(pool); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module.js", + moduleContent: `// Some content +${SOURCE_MAPPING_URL}=module.js.map` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, originalSourceMap, "Correct source map retrieved via relative URL"); +}); + +test("getSourceMapForModule: Relative URL to resource that cannot be found", async (t) => { + const pool = new ResourcePool(); + + const builder = new Builder(pool); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module.js", + moduleContent: `// Some content +${SOURCE_MAPPING_URL}=module.js.map` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, { + mappings: "AAAA;AACA", + sources: [ + "module.js", + ], + version: 3, + }, "Expected transitive source map has been generated"); +}); + +test("getSourceMapForModule: Full URL (not supported)", async (t) => { + const pool = new ResourcePool(); + const builder = new Builder(pool); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module.js", + moduleContent: `// Some content +${SOURCE_MAPPING_URL}=https://ui5.sap.com/resources/my/test/module.js.map` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, { + mappings: "AAAA;AACA", + sources: [ + "module.js", + ], + version: 3, + }, "Expected transitive source map has been generated"); +}); + +test("getSourceMapForModule: Absolute URL (not supported)", async (t) => { + const pool = new ResourcePool(); + const builder = new Builder(pool); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module.js", + moduleContent: `// Some content +${SOURCE_MAPPING_URL}=/resources/my/test/module.js.map` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, { + mappings: "AAAA;AACA", + sources: [ + "module.js", + ], + version: 3, + }, "Expected transitive source map has been generated"); +}); + +test("getSourceMapForModule: Data URI", async (t) => { + const pool = new ResourcePool(); + const builder = new Builder(pool); + const originalSourceMap = { + "version": 3, + "sources": + [ + "module-dbg.js" + ], + "names": + [ + ], + "mappings": "XXXX", + "file": "module.js" + }; + const encodedSourceMap = Buffer.from(JSON.stringify(originalSourceMap)).toString("base64"); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module.js", + moduleContent: `// Some content +${SOURCE_MAPPING_URL}=data:application/json;charset=utf-8;base64,${encodedSourceMap}` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, originalSourceMap, "Encoded source map has been parsed correctly"); +}); + +test("getSourceMapForModule: Data URI with incorrect encoding", async (t) => { + const pool = new ResourcePool(); + const builder = new Builder(pool); + const {moduleContent, moduleSourceMap} = await builder.getSourceMapForModule({ + moduleName: "my/test/module", + resourcePath: "/resources/my/test/module.js", + moduleContent: `// Some content +${SOURCE_MAPPING_URL}=data:application/pony;charset=utf-8;base64,AAAA` + }); + + t.is(moduleContent, "// Some content\n", "Source map URL has been removed from module content"); + t.deepEqual(moduleSourceMap, { + mappings: "AAAA;AACA", + sources: [ + "module.js", + ], + version: 3, + }, "Expected transitive source map has been generated"); +}); + +test("createTransientSourceMap: includeContent=false", async (t) => { + const {createTransientSourceMap} = Builder.__localFunctions__; + + const res = createTransientSourceMap({ + moduleName: "my/test/module.js", + moduleContent: `Some content +With +Multiple +Lines`, + includeContent: false + }); + t.deepEqual(res, { + "version": 3, + "sources": ["my/test/module.js"], + "mappings": "AAAA;AACA;AACA;AACA" + }, "Expected source map has been created"); +}); + +test("createTransientSourceMap: includeContent=true", async (t) => { + const {createTransientSourceMap} = Builder.__localFunctions__; + + const moduleContent = `Some content +With +Multiple +Lines`; + const res = createTransientSourceMap({ + moduleName: "my/test/module.js", + moduleContent, + includeContent: true + }); + t.deepEqual(res, { + version: 3, + sources: ["my/test/module.js"], + mappings: "AAAA;AACA;AACA;AACA", + sourcesContent: [moduleContent] + }, "Expected source map has been created"); +}); diff --git a/test/lib/lbt/graph/topologicalSort.js b/test/lib/lbt/graph/topologicalSort.js index 0cc6cf775..3b6cfd890 100644 --- a/test/lib/lbt/graph/topologicalSort.js +++ b/test/lib/lbt/graph/topologicalSort.js @@ -30,10 +30,17 @@ test("topologicalSort", async (t) => { t.deepEqual(topologicalSortResult, ["mydep", "myroot"]); }); - test("cyclic dependencies", async (t) => { const pool = createMockPool({"third": "mydep", "mydep": "third"}); const roots = ["myroot", "mydep", "third"]; const error = await t.throwsAsync(topologicalSort(pool, roots)); t.deepEqual(error.message, "failed to resolve cyclic dependencies: mydep,third"); }); + +test("no dependencies", async (t) => { + const pool = createMockPool({}); + const roots = ["module4", "module2", "module3", "module1"]; + const topologicalSortResult = await topologicalSort(pool, roots); + // Modules should not be sorted by any means as no dependencies are defined + t.deepEqual(topologicalSortResult, ["module4", "module2", "module3", "module1"]); +}); diff --git a/test/lib/lbt/resources/LocatorResourcePool.js b/test/lib/lbt/resources/LocatorResourcePool.js index f23e16bc4..8da25b42d 100644 --- a/test/lib/lbt/resources/LocatorResourcePool.js +++ b/test/lib/lbt/resources/LocatorResourcePool.js @@ -1,8 +1,24 @@ const test = require("ava"); const LocatorResourcePool = require("../../../../lib/lbt/resources/LocatorResourcePool"); +const Resource = require("@ui5/fs").Resource; test("getIgnoreMissingModules", async (t) => { const resourcePool = new LocatorResourcePool({ignoreMissingModules: true}); t.true(resourcePool.getIgnoreMissingModules(), "ignoreMissingModules is true"); }); +test("wait for resources to finish prepare", async (t) => { + let promiseResolved = false; + const promise = new Promise((resolve) => { + setTimeout(() => { + promiseResolved = true; + resolve(); + }, 10); + }); + const resourcePool = new LocatorResourcePool(); + resourcePool.addResource = () => promise; + return resourcePool.prepare([new Resource({path: "mypath"})]).then(() => { + t.true(promiseResolved, "addResources promise is resolved before prepare promise is resolved"); + }); +}); + diff --git a/test/lib/lbt/resources/Resource.js b/test/lib/lbt/resources/Resource.js index b6e0670ce..85a0e767b 100644 --- a/test/lib/lbt/resources/Resource.js +++ b/test/lib/lbt/resources/Resource.js @@ -5,7 +5,7 @@ const mock = require("mock-require"); let Resource = require("../../../../lib/lbt/resources/Resource"); test.serial("Resource: buffer", async (t) => { - const readFileStub = sinon.stub().callsArg(1); + const readFileStub = sinon.stub().callsArgWith(1, null, Buffer.from("content")); mock("graceful-fs", { readFile: readFileStub }); @@ -14,12 +14,32 @@ test.serial("Resource: buffer", async (t) => { // Re-require tested module Resource = mock.reRequire("../../../../lib/lbt/resources/Resource"); const resource = new Resource({}, "name", "file"); - await resource.buffer(); + const res = await resource.buffer(); mock.stop("graceful-fs"); t.is(readFileStub.callCount, 1, "called once"); t.is(readFileStub.getCall(0).args[0], "file", "called with file parameter"); + t.is(res.toString(), "content", "File content returned correctly"); +}); + +test.serial("Resource: string", async (t) => { + const readFileStub = sinon.stub().callsArgWith(1, null, Buffer.from("content")); + mock("graceful-fs", { + readFile: readFileStub + }); + mock.reRequire("graceful-fs"); + + // Re-require tested module + Resource = mock.reRequire("../../../../lib/lbt/resources/Resource"); + const resource = new Resource({}, "name", "file"); + const res = await resource.string(); + + mock.stop("graceful-fs"); + + t.is(readFileStub.callCount, 1, "called once"); + t.is(readFileStub.getCall(0).args[0], "file", "called with file parameter"); + t.is(res, "content", "File content returned correctly"); }); test.serial("Resource: constructor", async (t) => { diff --git a/test/lib/lbt/resources/ResourceCollector.js b/test/lib/lbt/resources/ResourceCollector.js index 102377612..5f0bd6204 100644 --- a/test/lib/lbt/resources/ResourceCollector.js +++ b/test/lib/lbt/resources/ResourceCollector.js @@ -95,7 +95,7 @@ test.serial("visitResource: ensure proper matching of indicator files", async (t t.is(resourceCollector.components.size, 0, "No prefixes should be added"); }); -test.serial("groupResourcesByComponents: debugBundles", async (t) => { +test.serial("groupResourcesByComponents: external resources", async (t) => { const resourceCollector = new ResourceCollector(); resourceCollector.setExternalResources({ "testcomp": ["my/file.js"] @@ -149,25 +149,60 @@ test.serial("determineResourceDetails: view.xml", async (t) => { t.is(enrichWithDependencyInfoStub.getCall(0).args[0].name, "mylib/my.view.xml", "is called with view"); }); -test.serial("determineResourceDetails: Debug bundle", async (t) => { +test.serial("determineResourceDetails: Debug bundle (without non-debug variant)", async (t) => { const resourceCollector = new ResourceCollector(); const enrichWithDependencyInfoStub = sinon.stub(resourceCollector, "enrichWithDependencyInfo").resolves(); await resourceCollector.visitResource({getPath: () => "/resources/MyBundle-dbg.js", getSize: async () => 13}); await resourceCollector.determineResourceDetails({ - debugBundles: ["MyBundle-dbg.js"] + debugResources: ["**/*-dbg.js"], // MyBundle-dbg.js should be marked as "isDebug" }); + t.is(enrichWithDependencyInfoStub.callCount, 1, "enrichWithDependencyInfo is called once"); t.is(enrichWithDependencyInfoStub.getCall(0).args[0].name, "MyBundle-dbg.js", "enrichWithDependencyInfo is called with debug bundle"); }); +test.serial("determineResourceDetails: Debug bundle (with non-debug variant)", async (t) => { + const resourceCollector = new ResourceCollector(); + + const enrichWithDependencyInfoStub = sinon.stub(resourceCollector, "enrichWithDependencyInfo") + .onFirstCall().callsFake(async (resourceInfo) => { + resourceInfo.included = new Set(["SomeModule.js"]); + resourceInfo.required = new Set(["Boot.js"]); + }) + .onSecondCall().callsFake(async (resourceInfo) => { + resourceInfo.required = new Set(["Boot.js"]); + }); + await resourceCollector.visitResource({getPath: () => "/resources/MyBundle-dbg.js", getSize: async () => 13}); + await resourceCollector.visitResource({getPath: () => "/resources/MyBundle.js", getSize: async () => 13}); + + await resourceCollector.determineResourceDetails({ + debugResources: ["**/*-dbg.js"], // MyBundle-dbg.js should be marked as "isDebug" + }); + t.is(enrichWithDependencyInfoStub.callCount, 2, "enrichWithDependencyInfo is called twice"); + t.is(enrichWithDependencyInfoStub.getCall(0).args[0].name, "MyBundle.js", + "enrichWithDependencyInfo is called with non-debug bundle first"); + t.is(enrichWithDependencyInfoStub.getCall(1).args[0].name, "MyBundle-dbg.js", + "enrichWithDependencyInfo is called with debug bundle on second run"); + + const bundleInfo = resourceCollector._resources.get("MyBundle.js"); + t.deepEqual(bundleInfo.included, new Set(["SomeModule.js"])); + t.deepEqual(bundleInfo.required, new Set(["Boot.js"])); + t.is(bundleInfo.isDebug, false); + + const debugBundleInfo = resourceCollector._resources.get("MyBundle-dbg.js"); + t.is(debugBundleInfo.included, null); + t.deepEqual(debugBundleInfo.required, new Set(["Boot.js"])); + t.is(debugBundleInfo.isDebug, true); +}); + test.serial("determineResourceDetails: Debug files and non-debug files", async (t) => { const resourceCollector = new ResourceCollector(); const enrichWithDependencyInfoStub = sinon.stub(resourceCollector, "enrichWithDependencyInfo") - .callsFake((resourceInfo) => { + .callsFake(async (resourceInfo) => { // Simulate enriching resource info with dependency info to test whether it gets shared // with the dbg resource later on resourceInfo.dynRequired = true; @@ -183,16 +218,15 @@ test.serial("determineResourceDetails: Debug files and non-debug files", async ( })); await resourceCollector.determineResourceDetails({ - debugResources: ["**/*-dbg.js"], - debugBundles: ["MyBundle-dbg.js"] + debugResources: ["**/*-dbg.js"] }); t.is(enrichWithDependencyInfoStub.callCount, 3, "enrichWithDependencyInfo is called three times"); - t.is(enrichWithDependencyInfoStub.getCall(0).args[0].name, "MyBundle-dbg.js", - "enrichWithDependencyInfo called with debug bundle"); - t.is(enrichWithDependencyInfoStub.getCall(1).args[0].name, "mylib/MyControlA.js", + t.is(enrichWithDependencyInfoStub.getCall(0).args[0].name, "mylib/MyControlA.js", "enrichWithDependencyInfo called with non-debug control A"); - t.is(enrichWithDependencyInfoStub.getCall(2).args[0].name, "mylib/MyControlB.js", + t.is(enrichWithDependencyInfoStub.getCall(1).args[0].name, "mylib/MyControlB.js", "enrichWithDependencyInfo called with non-debug control B"); + t.is(enrichWithDependencyInfoStub.getCall(2).args[0].name, "MyBundle-dbg.js", + "enrichWithDependencyInfo called with debug bundle"); t.is(resourceCollector._resources.get("MyBundle-dbg.js").isDebug, true, "MyBundle-dbg is a debug file"); t.is(resourceCollector._resources.get("MyBundle-dbg.js").dynRequired, true, diff --git a/test/lib/lbt/utils/parseUtils.js b/test/lib/lbt/utils/parseUtils.js index 3971d763e..eec63d66d 100644 --- a/test/lib/lbt/utils/parseUtils.js +++ b/test/lib/lbt/utils/parseUtils.js @@ -18,3 +18,9 @@ test("successful parse step", (t) => { t.true(ast != null && typeof ast === "object"); t.is(ast.type, "Program"); }); + +test("successful parse step (ES2021 features)", (t) => { + const ast = parseJS("const x = 1_000_000_000;"); // numeric separators + t.true(ast != null && typeof ast === "object"); + t.is(ast.type, "Program"); +}); diff --git a/test/lib/processors/bundlers/moduleBundler.js b/test/lib/processors/bundlers/moduleBundler.js index 04f4962b0..aa01b37df 100644 --- a/test/lib/processors/bundlers/moduleBundler.js +++ b/test/lib/processors/bundlers/moduleBundler.js @@ -70,14 +70,14 @@ test.serial("Builder returns single bundle", async (t) => { } }); - t.deepEqual(outputResources, [expectedOutputResource]); - t.is(outputResources[0], expectedOutputResource); + t.deepEqual(outputResources, [{bundle: expectedOutputResource}]); + t.is(outputResources[0].bundle, expectedOutputResource); t.is(LocatorResourcePool.callCount, 1, "LocatorResourcePool should be created once"); t.true(LocatorResourcePool.calledWithNew()); t.deepEqual(LocatorResourcePool.getCall(0).args, [ { - ignoreMissingModules: undefined // not defined in bundleOptions + ignoreMissingModules: false // default } ], "LocatorResourcePool should be called with expected args"); @@ -87,15 +87,27 @@ test.serial("Builder returns single bundle", async (t) => { t.is(BundleBuilder.getCall(0).args[0], pool, "LocatorResourcePool should be called with pool"); t.is(pool.prepare.callCount, 1, "pool.prepare should be called once"); - t.is(pool.prepare.getCall(0).args.length, 1); + t.is(pool.prepare.getCall(0).args.length, 2); t.is(pool.prepare.getCall(0).args[0], resources, "pool.prepare should be called with resources"); + t.is(pool.prepare.getCall(0).args[1], undefined, "pool.prepare should be called without moduleNameMapping"); t.is(builder.createBundle.callCount, 1, "builder.createBundle should be called once"); t.is(builder.createBundle.getCall(0).args.length, 2); t.is(builder.createBundle.getCall(0).args[0], bundleDefinition, "builder.createBundle should be called with bundleDefinition"); - t.is(builder.createBundle.getCall(0).args[1], bundleOptions, - "builder.createBundle should be called with bundleOptions"); + t.deepEqual(builder.createBundle.getCall(0).args[1], { + // default bundleOptions + optimize: true, + sourceMap: true, + decorateBootstrapModule: false, + addTryCatchRestartWrapper: false, + usePredefineCalls: false, + numberOfParts: 1, + ignoreMissingModules: false, + + some: "option" + }, + "builder.createBundle should be called with bundleOptions"); t.true(builder.createBundle.calledAfter(pool.prepare), "builder.createBundle should be called before pool.prepare"); @@ -145,16 +157,20 @@ test.serial("Builder returns multiple bundles", async (t) => { const expectedOutputResources = [ { - "output": "resource 1" + bundle: { + "output": "resource 1" + }, }, undefined, { - "output": "resource 2" + bundle: { + "output": "resource 2" + } }, undefined ]; - Resource.onFirstCall().returns(expectedOutputResources[0]); - Resource.onSecondCall().returns(expectedOutputResources[2]); + Resource.onFirstCall().returns(expectedOutputResources[0].bundle); + Resource.onSecondCall().returns(expectedOutputResources[2].bundle); const outputResources = await processor({ resources, @@ -165,15 +181,15 @@ test.serial("Builder returns multiple bundles", async (t) => { }); t.deepEqual(outputResources, expectedOutputResources); - t.is(outputResources[0], expectedOutputResources[0]); + t.is(outputResources[0].bundle, expectedOutputResources[0].bundle); t.is(outputResources[1], expectedOutputResources[1]); - t.is(outputResources[2], expectedOutputResources[2]); + t.is(outputResources[2].bundle, expectedOutputResources[2].bundle); t.is(LocatorResourcePool.callCount, 1, "LocatorResourcePool should be created once"); t.true(LocatorResourcePool.calledWithNew()); t.deepEqual(LocatorResourcePool.getCall(0).args, [ { - ignoreMissingModules: undefined // not defined in bundleOptions + ignoreMissingModules: false // default } ], "LocatorResourcePool should be called with expected args"); @@ -183,15 +199,27 @@ test.serial("Builder returns multiple bundles", async (t) => { t.is(BundleBuilder.getCall(0).args[0], pool, "LocatorResourcePool should be called with pool"); t.is(pool.prepare.callCount, 1, "pool.prepare should be called once"); - t.is(pool.prepare.getCall(0).args.length, 1); + t.is(pool.prepare.getCall(0).args.length, 2); t.is(pool.prepare.getCall(0).args[0], resources, "pool.prepare should be called with resources"); + t.is(pool.prepare.getCall(0).args[1], undefined, "pool.prepare should be called without moduleNameMapping"); t.is(builder.createBundle.callCount, 1, "builder.createBundle should be called once"); t.is(builder.createBundle.getCall(0).args.length, 2); t.is(builder.createBundle.getCall(0).args[0], bundleDefinition, "builder.createBundle should be called with bundleDefinition"); - t.is(builder.createBundle.getCall(0).args[1], bundleOptions, - "builder.createBundle should be called with bundleOptions"); + t.deepEqual(builder.createBundle.getCall(0).args[1], { + // default bundleOptions + optimize: true, + sourceMap: true, + decorateBootstrapModule: false, + addTryCatchRestartWrapper: false, + usePredefineCalls: false, + numberOfParts: 1, + ignoreMissingModules: false, + + some: "option" + }, + "builder.createBundle should be called with bundleOptions"); t.true(builder.createBundle.calledAfter(pool.prepare), "builder.createBundle should be called before pool.prepare"); @@ -213,7 +241,7 @@ test.serial("Builder returns multiple bundles", async (t) => { t.is(log.verbose.callCount, 0, "log.verbose is not called when verbose level is not enabled"); }); -test.serial("bundleOptions default", async (t) => { +test.serial("bundleOptions default (no options passed)", async (t) => { const {processor, Resource, LocatorResourcePool, pool, BundleBuilder, builder, log} = t.context; const resources = []; @@ -243,14 +271,14 @@ test.serial("bundleOptions default", async (t) => { } }); - t.deepEqual(outputResources, [expectedOutputResource]); - t.is(outputResources[0], expectedOutputResource); + t.deepEqual(outputResources, [{bundle: expectedOutputResource}]); + t.is(outputResources[0].bundle, expectedOutputResource); t.is(LocatorResourcePool.callCount, 1, "LocatorResourcePool should be created once"); t.true(LocatorResourcePool.calledWithNew()); t.deepEqual(LocatorResourcePool.getCall(0).args, [ { - ignoreMissingModules: undefined // not defined in bundleOptions + ignoreMissingModules: false // default } ], "LocatorResourcePool should be called with expected args"); @@ -260,15 +288,25 @@ test.serial("bundleOptions default", async (t) => { t.is(BundleBuilder.getCall(0).args[0], pool, "LocatorResourcePool should be called with pool"); t.is(pool.prepare.callCount, 1, "pool.prepare should be called once"); - t.is(pool.prepare.getCall(0).args.length, 1); + t.is(pool.prepare.getCall(0).args.length, 2); t.is(pool.prepare.getCall(0).args[0], resources, "pool.prepare should be called with resources"); + t.is(pool.prepare.getCall(0).args[1], undefined, "pool.prepare should be called without moduleNameMapping"); t.is(builder.createBundle.callCount, 1, "builder.createBundle should be called once"); t.is(builder.createBundle.getCall(0).args.length, 2); t.is(builder.createBundle.getCall(0).args[0], bundleDefinition, "builder.createBundle should be called with bundleDefinition"); - t.deepEqual(builder.createBundle.getCall(0).args[1], {optimize: true}, // default bundleOptions - "builder.createBundle should be called with bundleOptions"); + t.deepEqual(builder.createBundle.getCall(0).args[1], { + // default bundleOptions + optimize: true, + sourceMap: true, + decorateBootstrapModule: false, + addTryCatchRestartWrapper: false, + usePredefineCalls: false, + numberOfParts: 1, + ignoreMissingModules: false + }, + "builder.createBundle should be called with bundleOptions"); t.true(builder.createBundle.calledAfter(pool.prepare), "builder.createBundle should be called before pool.prepare"); @@ -284,6 +322,115 @@ test.serial("bundleOptions default", async (t) => { t.is(log.verbose.callCount, 0, "log.verbose is not called when verbose level is not enabled"); }); +test.serial("bundleOptions default (empty options passed)", async (t) => { + const {processor, LocatorResourcePool, builder, log} = t.context; + + const resources = []; + const bundleDefinition = { + "some": "definition" + }; + const bundleOptions = {}; + + const createdBundle = { + name: "BundleName.js", + content: "Bundle Content", + bundleInfo: { + "Bundle": "Info" + } + }; + + builder.createBundle.resolves(createdBundle); + + await processor({ + resources, + options: { + bundleDefinition, + bundleOptions + } + }); + + t.is(LocatorResourcePool.callCount, 1, "LocatorResourcePool should be created once"); + t.true(LocatorResourcePool.calledWithNew()); + t.deepEqual(LocatorResourcePool.getCall(0).args, [ + { + ignoreMissingModules: false // default + } + ], "LocatorResourcePool should be called with expected args"); + + t.is(builder.createBundle.callCount, 1, "builder.createBundle should be called once"); + t.is(builder.createBundle.getCall(0).args.length, 2); + t.is(builder.createBundle.getCall(0).args[0], bundleDefinition, + "builder.createBundle should be called with bundleDefinition"); + t.deepEqual(builder.createBundle.getCall(0).args[1], { + // default bundleOptions + optimize: true, + sourceMap: true, + decorateBootstrapModule: false, + addTryCatchRestartWrapper: false, + usePredefineCalls: false, + numberOfParts: 1, + ignoreMissingModules: false + }, + "builder.createBundle should be called with bundleOptions"); + + t.deepEqual(bundleOptions, {}, "Passed bundleOptions object should not be modified"); + + t.is(log.verbose.callCount, 0, "log.verbose is not called when verbose level is not enabled"); +}); + +test.serial("bundleOptions (all options passed)", async (t) => { + const {processor, LocatorResourcePool, builder, log} = t.context; + + const resources = []; + const bundleDefinition = { + "some": "definition" + }; + const bundleOptions = { + optimize: false, + sourceMap: false, + decorateBootstrapModule: true, + addTryCatchRestartWrapper: true, + usePredefineCalls: true, + numberOfParts: 7, + ignoreMissingModules: true + }; + + const createdBundle = { + name: "BundleName.js", + content: "Bundle Content", + bundleInfo: { + "Bundle": "Info" + } + }; + + builder.createBundle.resolves(createdBundle); + + await processor({ + resources, + options: { + bundleDefinition, + bundleOptions + } + }); + + t.is(LocatorResourcePool.callCount, 1, "LocatorResourcePool should be created once"); + t.true(LocatorResourcePool.calledWithNew()); + t.deepEqual(LocatorResourcePool.getCall(0).args, [ + { + ignoreMissingModules: true + } + ], "LocatorResourcePool should be called with expected args"); + + t.is(builder.createBundle.callCount, 1, "builder.createBundle should be called once"); + t.is(builder.createBundle.getCall(0).args.length, 2); + t.is(builder.createBundle.getCall(0).args[0], bundleDefinition, + "builder.createBundle should be called with bundleDefinition"); + t.deepEqual(builder.createBundle.getCall(0).args[1], bundleOptions, + "builder.createBundle should be called with bundleOptions"); + + t.is(log.verbose.callCount, 0, "log.verbose is not called when verbose level is not enabled"); +}); + test.serial("Passes ignoreMissingModules bundleOption to LocatorResourcePool", async (t) => { const {processor, Resource, LocatorResourcePool, pool, BundleBuilder, builder, log} = t.context; @@ -295,6 +442,18 @@ test.serial("Passes ignoreMissingModules bundleOption to LocatorResourcePool", a ignoreMissingModules: "foo" }; + const effectiveBundleOptions = { + // Defaults + "optimize": true, + "sourceMap": true, + "decorateBootstrapModule": false, + "addTryCatchRestartWrapper": false, + "usePredefineCalls": false, + "numberOfParts": 1, + + "ignoreMissingModules": "foo" + }; + const createdBundle = { name: "BundleName.js", content: "Bundle Content", @@ -318,8 +477,8 @@ test.serial("Passes ignoreMissingModules bundleOption to LocatorResourcePool", a } }); - t.deepEqual(outputResources, [expectedOutputResource]); - t.is(outputResources[0], expectedOutputResource); + t.deepEqual(outputResources, [{bundle: expectedOutputResource}]); + t.is(outputResources[0].bundle, expectedOutputResource); t.is(LocatorResourcePool.callCount, 1, "LocatorResourcePool should be created once"); t.true(LocatorResourcePool.calledWithNew()); @@ -335,14 +494,15 @@ test.serial("Passes ignoreMissingModules bundleOption to LocatorResourcePool", a t.is(BundleBuilder.getCall(0).args[0], pool, "LocatorResourcePool should be called with pool"); t.is(pool.prepare.callCount, 1, "pool.prepare should be called once"); - t.is(pool.prepare.getCall(0).args.length, 1); + t.is(pool.prepare.getCall(0).args.length, 2); t.is(pool.prepare.getCall(0).args[0], resources, "pool.prepare should be called with resources"); + t.is(pool.prepare.getCall(0).args[1], undefined, "pool.prepare should be called without moduleNameMapping"); t.is(builder.createBundle.callCount, 1, "builder.createBundle should be called once"); t.is(builder.createBundle.getCall(0).args.length, 2); t.is(builder.createBundle.getCall(0).args[0], bundleDefinition, "builder.createBundle should be called with bundleDefinition"); - t.is(builder.createBundle.getCall(0).args[1], bundleOptions, + t.deepEqual(builder.createBundle.getCall(0).args[1], effectiveBundleOptions, "builder.createBundle should be called with bundleOptions"); t.true(builder.createBundle.calledAfter(pool.prepare), "builder.createBundle should be called before pool.prepare"); @@ -370,6 +530,19 @@ test.serial("Verbose Logging", async (t) => { "some": "option" }; + const effectiveBundleOptions = { + // Defaults + "optimize": true, + "sourceMap": true, + "decorateBootstrapModule": false, + "addTryCatchRestartWrapper": false, + "usePredefineCalls": false, + "numberOfParts": 1, + "ignoreMissingModules": false, + + "some": "option", + }; + const createdBundle = { name: "Bundle Name", content: "Bundle Content", @@ -402,5 +575,5 @@ test.serial("Verbose Logging", async (t) => { t.deepEqual(log.verbose.getCall(0).args, ["Generating bundle:"]); t.deepEqual(log.verbose.getCall(1).args, ["bundleDefinition: " + JSON.stringify(bundleDefinition, null, 2)]); - t.deepEqual(log.verbose.getCall(2).args, ["bundleOptions: " + JSON.stringify(bundleOptions, null, 2)]); + t.deepEqual(log.verbose.getCall(2).args, ["bundleOptions: " + JSON.stringify(effectiveBundleOptions, null, 2)]); }); diff --git a/test/lib/processors/jsdoc/jsdocGenerator.js b/test/lib/processors/jsdoc/jsdocGenerator.js index 3c297e95e..21ac88d11 100644 --- a/test/lib/processors/jsdoc/jsdocGenerator.js +++ b/test/lib/processors/jsdoc/jsdocGenerator.js @@ -98,7 +98,7 @@ test.serial("buildJsdoc", async (t) => { const firstCallArgs = cpStub.getCall(0).args; t.deepEqual(firstCallArgs[0], "node", "Spawn got called with correct process argument"); t.deepEqual(firstCallArgs[1], [ - path.resolve(__dirname, "..", "..", "..", "..", "node_modules", "jsdoc", "jsdoc.js"), + require.resolve("jsdoc/jsdoc.js"), "-c", "/some/config/path/jsdoc-config.json", "--verbose", diff --git a/test/lib/processors/minifier.js b/test/lib/processors/minifier.js new file mode 100644 index 000000000..3007b3a5c --- /dev/null +++ b/test/lib/processors/minifier.js @@ -0,0 +1,305 @@ +const test = require("ava"); + +const minifier = require("../../../lib/processors/minifier"); +const ui5Fs = require("@ui5/fs"); +const resourceFactory = ui5Fs.resourceFactory; + +// Node.js itself tries to parse sourceMappingURLs in all JavaScript files. This is unwanted and might even lead to +// obscure errors when dynamically generating Data-URI soruceMappingURL values. +// Therefore use this constant to never write the actual string. +const SOURCE_MAPPING_URL = "//" + "# sourceMappingURL"; + + +test("Basic minifier", async (t) => { + const content = `/*! + * \${copyright} + */ + function myFunc(myArg) { + jQuery.sap.require("something"); + console.log("Something required") + } +myFun(); +`; + const testResource = resourceFactory.createResource({ + path: "/test.controller.js", + string: content + }); + const [{resource, dbgResource, sourceMapResource}] = await minifier({ + resources: [testResource] + }); + + const expected = `/*! + * \${copyright} + */ +function myFunc(e){jQuery.sap.require("something");console.log("Something required")}myFun(); +${SOURCE_MAPPING_URL}=test.controller.js.map`; + t.deepEqual(await resource.getString(), expected, "Correct minified content"); + t.deepEqual(await dbgResource.getString(), content, "Correct debug content"); + const expectedSourceMap = `{"version":3,"sources":["test-dbg.controller.js"],` + + `"names":["myFunc","myArg","jQuery","sap","require","console","log","myFun"],` + + `"mappings":";;;AAGC,SAASA,OAAOC,GACfC,OAAOC,IAAIC,QAAQ,aACnBC,QAAQC,IAAI,sBAEdC",` + + `"file":"test.controller.js"}`; + t.deepEqual(await sourceMapResource.getString(), expectedSourceMap, "Correct source map content"); +}); + +test("Multiple resources", async (t) => { + const content1 = ` +function test1(paramA) { + var variableA = paramA; + console.log(variableA); +} +test1();`; + const content2 = ` +function test2(paramA) { + var variableA = paramA; + console.log(variableA); +} +test2();`; + const content3 = ` +function test3(paramA) { + var variableA = paramA; + console.log(variableA); +} +test3();`; + + const testResources = [ + resourceFactory.createResource({ + path: "/test1.controller.js", + string: content1 + }), + resourceFactory.createResource({ + path: "/test2.fragment.js", + string: content2 + }), + resourceFactory.createResource({ + path: "/test3.designtime.js", + string: content3 + }) + ]; + + const resources = await minifier({ + resources: testResources + }); + + const expectedMinified1 = `function test1(t){var o=t;console.log(o)}test1(); +${SOURCE_MAPPING_URL}=test1.controller.js.map`; + const expectedMinified2 = `function test2(t){var o=t;console.log(o)}test2(); +${SOURCE_MAPPING_URL}=test2.fragment.js.map`; + const expectedMinified3 = `function test3(t){var o=t;console.log(o)}test3(); +${SOURCE_MAPPING_URL}=test3.designtime.js.map`; + + const expectedSourceMap1 = + `{"version":3,"sources":["test1-dbg.controller.js"],"names":["test1","paramA","variableA","console","log"],` + + `"mappings":"AACA,SAASA,MAAMC,GACd,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test1.controller.js"}`; + const expectedSourceMap2 = + `{"version":3,"sources":["test2-dbg.fragment.js"],"names":["test2","paramA","variableA","console","log"],` + + `"mappings":"AACA,SAASA,MAAMC,GACd,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test2.fragment.js"}`; + const expectedSourceMap3 = + `{"version":3,"sources":["test3-dbg.designtime.js"],"names":["test3","paramA","variableA","console","log"],` + + `"mappings":"AACA,SAASA,MAAMC,GACd,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test3.designtime.js"}`; + + t.deepEqual(resources[0].resource.getPath(), "/test1.controller.js", + "Correct resource path for minified content of resource 1"); + t.deepEqual(await resources[0].resource.getString(), expectedMinified1, "Correct minified content for resource 1"); + t.deepEqual(resources[0].dbgResource.getPath(), "/test1-dbg.controller.js", + "Correct resource path for debug content of resource 1"); + t.deepEqual(await resources[0].dbgResource.getString(), content1, "Correct debug content for resource 1"); + t.deepEqual(resources[0].sourceMapResource.getPath(), "/test1.controller.js.map", + "Correct resource path for source map content of resource 1"); + t.deepEqual(await resources[0].sourceMapResource.getString(), expectedSourceMap1, + "Correct source map content for resource 1"); + + t.deepEqual(resources[1].resource.getPath(), "/test2.fragment.js", + "Correct resource path for minified content of resource 2"); + t.deepEqual(await resources[1].resource.getString(), expectedMinified2, "Correct minified content for resource 2"); + t.deepEqual(resources[1].dbgResource.getPath(), "/test2-dbg.fragment.js", + "Correct resource path for debug content of resource 2"); + t.deepEqual(await resources[1].dbgResource.getString(), content2, "Correct debug content for resource 2"); + t.deepEqual(resources[1].sourceMapResource.getPath(), "/test2.fragment.js.map", + "Correct resource path for source map content of resource 2"); + t.deepEqual(await resources[1].sourceMapResource.getString(), expectedSourceMap2, + "Correct source map content for resource 2"); + + t.deepEqual(resources[2].resource.getPath(), "/test3.designtime.js", + "Correct resource path for minified content of resource 3"); + t.deepEqual(await resources[2].resource.getString(), expectedMinified3, "Correct minified content for resource 3"); + t.deepEqual(resources[2].dbgResource.getPath(), "/test3-dbg.designtime.js", + "Correct resource path for debug content of resource 3"); + t.deepEqual(await resources[2].dbgResource.getString(), content3, "Correct debug content for resource 3"); + t.deepEqual(resources[2].sourceMapResource.getPath(), "/test3.designtime.js.map", + "Correct resource path for source map content of resource 3"); + t.deepEqual(await resources[2].sourceMapResource.getString(), expectedSourceMap3, + "Correct source map content for resource 3"); +}); + +test("Different copyright", async (t) => { + const content = ` +/* + * Copyright SAPUI5 Developers and other contributors + */ +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test(); +`; + const testResource = resourceFactory.createResource({ + path: "/test.view.js", + string: content + }); + const [{resource, dbgResource, sourceMapResource}] = await minifier({ + resources: [testResource] + }); + + const expected = `/* + * Copyright SAPUI5 Developers and other contributors + */ +function test(t){var o=t;console.log(o)}test(); +${SOURCE_MAPPING_URL}=test.view.js.map`; + t.deepEqual(await resource.getString(), expected, "Correct minified content"); + t.deepEqual(await dbgResource.getString(), content, "Correct debug content"); + const expectedSourceMap = + `{"version":3,"sources":["test-dbg.view.js"],"names":["test","paramA","variableA","console","log"],` + + `"mappings":";;;AAIA,SAASA,KAAKC,GACb,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test.view.js"}`; + t.deepEqual(await sourceMapResource.getString(), expectedSourceMap, "Correct source map content"); +}); + +test("minify raw module (@ui5-bundle-raw-include)", async (t) => { + const content = ` +//@ui5-bundle-raw-include sap/ui/my/module.js +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + const [{resource}] = await minifier({ + resources: [testResource] + }); + + const expected = `//@ui5-bundle-raw-include sap/ui/my/module.js +function test(t){var o=t;console.log(o)}test(); +${SOURCE_MAPPING_URL}=test.js.map`; + t.deepEqual(await resource.getString(), expected, "Correct minified content"); +}); + +test("minify raw module (@ui5-bundle)", async (t) => { + const content = ` +//@ui5-bundle sap/ui/my/module.js +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + const [{resource}] = await minifier({ + resources: [testResource] + }); + + const expected = `//@ui5-bundle sap/ui/my/module.js +function test(t){var o=t;console.log(o)}test(); +${SOURCE_MAPPING_URL}=test.js.map`; + t.deepEqual(await resource.getString(), expected, "Correct minified content"); +}); + +test("addSourceMappingUrl=false", async (t) => { + const content = ` +//@ui5-bundle sap/ui/my/module.js +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + const [{resource}] = await minifier({ + resources: [testResource], + options: { + addSourceMappingUrl: false + } + }); + + const expected = `//@ui5-bundle sap/ui/my/module.js +function test(t){var o=t;console.log(o)}test();`; + t.deepEqual(await resource.getString(), expected, "Correct minified content"); +}); + +test("addSourceMappingUrl=true", async (t) => { + const content = ` +//@ui5-bundle sap/ui/my/module.js +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + const [{resource}] = await minifier({ + resources: [testResource], + options: { + addSourceMappingUrl: true + } + }); + + const expected = `//@ui5-bundle sap/ui/my/module.js +function test(t){var o=t;console.log(o)}test(); +${SOURCE_MAPPING_URL}=test.js.map`; + t.deepEqual(await resource.getString(), expected, "Correct minified content"); +}); + +test("empty options object (addSourceMappingUrl defaults to true)", async (t) => { + const content = ` +//@ui5-bundle sap/ui/my/module.js +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + const [{resource}] = await minifier({ + resources: [testResource], + options: {} + }); + + const expected = `//@ui5-bundle sap/ui/my/module.js +function test(t){var o=t;console.log(o)}test(); +${SOURCE_MAPPING_URL}=test.js.map`; + t.deepEqual(await resource.getString(), expected, "Correct minified content"); +}); + +test("minification error", async (t) => { + const content = ` +this code can't be parsed!`; + + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + const error = await t.throwsAsync(minifier({ + resources: [testResource] + })); + + t.regex(error.message, /Minification failed with error/, "Error should contain expected message"); + t.regex(error.message, /test\.js/, "Error should contain filename"); + t.regex(error.message, /col/, "Error should contain col"); + t.regex(error.message, /pos/, "Error should contain pos"); + t.regex(error.message, /line/, "Error should contain line"); +}); diff --git a/test/lib/tasks/TaskUtil.js b/test/lib/tasks/TaskUtil.js index 5f2aba82c..cdb2c3dc5 100644 --- a/test/lib/tasks/TaskUtil.js +++ b/test/lib/tasks/TaskUtil.js @@ -93,6 +93,21 @@ test("isRootProject", async (t) => { t.is(res, true, "Correct result"); }); +test("getBuildOption", (t) => { + const getOptionStub = sinon.stub().returns("Pony"); + const taskUtil = new TaskUtil({ + projectBuildContext: { + STANDARD_TAGS: ["some tag"], + getOption: getOptionStub + } + }); + + const res = taskUtil.getBuildOption("friend"); + + t.is(getOptionStub.callCount, 1, "ProjectBuildContext#getBuildOption got called once"); + t.is(res, "Pony", "Correct result"); +}); + test("registerCleanupTask", async (t) => { const registerCleanupTaskStub = sinon.stub(); const taskUtil = new TaskUtil({ diff --git a/test/lib/tasks/buildThemes.js b/test/lib/tasks/buildThemes.js index 3ebd10197..cfe6b20b4 100644 --- a/test/lib/tasks/buildThemes.js +++ b/test/lib/tasks/buildThemes.js @@ -233,8 +233,11 @@ test.serial("buildThemes (filtering libraries)", async (t) => { "sap/ui/lib1/.library": { getPath: sinon.stub().returns("/resources/sap/ui/lib1/.library") }, - "sap/ui/lib3/.library": { - getPath: sinon.stub().returns("/resources/sap/ui/lib3/.library") + "sap/ui/lib1/library.js": { + getPath: sinon.stub().returns("/resources/sap/ui/lib1/library.js") + }, + "sap/ui/lib3/library.js": { + getPath: sinon.stub().returns("/resources/sap/ui/lib3/library.js") } }; @@ -252,9 +255,10 @@ test.serial("buildThemes (filtering libraries)", async (t) => { ]); t.context.comboByGlob - .withArgs("/resources/**/*.library").resolves([ + .withArgs("/resources/**/(*.library|library.js)").resolves([ dotLibraryResources["sap/ui/lib1/.library"], - dotLibraryResources["sap/ui/lib3/.library"] + dotLibraryResources["sap/ui/lib1/library.js"], + dotLibraryResources["sap/ui/lib3/library.js"] ]); t.context.themeBuilderStub.returns([{}]); @@ -264,7 +268,7 @@ test.serial("buildThemes (filtering libraries)", async (t) => { options: { projectName: "sap.ui.test.lib1", inputPattern: "/resources/**/themes/*/library.source.less", - librariesPattern: "/resources/**/*.library" + librariesPattern: "/resources/**/(*.library|library.js)" } }); @@ -403,8 +407,11 @@ test.serial("buildThemes (filtering libraries + themes)", async (t) => { "sap/ui/lib1/.library": { getPath: sinon.stub().returns("/resources/sap/ui/lib1/.library") }, - "sap/ui/lib3/.library": { - getPath: sinon.stub().returns("/resources/sap/ui/lib3/.library") + "sap/ui/lib1/library.js": { + getPath: sinon.stub().returns("/resources/sap/ui/lib1/library.js") + }, + "sap/ui/lib3/library.js": { + getPath: sinon.stub().returns("/resources/sap/ui/lib3/library.js") } }; @@ -443,9 +450,10 @@ test.serial("buildThemes (filtering libraries + themes)", async (t) => { ]); t.context.comboByGlob - .withArgs("/resources/**/*.library").resolves([ + .withArgs("/resources/**/(*.library|library.js)").resolves([ dotLibraryResources["sap/ui/lib1/.library"], - dotLibraryResources["sap/ui/lib3/.library"] + dotLibraryResources["sap/ui/lib1/library.js"], + dotLibraryResources["sap/ui/lib3/library.js"] ]) .withArgs("/resources/sap/ui/core/themes/*", {nodir: false}).resolves([ baseThemes["sap/ui/core/themes/theme1/"], @@ -459,7 +467,7 @@ test.serial("buildThemes (filtering libraries + themes)", async (t) => { options: { projectName: "sap.ui.test.lib1", inputPattern: "/resources/**/themes/*/library.source.less", - librariesPattern: "/resources/**/*.library", + librariesPattern: "/resources/**/(*.library|library.js)", themesPattern: "/resources/sap/ui/core/themes/*" } }); diff --git a/test/lib/tasks/bundlers/generateBundle.js b/test/lib/tasks/bundlers/generateBundle.js new file mode 100644 index 000000000..e29478769 --- /dev/null +++ b/test/lib/tasks/bundlers/generateBundle.js @@ -0,0 +1,565 @@ +const test = require("ava"); +const sinon = require("sinon"); +const mock = require("mock-require"); +const ModuleName = require("../../../../lib/lbt/utils/ModuleName"); + +test.beforeEach((t) => { + t.context.log = { + warn: sinon.stub(), + verbose: sinon.stub(), + error: sinon.stub() + }; + + t.context.taskUtil = { + getTag: sinon.stub(), + setTag: sinon.stub(), + clearTag: sinon.stub(), + STANDARD_TAGS: { + HasDebugVariant: "", + IsDebugVariant: "", + OmitFromBuildResult: "" + } + }; + + t.context.workspace = { + byGlob: sinon.stub().resolves([]), + write: sinon.stub().resolves() + }; + t.context.dependencies = {}; + t.context.combo = { + byGlob: sinon.stub().resolves([]), + filter: sinon.stub() + }; + + t.context.ReaderCollectionPrioritizedStub = sinon.stub(); + t.context.ReaderCollectionPrioritizedStub.returns(t.context.combo); + mock("@ui5/fs", { + ReaderCollectionPrioritized: t.context.ReaderCollectionPrioritizedStub + }); + + t.context.moduleBundlerStub = sinon.stub().resolves([]); + mock("../../../../lib/processors/bundlers/moduleBundler", t.context.moduleBundlerStub); + + t.context.generateBundle = mock.reRequire("../../../../lib/tasks/bundlers/generateBundle"); +}); + +test.afterEach.always(() => { + sinon.restore(); + mock.stopAll(); +}); + +test.serial("generateBundle: No taskUtil, no bundleOptions", async (t) => { + const { + generateBundle, moduleBundlerStub, ReaderCollectionPrioritizedStub, + workspace, dependencies, combo + } = t.context; + + const resources = [ + {"fake": "resource"} + ]; + combo.byGlob.resolves(resources); + + moduleBundlerStub.resolves([ + { + name: "my/app/customBundle.js", + bundle: {"fake": "bundle"}, + sourceMap: {"fake": "sourceMap"} + } + ]); + + // bundleDefinition can be empty here as the moduleBundler is mocked + const bundleDefinition = {}; + + await generateBundle({ + workspace, + dependencies, + options: { + projectName: "Test Application", + bundleDefinition + } + }); + + t.is(moduleBundlerStub.callCount, 1, "moduleBundler should have been called once"); + t.deepEqual(moduleBundlerStub.getCall(0).args, [{ + options: { + bundleDefinition, + bundleOptions: undefined + }, + resources + }]); + + t.is(combo.byGlob.callCount, 1, + "combo.byGlob should have been called once"); + t.deepEqual(combo.byGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], + "combo.byGlob should have been called with expected pattern"); + + t.is(combo.filter.callCount, 0, + "combo.filter should not have been called"); + + t.is(ReaderCollectionPrioritizedStub.callCount, 1, + "ReaderCollectionPrioritized should have been called once"); + t.true(ReaderCollectionPrioritizedStub.calledWithNew(), + "ReaderCollectionPrioritized should have been called with 'new'"); + + const bundleResources = await moduleBundlerStub.getCall(0).returnValue; + t.is(workspace.write.callCount, 2, + "workspace.write should have been called twice"); + t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0].bundle], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(0).args[0], bundleResources[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + t.deepEqual(workspace.write.getCall(1).args, [bundleResources[0].sourceMap], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(1).args[0], bundleResources[0].sourceMap, + "workspace.write should have been called with exact resource returned by moduleBundler"); +}); + +test.serial("generateBundle: No bundleOptions, with taskUtil", async (t) => { + const { + generateBundle, moduleBundlerStub, ReaderCollectionPrioritizedStub, + workspace, dependencies, combo, + taskUtil + } = t.context; + + const resources = [ + {"fake": "resource"} + ]; + + const filteredCombo = { + byGlob: sinon.stub().resolves(resources) + }; + combo.filter.returns(filteredCombo); + + moduleBundlerStub.resolves([ + { + name: "my/app/customBundle.js", + bundle: {"fake": "bundle"}, + sourceMap: {"fake": "sourceMap"} + } + ]); + + // bundleDefinition can be empty here as the moduleBundler is mocked + const bundleDefinition = {}; + + await generateBundle({ + workspace, + dependencies, + taskUtil, + options: { + projectName: "Test Application", + bundleDefinition + } + }); + + t.is(moduleBundlerStub.callCount, 1, "moduleBundler should have been called once"); + t.deepEqual(moduleBundlerStub.getCall(0).args, [{ + options: { + bundleDefinition, + bundleOptions: undefined + }, + resources + }]); + + t.is(combo.byGlob.callCount, 0, + "combo.byGlob should not have been called"); + + t.is(combo.filter.callCount, 1, + "combo.filter should have been called once"); + t.is(combo.filter.getCall(0).args.length, 1, + "combo.filter should have been called with one argument"); + const filterFunction = combo.filter.getCall(0).args[0]; + t.is(typeof filterFunction, "function", + "combo.filter should have been called with a function"); + + t.is(filteredCombo.byGlob.callCount, 1, + "filteredCombo.byGlob should have been called once"); + t.deepEqual(filteredCombo.byGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], + "filteredCombo.byGlob should have been called with expected pattern"); + + t.is(taskUtil.clearTag.callCount, 1); + t.deepEqual(taskUtil.clearTag.getCall(0).args, + [{"fake": "sourceMap"}, taskUtil.STANDARD_TAGS.OmitFromBuildResult], + "OmitFromBuildResult tag should be cleared on source map resource"); + + t.is(ReaderCollectionPrioritizedStub.callCount, 1, + "ReaderCollectionPrioritized should have been called once"); + t.true(ReaderCollectionPrioritizedStub.calledWithNew(), + "ReaderCollectionPrioritized should have been called with 'new'"); + + const bundleResources = await moduleBundlerStub.getCall(0).returnValue; + t.is(workspace.write.callCount, 2, + "workspace.write should have been called twice"); + t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0].bundle], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(0).args[0], bundleResources[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + t.deepEqual(workspace.write.getCall(1).args, [bundleResources[0].sourceMap], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(1).args[0], bundleResources[0].sourceMap, + "workspace.write should have been called with exact resource returned by moduleBundler"); + + t.is(taskUtil.getTag.callCount, 0, "taskUtil.getTag should not have been called by the task"); + + // Testing the combo.filter function + + const resourceForFilterTest = {}; + taskUtil.getTag.returns(true); + t.false(filterFunction(resourceForFilterTest), + "Filter function should return false if the tag is set"); + taskUtil.getTag.returns(false); + t.true(filterFunction(resourceForFilterTest), + "Filter function should return true if the tag is not set"); + + t.is(taskUtil.getTag.callCount, 2); + t.deepEqual(taskUtil.getTag.getCall(0).args, [resourceForFilterTest, taskUtil.STANDARD_TAGS.IsDebugVariant], + "Resource filtering should be done for debug variants as optimize=true is the default"); + t.deepEqual(taskUtil.getTag.getCall(1).args, [resourceForFilterTest, taskUtil.STANDARD_TAGS.IsDebugVariant], + "Resource filtering should be done for debug variants as optimize=true is the default"); +}); + +test.serial("generateBundle: bundleOptions: optimize=false, with taskUtil", async (t) => { + const { + generateBundle, moduleBundlerStub, ReaderCollectionPrioritizedStub, + workspace, dependencies, combo, + taskUtil + } = t.context; + + const resources = [ + { + getPath: sinon.stub().returns("/resources/my/app/module-dbg.js") + }, + { + getPath: sinon.stub().returns("/resources/my/app/Main.view.xml") + } + ]; + + const filteredCombo = { + byGlob: sinon.stub().resolves(resources) + }; + combo.filter.returns(filteredCombo); + + taskUtil.getTag.returns(false) + .withArgs("/resources/my/app/module-dbg.js", taskUtil.STANDARD_TAGS.IsDebugVariant) + .returns(true); + + moduleBundlerStub.resolves([ + { + name: "my/app/customBundle.js", + bundle: {"fake": "bundle"}, + sourceMap: {"fake": "sourceMap"} + } + ]); + + // bundleDefinition can be empty here as the moduleBundler is mocked + const bundleDefinition = {}; + const bundleOptions = {optimize: false}; + + await generateBundle({ + workspace, + dependencies, + taskUtil, + options: { + projectName: "Test Application", + bundleDefinition, + bundleOptions + } + }); + + t.is(moduleBundlerStub.callCount, 1, "moduleBundler should have been called once"); + t.deepEqual(moduleBundlerStub.getCall(0).args, [{ + options: { + bundleDefinition, + bundleOptions, + moduleNameMapping: { + "/resources/my/app/module-dbg.js": "my/app/module.js" + } + }, + resources + }]); + + t.is(combo.byGlob.callCount, 0, + "combo.byGlob should not have been called"); + + t.is(combo.filter.callCount, 1, + "combo.filter should have been called once"); + t.is(combo.filter.getCall(0).args.length, 1, + "combo.filter should have been called with one argument"); + const filterFunction = combo.filter.getCall(0).args[0]; + t.is(typeof filterFunction, "function", + "combo.filter should have been called with a function"); + + t.is(filteredCombo.byGlob.callCount, 1, + "filteredCombo.byGlob should have been called once"); + t.deepEqual(filteredCombo.byGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], + "filteredCombo.byGlob should have been called with expected pattern"); + + t.is(taskUtil.getTag.callCount, 2); + t.deepEqual(taskUtil.getTag.getCall(0).args, + ["/resources/my/app/Main.view.xml", taskUtil.STANDARD_TAGS.IsDebugVariant], + "First resource should be checked whether it is a debug variant"); + t.deepEqual(taskUtil.getTag.getCall(1).args, + ["/resources/my/app/module-dbg.js", taskUtil.STANDARD_TAGS.IsDebugVariant], + "Second resource should be checked whether it is a debug variant"); + + t.is(taskUtil.clearTag.callCount, 1); + t.deepEqual(taskUtil.clearTag.getCall(0).args, + [{"fake": "sourceMap"}, taskUtil.STANDARD_TAGS.OmitFromBuildResult], + "OmitFromBuildResult tag should be cleared on source map resource"); + + t.is(ReaderCollectionPrioritizedStub.callCount, 1, + "ReaderCollectionPrioritized should have been called once"); + t.true(ReaderCollectionPrioritizedStub.calledWithNew(), + "ReaderCollectionPrioritized should have been called with 'new'"); + + const bundleResources = await moduleBundlerStub.getCall(0).returnValue; + t.is(workspace.write.callCount, 2, + "workspace.write should have been called twice"); + t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0].bundle], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(0).args[0], bundleResources[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + t.deepEqual(workspace.write.getCall(1).args, [bundleResources[0].sourceMap], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(1).args[0], bundleResources[0].sourceMap, + "workspace.write should have been called with exact resource returned by moduleBundler"); + + taskUtil.getTag.reset(); // Reset stub as it has already been called by generateBundle + t.is(taskUtil.getTag.callCount, 0); + + // Testing the combo.filter function + + const resourceForFilterTest = {}; + taskUtil.getTag.returns(true); + t.false(filterFunction(resourceForFilterTest), + "Filter function should return false if the tag is set"); + taskUtil.getTag.returns(false); + t.true(filterFunction(resourceForFilterTest), + "Filter function should return true if the tag is not set"); + + t.is(taskUtil.getTag.callCount, 2); + t.deepEqual(taskUtil.getTag.getCall(0).args, [resourceForFilterTest, taskUtil.STANDARD_TAGS.HasDebugVariant], + "Resource filtering should be done for resources that have a debug variant, as optimize=false is set"); + t.deepEqual(taskUtil.getTag.getCall(1).args, [resourceForFilterTest, taskUtil.STANDARD_TAGS.HasDebugVariant], + "Resource filtering should be done for resources that have a debug variant, as optimize=false is set"); +}); + +test.serial("generateBundle: bundleOptions: sourceMap=false, with taskUtil", async (t) => { + const { + generateBundle, moduleBundlerStub, ReaderCollectionPrioritizedStub, + workspace, dependencies, combo, + taskUtil + } = t.context; + + const resources = [ + { + getPath: sinon.stub().returns("/resources/my/app/module-dbg.js") + }, + { + getPath: sinon.stub().returns("/resources/my/app/Main.view.xml") + } + ]; + + const filteredCombo = { + byGlob: sinon.stub().resolves(resources) + }; + combo.filter.returns(filteredCombo); + + taskUtil.getTag.returns(false) + .withArgs("/resources/my/app/module-dbg.js", taskUtil.STANDARD_TAGS.IsDebugVariant) + .returns(true); + + moduleBundlerStub.resolves([ + { + name: "my/app/customBundle.js", + bundle: {"fake": "bundle"} + } + ]); + + // bundleDefinition can be empty here as the moduleBundler is mocked + const bundleDefinition = {}; + const bundleOptions = {sourceMap: false}; + + await generateBundle({ + workspace, + dependencies, + taskUtil, + options: { + projectName: "Test Application", + bundleDefinition, + bundleOptions + } + }); + + t.is(moduleBundlerStub.callCount, 1, "moduleBundler should have been called once"); + t.deepEqual(moduleBundlerStub.getCall(0).args, [{ + options: { + bundleDefinition, + bundleOptions + }, + resources + }]); + + t.is(combo.byGlob.callCount, 0, + "combo.byGlob should not have been called"); + + t.is(combo.filter.callCount, 1, + "combo.filter should have been called once"); + t.is(combo.filter.getCall(0).args.length, 1, + "combo.filter should have been called with one argument"); + const filterFunction = combo.filter.getCall(0).args[0]; + t.is(typeof filterFunction, "function", + "combo.filter should have been called with a function"); + + t.is(filteredCombo.byGlob.callCount, 1, + "filteredCombo.byGlob should have been called once"); + t.deepEqual(filteredCombo.byGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], + "filteredCombo.byGlob should have been called with expected pattern"); + + t.is(taskUtil.getTag.callCount, 0); + + t.is(taskUtil.clearTag.callCount, 0, + "clearTag should not be called as no source map resource is created"); + + t.is(ReaderCollectionPrioritizedStub.callCount, 1, + "ReaderCollectionPrioritized should have been called once"); + t.true(ReaderCollectionPrioritizedStub.calledWithNew(), + "ReaderCollectionPrioritized should have been called with 'new'"); + + const bundleResources = await moduleBundlerStub.getCall(0).returnValue; + t.is(workspace.write.callCount, 1, + "workspace.write should have been called once"); + t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0].bundle], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(0).args[0], bundleResources[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + + taskUtil.getTag.reset(); // Reset stub as it has already been called by generateBundle + t.is(taskUtil.getTag.callCount, 0); + + // Testing the combo.filter function + + const resourceForFilterTest = {}; + taskUtil.getTag.returns(true); + t.false(filterFunction(resourceForFilterTest), + "Filter function should return false if the tag is set"); + taskUtil.getTag.returns(false); + t.true(filterFunction(resourceForFilterTest), + "Filter function should return true if the tag is not set"); + + t.is(taskUtil.getTag.callCount, 2); + t.deepEqual(taskUtil.getTag.getCall(0).args, [resourceForFilterTest, taskUtil.STANDARD_TAGS.IsDebugVariant], + "Resource filtering should be done for debug variants as optimize=true is the default"); + t.deepEqual(taskUtil.getTag.getCall(1).args, [resourceForFilterTest, taskUtil.STANDARD_TAGS.IsDebugVariant], + "Resource filtering should be done for debug variants as optimize=true is the default"); +}); + +test.serial("generateBundle: Empty bundle (skipIfEmpty=true)", async (t) => { + const { + generateBundle, moduleBundlerStub, ReaderCollectionPrioritizedStub, + workspace, dependencies, combo, + taskUtil + } = t.context; + + const resources = []; + + const filteredCombo = { + byGlob: sinon.stub().resolves(resources) + }; + combo.filter.returns(filteredCombo); + + moduleBundlerStub.resolves([undefined]); + + // bundleDefinition can be empty here as the moduleBundler is mocked + const bundleDefinition = {}; + const bundleOptions = {skipIfEmpty: true}; + + await generateBundle({ + workspace, + dependencies, + taskUtil, + options: { + projectName: "Test Application", + bundleDefinition, + bundleOptions + } + }); + + t.is(moduleBundlerStub.callCount, 1, "moduleBundler should have been called once"); + t.deepEqual(moduleBundlerStub.getCall(0).args, [{ + options: { + bundleDefinition, + bundleOptions + }, + resources + }]); + + t.is(combo.byGlob.callCount, 0, + "combo.byGlob should not have been called"); + + t.is(combo.filter.callCount, 1, + "combo.filter should have been called once"); + t.is(combo.filter.getCall(0).args.length, 1, + "combo.filter should have been called with one argument"); + const filterFunction = combo.filter.getCall(0).args[0]; + t.is(typeof filterFunction, "function", + "combo.filter should have been called with a function"); + + t.is(filteredCombo.byGlob.callCount, 1, + "filteredCombo.byGlob should have been called once"); + t.deepEqual(filteredCombo.byGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], + "filteredCombo.byGlob should have been called with expected pattern"); + + t.is(taskUtil.getTag.callCount, 0); + + t.is(taskUtil.clearTag.callCount, 0, + "clearTag should not be called as no source map resource is created"); + + t.is(ReaderCollectionPrioritizedStub.callCount, 1, + "ReaderCollectionPrioritized should have been called once"); + t.true(ReaderCollectionPrioritizedStub.calledWithNew(), + "ReaderCollectionPrioritized should have been called with 'new'"); + + t.is(workspace.write.callCount, 0, + "workspace.write should have been called once"); +}); + +test.serial("generateBundle: Throws error when non-debug name can't be resolved", async (t) => { + const { + generateBundle, moduleBundlerStub, + workspace, dependencies, combo, + taskUtil + } = t.context; + + const resources = [ + { + getPath: sinon.stub().returns("/resources/my/app/module.js") + } + ]; + + const filteredCombo = { + byGlob: sinon.stub().resolves(resources) + }; + combo.filter.returns(filteredCombo); + + moduleBundlerStub.resolves([undefined]); + + // bundleDefinition can be empty here as the moduleBundler is mocked + const bundleDefinition = {}; + const bundleOptions = {optimize: false}; + + taskUtil.getTag.returns(true); + sinon.stub(ModuleName, "getNonDebugName").returns(false); + + await t.throwsAsync(generateBundle({ + workspace, + dependencies, + taskUtil, + options: { + projectName: "Test Application", + bundleDefinition, + bundleOptions + } + }), { + message: "Failed to resolve non-debug name for /resources/my/app/module.js" + }); +}); diff --git a/test/lib/tasks/bundlers/generateComponentPreload.js b/test/lib/tasks/bundlers/generateComponentPreload.js index fc6546139..4cd92f9a9 100644 --- a/test/lib/tasks/bundlers/generateComponentPreload.js +++ b/test/lib/tasks/bundlers/generateComponentPreload.js @@ -26,7 +26,7 @@ test.beforeEach((t) => { ReaderCollectionPrioritized: t.context.ReaderCollectionPrioritizedStub }); - t.context.moduleBundlerStub = sinon.stub().resolves([{"fake": "resource"}]); + t.context.moduleBundlerStub = sinon.stub().resolves([]); mock("../../../../lib/processors/bundlers/moduleBundler", t.context.moduleBundlerStub); t.context.generateComponentPreload = mock.reRequire("../../../../lib/tasks/bundlers/generateComponentPreload"); @@ -48,6 +48,14 @@ test.serial("generateComponentPreload - one namespace", async (t) => { ]; comboByGlob.resolves(resources); + moduleBundlerStub.resolves([ + { + name: "my/app/Component-preload.js", + bundle: {"fake": "bundle"}, + sourceMap: {"fake": "sourceMap"} + } + ]); + await generateComponentPreload({ workspace, dependencies, @@ -99,7 +107,7 @@ test.serial("generateComponentPreload - one namespace", async (t) => { t.is(comboByGlob.callCount, 1, "combo.byGlob should have been called once"); - t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library}"], + t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], "combo.byGlob should have been called with expected pattern"); t.is(ReaderCollectionPrioritizedStub.callCount, 1, @@ -108,11 +116,15 @@ test.serial("generateComponentPreload - one namespace", async (t) => { "ReaderCollectionPrioritized should have been called with 'new'"); const bundleResources = await moduleBundlerStub.getCall(0).returnValue; - t.is(workspace.write.callCount, 1, - "workspace.write should have been called once"); - t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0]], + t.is(workspace.write.callCount, 2, + "workspace.write should have been called twice"); + t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0].bundle], "workspace.write should have been called with expected args"); - t.is(workspace.write.getCall(0).args[0], bundleResources[0], + t.is(workspace.write.getCall(0).args[0], bundleResources[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + t.deepEqual(workspace.write.getCall(1).args, [bundleResources[0].sourceMap], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(1).args[0], bundleResources[0].sourceMap, "workspace.write should have been called with exact resource returned by moduleBundler"); }); @@ -127,6 +139,14 @@ test.serial("generateComponentPreload - one namespace - excludes", async (t) => ]; comboByGlob.resolves(resources); + moduleBundlerStub.resolves([ + { + name: "my/app/Component-preload.js", + bundle: {"fake": "bundle"}, + sourceMap: {"fake": "sourceMap"} + } + ]); + await generateComponentPreload({ workspace, dependencies, @@ -184,7 +204,7 @@ test.serial("generateComponentPreload - one namespace - excludes", async (t) => t.is(comboByGlob.callCount, 1, "combo.byGlob should have been called once"); - t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library}"], + t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], "combo.byGlob should have been called with expected pattern"); t.is(ReaderCollectionPrioritizedStub.callCount, 1, @@ -193,11 +213,15 @@ test.serial("generateComponentPreload - one namespace - excludes", async (t) => "ReaderCollectionPrioritized should have been called with 'new'"); const bundleResources = await moduleBundlerStub.getCall(0).returnValue; - t.is(workspace.write.callCount, 1, - "workspace.write should have been called once"); - t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0]], + t.is(workspace.write.callCount, 2, + "workspace.write should have been called twice"); + t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0].bundle], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(0).args[0], bundleResources[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + t.deepEqual(workspace.write.getCall(1).args, [bundleResources[0].sourceMap], "workspace.write should have been called with expected args"); - t.is(workspace.write.getCall(0).args[0], bundleResources[0], + t.is(workspace.write.getCall(1).args[0], bundleResources[0].sourceMap, "workspace.write should have been called with exact resource returned by moduleBundler"); }); @@ -212,6 +236,14 @@ test.serial("generateComponentPreload - one namespace - excludes w/o namespace", ]; comboByGlob.resolves(resources); + moduleBundlerStub.resolves([ + { + name: "my/app/Component-preload.js", + bundle: {"fake": "bundle"}, + sourceMap: {"fake": "sourceMap"} + } + ]); + await generateComponentPreload({ workspace, dependencies, @@ -268,7 +300,7 @@ test.serial("generateComponentPreload - one namespace - excludes w/o namespace", t.is(comboByGlob.callCount, 1, "combo.byGlob should have been called once"); - t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library}"], + t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], "combo.byGlob should have been called with expected pattern"); t.is(ReaderCollectionPrioritizedStub.callCount, 1, @@ -277,11 +309,15 @@ test.serial("generateComponentPreload - one namespace - excludes w/o namespace", "ReaderCollectionPrioritized should have been called with 'new'"); const bundleResources = await moduleBundlerStub.getCall(0).returnValue; - t.is(workspace.write.callCount, 1, - "workspace.write should have been called once"); - t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0]], + t.is(workspace.write.callCount, 2, + "workspace.write should have been called twice"); + t.deepEqual(workspace.write.getCall(0).args, [bundleResources[0].bundle], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(0).args[0], bundleResources[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + t.deepEqual(workspace.write.getCall(1).args, [bundleResources[0].sourceMap], "workspace.write should have been called with expected args"); - t.is(workspace.write.getCall(0).args[0], bundleResources[0], + t.is(workspace.write.getCall(1).args[0], bundleResources[0].sourceMap, "workspace.write should have been called with exact resource returned by moduleBundler"); }); @@ -296,6 +332,21 @@ test.serial("generateComponentPreload - multiple namespaces - excludes", async ( ]; comboByGlob.resolves(resources); + moduleBundlerStub.onFirstCall().resolves([ + { + name: "my/app1/Component-preload.js", + bundle: {"fake": "bundle1"}, + sourceMap: {"fake": "sourceMap1"} + } + ]); + moduleBundlerStub.onSecondCall().resolves([ + { + name: "my/app2/Component-preload.js", + bundle: {"fake": "bundle2"}, + sourceMap: {"fake": "sourceMap2"} + } + ]); + await generateComponentPreload({ workspace, dependencies, @@ -400,7 +451,7 @@ test.serial("generateComponentPreload - multiple namespaces - excludes", async ( t.is(comboByGlob.callCount, 1, "combo.byGlob should have been called once"); - t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library}"], + t.deepEqual(comboByGlob.getCall(0).args, ["/resources/**/*.{js,json,xml,html,properties,library,js.map}"], "combo.byGlob should have been called with expected pattern"); t.is(ReaderCollectionPrioritizedStub.callCount, 1, @@ -408,17 +459,28 @@ test.serial("generateComponentPreload - multiple namespaces - excludes", async ( t.true(ReaderCollectionPrioritizedStub.calledWithNew(), "ReaderCollectionPrioritized should have been called with 'new'"); - const bundleResources1 = await moduleBundlerStub.getCall(0).returnValue; - const bundleResources2 = await moduleBundlerStub.getCall(1).returnValue; - t.is(workspace.write.callCount, 2, - "workspace.write should have been called twice"); - t.deepEqual(workspace.write.getCall(0).args, [bundleResources1[0]], + const bundleObj1 = await moduleBundlerStub.getCall(0).returnValue; + const bundleObj2 = await moduleBundlerStub.getCall(1).returnValue; + + t.is(workspace.write.callCount, 4, + "workspace.write should have been called 4 times (2x .js, 2x .js.map)"); + + t.deepEqual(workspace.write.getCall(0).args, [bundleObj1[0].bundle], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(0).args[0], bundleObj1[0].bundle, + "workspace.write should have been called with exact resource returned by moduleBundler"); + t.deepEqual(workspace.write.getCall(1).args, [bundleObj1[0].sourceMap], + "workspace.write should have been called with expected args"); + t.is(workspace.write.getCall(1).args[0], bundleObj1[0].sourceMap, + "workspace.write should have been called with exact resource returned by moduleBundler"); + + t.deepEqual(workspace.write.getCall(2).args, [bundleObj2[0].bundle], "workspace.write should have been called with expected args"); - t.is(workspace.write.getCall(0).args[0], bundleResources1[0], + t.is(workspace.write.getCall(2).args[0], bundleObj2[0].bundle, "workspace.write should have been called with exact resource returned by moduleBundler"); - t.deepEqual(workspace.write.getCall(1).args, [bundleResources2[0]], + t.deepEqual(workspace.write.getCall(3).args, [bundleObj2[0].sourceMap], "workspace.write should have been called with expected args"); - t.is(workspace.write.getCall(1).args[0], bundleResources2[0], + t.is(workspace.write.getCall(3).args[0], bundleObj2[0].sourceMap, "workspace.write should have been called with exact resource returned by moduleBundler"); }); diff --git a/test/lib/tasks/bundlers/generateLibraryPreload.integration.js b/test/lib/tasks/bundlers/generateLibraryPreload.integration.js index 6fc816ac0..f45e38a64 100644 --- a/test/lib/tasks/bundlers/generateLibraryPreload.integration.js +++ b/test/lib/tasks/bundlers/generateLibraryPreload.integration.js @@ -46,7 +46,7 @@ test("integration: build library.d with library preload", async (t) => { assert.directoryDeepEqual(destPath, expectedPath); // Check for all file contents - t.deepEqual(expectedFiles.length, 4, "4 files are expected"); + t.deepEqual(expectedFiles.length, 5, "5 files are expected"); expectedFiles.forEach((expectedFile) => { const relativeFile = path.relative(expectedPath, expectedFile); const destFile = path.join(destPath, relativeFile); @@ -85,7 +85,7 @@ test("integration: build sap.ui.core with library preload", async (t) => { const destPath = "./test/tmp/build/sap.ui.core/preload"; const expectedPath = "./test/expected/build/sap.ui.core/preload"; const excludedTasks = ["*"]; - const includedTasks = ["generateLibraryPreload"]; + const includedTasks = ["minify", "generateLibraryPreload"]; return t.notThrowsAsync(builder.build({ tree: sapUiCoreTree, @@ -99,7 +99,6 @@ test("integration: build sap.ui.core with library preload", async (t) => { assert.directoryDeepEqual(destPath, expectedPath); // Check for all file contents - t.deepEqual(expectedFiles.length, 10, "10 files are expected"); expectedFiles.forEach((expectedFile) => { const relativeFile = path.relative(expectedPath, expectedFile); const destFile = path.join(destPath, relativeFile); @@ -162,7 +161,8 @@ test("integration: generateLibraryPreload", async (t) => { const writtenResources = await writer.byGlob(["**/**"]); t.deepEqual(writtenResources.map((r) => r.getPath()).sort(), [ - "/resources/my/test/lib/library-preload.js" + "/resources/my/test/lib/library-preload.js", + "/resources/my/test/lib/library-preload.js.map" ], "Expected preload files should be created"); const libraryPreload = await writer.byPath("/resources/my/test/lib/library-preload.js"); @@ -172,6 +172,12 @@ test("integration: generateLibraryPreload", async (t) => { "library-preload should be a bundle"); t.regex(libraryPreloadContent, new RegExp("my/test/lib/library"), "library-preload should include library.js module"); + + const libraryPreloadSourceMap = await writer.byPath("/resources/my/test/lib/library-preload.js.map"); + const libraryPreloadSourceMapContent = await libraryPreloadSourceMap.getString(); + t.notThrows(() => { + JSON.parse(libraryPreloadSourceMapContent); + }, "Source map file should have valid JSON content"); }); test("integration: generateLibraryPreload with designtime and support files", async (t) => { @@ -222,8 +228,11 @@ test("integration: generateLibraryPreload with designtime and support files", as const writtenResources = await writer.byGlob(["**/**"]); t.deepEqual(writtenResources.map((r) => r.getPath()).sort(), [ "/resources/my/test/lib/designtime/library-preload.designtime.js", + "/resources/my/test/lib/designtime/library-preload.designtime.js.map", "/resources/my/test/lib/library-preload.js", - "/resources/my/test/lib/library-preload.support.js" + "/resources/my/test/lib/library-preload.js.map", + "/resources/my/test/lib/library-preload.support.js", + "/resources/my/test/lib/library-preload.support.js.map", ], "Expected preload files should be created"); const libraryPreload = await writer.byPath("/resources/my/test/lib/library-preload.js"); @@ -253,4 +262,24 @@ test("integration: generateLibraryPreload with designtime and support files", as "library-preload.support should include some.support module"); t.regex(supportPreloadContent, new RegExp("my/test/lib/support/foo\\.support"), "library-preload.support should include support/foo.support module"); + + const libraryPreloadSourceMap = await writer.byPath("/resources/my/test/lib/library-preload.js.map"); + const libraryPreloadSourceMapContent = await libraryPreloadSourceMap.getString(); + t.notThrows(() => { + JSON.parse(libraryPreloadSourceMapContent); + }, "Source map file should have valid JSON content"); + + const designtimePreloadSourceMap = + await writer.byPath("/resources/my/test/lib/designtime/library-preload.designtime.js.map"); + const designtimePreloadSourceMapContent = await designtimePreloadSourceMap.getString(); + t.notThrows(() => { + JSON.parse(designtimePreloadSourceMapContent); + }, "Source map file should have valid JSON content"); + + const supportPreloadSourceMap = + await writer.byPath("/resources/my/test/lib/library-preload.support.js.map"); + const supportPreloadSourceMapContent = await supportPreloadSourceMap.getString(); + t.notThrows(() => { + JSON.parse(supportPreloadSourceMapContent); + }, "Source map file should have valid JSON content"); }); diff --git a/test/lib/tasks/bundlers/generateLibraryPreload.js b/test/lib/tasks/bundlers/generateLibraryPreload.js index 7b281d46f..4130f7098 100644 --- a/test/lib/tasks/bundlers/generateLibraryPreload.js +++ b/test/lib/tasks/bundlers/generateLibraryPreload.js @@ -18,10 +18,13 @@ test.beforeEach((t) => { t.context.dependencies = {}; t.context.comboByGlob = sinon.stub().resolves([]); + t.context.combo = { + byGlob: t.context.comboByGlob, + }; + t.context.combo.filter = sinon.stub().returns(t.context.combo); + t.context.ReaderCollectionPrioritizedStub = sinon.stub(); - t.context.ReaderCollectionPrioritizedStub.returns({ - byGlob: t.context.comboByGlob - }); + t.context.ReaderCollectionPrioritizedStub.returns(t.context.combo); mock("@ui5/fs", { ReaderCollectionPrioritized: t.context.ReaderCollectionPrioritizedStub }); @@ -1361,6 +1364,46 @@ test.serial("generateLibraryPreload for sap.ui.core with own bundle configuratio "ReaderCollectionPrioritized should have been called with 'new'"); }); +test.serial("Error: Failed to resolve non-debug name", async (t) => { + const { + generateLibraryPreload, + workspace, dependencies, comboByGlob + } = t.context; + const resources = [ + {getPath: sinon.stub().returns("/resources/resource-tagged-as-debug-variant.js")} + ]; + comboByGlob.resolves(resources); + + workspace.byGlob.resolves([ + {getPath: sinon.stub().returns("/resources/sap/ui/core/.library")} + ]); + + const taskUtil = { + getTag: sinon.stub().returns(false), + STANDARD_TAGS: { + HasDebugVariant: "", + IsDebugVariant: "", + OmitFromBuildResult: "" + } + }; + taskUtil.getTag + .withArgs("/resources/resource-tagged-as-debug-variant.js", taskUtil.STANDARD_TAGS.IsDebugVariant) + .returns(true); + + await t.throwsAsync(generateLibraryPreload({ + workspace, + dependencies, + taskUtil, + options: { + projectName: "sap.ui.core", + // Should be ignored for hardcoded sap.ui.core bundle configuration + excludes: ["sap/ui/core/**"] + } + }), { + message: "Failed to resolve non-debug name for /resources/resource-tagged-as-debug-variant.js" + }); +}); + test.serial("generateLibraryPreload with excludes", async (t) => { const { generateLibraryPreload, moduleBundlerStub, ReaderCollectionPrioritizedStub, diff --git a/test/lib/tasks/bundlers/generateManifestBundle.integration.js b/test/lib/tasks/bundlers/generateManifestBundle.integration.js index 522291b05..81eb78ec0 100644 --- a/test/lib/tasks/bundlers/generateManifestBundle.integration.js +++ b/test/lib/tasks/bundlers/generateManifestBundle.integration.js @@ -53,7 +53,7 @@ test("integration: Build application.b with manifestBundler", (t) => { const destFile = path.join(destBundle, relativeFile); assert.fileEqual(destFile, expectedFile); }); - t.pass(); + t.pass("No assertion exception"); }); }); diff --git a/test/lib/tasks/bundlers/generateStandaloneAppBundle.integration.js b/test/lib/tasks/bundlers/generateStandaloneAppBundle.integration.js index 7b57bb565..88af852e7 100644 --- a/test/lib/tasks/bundlers/generateStandaloneAppBundle.integration.js +++ b/test/lib/tasks/bundlers/generateStandaloneAppBundle.integration.js @@ -34,7 +34,7 @@ test("integration: build application.b standalone", async (t) => { const destPath = "./test/tmp/build/application.b/standalone"; const expectedPath = "./test/expected/build/application.b/standalone"; const excludedTasks = ["*"]; - const includedTasks = ["generateStandaloneAppBundle"]; + const includedTasks = ["minify", "generateStandaloneAppBundle"]; return builder.build({ tree: applicationBTree, @@ -48,12 +48,12 @@ test("integration: build application.b standalone", async (t) => { assert.directoryDeepEqual(destPath, expectedPath, "Result directory structure correct"); // Check for all file contents - t.deepEqual(expectedFiles.length, 11, "11 files are expected"); expectedFiles.forEach((expectedFile) => { const relativeFile = path.relative(expectedPath, expectedFile); const destFile = path.join(destPath, relativeFile); assert.fileEqual(destFile, expectedFile, "Correct file content"); }); + t.pass("No assertion exception"); }); }); diff --git a/test/lib/tasks/bundlers/generateStandaloneAppBundle.js b/test/lib/tasks/bundlers/generateStandaloneAppBundle.js index 774092cdf..3d70ee55a 100644 --- a/test/lib/tasks/bundlers/generateStandaloneAppBundle.js +++ b/test/lib/tasks/bundlers/generateStandaloneAppBundle.js @@ -9,9 +9,20 @@ let generateStandaloneAppBundle = require("../../../../lib/tasks/bundlers/genera test.beforeEach((t) => { // Stubbing processors/bundlers/moduleBundler t.context.moduleBundlerStub = sinon.stub(); - t.context.moduleBundlerStub.resolves(["I am a resource"]); + t.context.moduleBundlerStub.resolves([{bundle: "I am a resource", sourceMap: "I am a source map"}]); mock("../../../../lib/processors/bundlers/moduleBundler", t.context.moduleBundlerStub); + t.context.taskUtil = { + getTag: sinon.stub().returns(false), + setTag: sinon.stub(), + clearTag: sinon.stub(), + STANDARD_TAGS: { + HasDebugVariant: "", + IsDebugVariant: "", + OmitFromBuildResult: "" + } + }; + // Re-require tested module generateStandaloneAppBundle = mock.reRequire("../../../../lib/tasks/bundlers/generateStandaloneAppBundle"); }); @@ -21,15 +32,19 @@ test.afterEach.always((t) => { sinon.restore(); }); -test.serial("execute module bundler and write results", async (t) => { - const dummyResource = { +function createDummyResource(id) { + return { getPath: function() { - return "ponyPath"; + return "/resources/ponyPath" + id; } }; +} + +test.serial("execute module bundler and write results", async (t) => { + let dummyResourceId = 0; const dummyReaderWriter = { - byGlob: async function() { - return [dummyResource, dummyResource]; + _byGlob: async function() { + return [createDummyResource(dummyResourceId++), createDummyResource(dummyResourceId++)]; }, write: function() {} }; @@ -44,7 +59,7 @@ test.serial("execute module bundler and write results", async (t) => { }; await generateStandaloneAppBundle(params); - t.deepEqual(t.context.moduleBundlerStub.callCount, 2, "moduleBundler should be called once"); + t.deepEqual(t.context.moduleBundlerStub.callCount, 2); const {resources, options} = t.context.moduleBundlerStub.getCall(0).args[0]; t.deepEqual(resources.length, 4, "moduleBundler got supplied with 4 resources"); @@ -73,14 +88,10 @@ test.serial("execute module bundler and write results", async (t) => { }); test.serial("execute module bundler and write results without namespace", async (t) => { - const dummyResource = { - getPath: function() { - return "ponyPath"; - } - }; + let dummyResourceId = 0; const dummyReaderWriter = { - byGlob: async function() { - return [dummyResource, dummyResource]; + _byGlob: async function() { + return [createDummyResource(dummyResourceId++), createDummyResource(dummyResourceId++)]; }, write: function() {} }; @@ -94,7 +105,7 @@ test.serial("execute module bundler and write results without namespace", async }; await generateStandaloneAppBundle(params); - t.deepEqual(t.context.moduleBundlerStub.callCount, 2, "moduleBundler should be called once"); + t.deepEqual(t.context.moduleBundlerStub.callCount, 2); const {resources, options} = t.context.moduleBundlerStub.getCall(0).args[0]; t.deepEqual(resources.length, 4, "moduleBundler got supplied with 4 resources"); @@ -113,14 +124,19 @@ test.serial("execute module bundler and write results without namespace", async test.serial("execute module bundler and write results in evo mode", async (t) => { - const dummyResource = { + let dummyResourceId = 0; + + const ui5LoaderDummyResource = { getPath: function() { return "/resources/ui5loader.js"; // Triggers evo mode } }; const dummyReaderWriter = { - byGlob: async function() { - return [dummyResource, dummyResource]; + _byGlob: async function() { + if (dummyResourceId === 0) { + return [ui5LoaderDummyResource, createDummyResource(dummyResourceId++)]; + } + return [createDummyResource(dummyResourceId++), createDummyResource(dummyResourceId++)]; }, write: function() {} }; @@ -135,7 +151,7 @@ test.serial("execute module bundler and write results in evo mode", async (t) => }; await generateStandaloneAppBundle(params); - t.deepEqual(t.context.moduleBundlerStub.callCount, 2, "moduleBundler should be called once"); + t.deepEqual(t.context.moduleBundlerStub.callCount, 2); const {resources, options} = t.context.moduleBundlerStub.getCall(0).args[0]; t.deepEqual(resources.length, 4, "moduleBundler got supplied with 4 resources"); @@ -151,3 +167,168 @@ test.serial("execute module bundler and write results in evo mode", async (t) => "sap/ui/core/Core.js" ], "Correct filter in second bundle definition section"); }); + +test.serial("execute module bundler with taskUtil", async (t) => { + const {taskUtil} = t.context; + + const dummyResource1 = createDummyResource("1.js"); + const dummyResource2 = createDummyResource("2-dbg.js"); + const dummyResource3 = createDummyResource("3.js"); + const dummyResource4 = createDummyResource("4-dbg.js"); + + taskUtil.getTag.withArgs(dummyResource1, taskUtil.STANDARD_TAGS.HasDebugVariant).returns(true); + taskUtil.getTag.withArgs(dummyResource2.getPath(), taskUtil.STANDARD_TAGS.IsDebugVariant).returns(true); + + const ui5LoaderDummyResource = { + getPath: function() { + return "/resources/ui5loader.js"; // Triggers evo mode + } + }; + const dummyReaderWriter = { + _byGlob: async function() { + return [ + ui5LoaderDummyResource, + dummyResource1, + dummyResource2, + dummyResource3, + dummyResource4, + ]; + }, + write: function() {} + }; + sinon.stub(dummyReaderWriter, "write").resolves(); + const params = { + workspace: dummyReaderWriter, + dependencies: dummyReaderWriter, + taskUtil, + options: { + projectName: "some.project.name", + namespace: "some/project/namespace" + } + }; + await generateStandaloneAppBundle(params); + + t.is(t.context.moduleBundlerStub.callCount, 2); + + t.is(t.context.moduleBundlerStub.getCall(0).args.length, 1); + t.deepEqual(t.context.moduleBundlerStub.getCall(0).args[0].options, { + bundleDefinition: { + defaultFileTypes: [ + ".js", + ".control.xml", + ".fragment.html", + ".fragment.json", + ".fragment.xml", + ".view.html", + ".view.json", + ".view.xml", + ".properties", + ], + name: "sap-ui-custom.js", + sections: [ + { + declareModules: false, + filters: [ + "ui5loader-autoconfig.js", + ], + mode: "raw", + resolve: true, + sort: true, + }, + { + filters: [ + "some/project/namespace/", + "some/project/namespace/**/manifest.json", + "some/project/namespace/changes/changes-bundle.json", + "some/project/namespace/changes/flexibility-bundle.json", + "!some/project/namespace/test/", + "sap/ui/core/Core.js", + ], + mode: "preload", + renderer: true, + resolve: true, + resolveConditional: true, + }, + { + filters: [ + "sap/ui/core/Core.js", + ], + mode: "require", + }, + ], + } + }); + + t.is(t.context.moduleBundlerStub.getCall(1).args.length, 1); + t.deepEqual(t.context.moduleBundlerStub.getCall(1).args[0].options, { + bundleDefinition: { + defaultFileTypes: [ + ".js", + ".control.xml", + ".fragment.html", + ".fragment.json", + ".fragment.xml", + ".view.html", + ".view.json", + ".view.xml", + ".properties", + ], + name: "sap-ui-custom-dbg.js", + sections: [ + { + declareModules: false, + filters: [ + "ui5loader-autoconfig.js", + ], + mode: "raw", + resolve: true, + sort: true, + }, + { + filters: [ + "sap/ui/core/Core.js", + ], + mode: "require", + }, + ], + }, + bundleOptions: { + optimize: false + }, + moduleNameMapping: { + "/resources/ponyPath2-dbg.js": "ponyPath2.js" + } + }); +}); + +test.serial("Error: Failed to resolve non-debug name", async (t) => { + // NOTE: This scenario is not expected to happen as the "minify" task sets the IsDebugVariant tag + // only for resources that adhere to the debug file name pattern + + const {taskUtil} = t.context; + const dummyResource1 = createDummyResource("1.js"); + taskUtil.getTag.withArgs(dummyResource1.getPath(), taskUtil.STANDARD_TAGS.IsDebugVariant).returns(true); + + const dummyReaderWriter = { + _byGlob: async function() { + return [ + dummyResource1, + ]; + }, + write: function() {} + }; + sinon.stub(dummyReaderWriter, "write").resolves(); + const params = { + workspace: dummyReaderWriter, + dependencies: dummyReaderWriter, + taskUtil, + options: { + projectName: "some.project.name", + namespace: "some/project/namespace" + } + }; + + await t.throwsAsync(generateStandaloneAppBundle(params), { + message: "Failed to resolve non-debug name for /resources/ponyPath1.js" + }); +}); diff --git a/test/lib/tasks/createDebugFiles.js b/test/lib/tasks/createDebugFiles.js deleted file mode 100644 index 0f49d7fdf..000000000 --- a/test/lib/tasks/createDebugFiles.js +++ /dev/null @@ -1,419 +0,0 @@ -const test = require("ava"); - -const createDebugFiles = require("../../../lib/tasks/createDebugFiles"); -const ui5Fs = require("@ui5/fs"); -const resourceFactory = ui5Fs.resourceFactory; - -test("integration: test.js: dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - - const resource = resourceFactory.createResource({ - path: "/test.js", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test-dbg.js in target"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), content, "Correct content"); - }); - }); -}); - -test("integration: test.view.js: dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - - const resource = resourceFactory.createResource({ - path: "/test.view.js", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg.view.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test-dbg.view.js in target"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), content, "Correct content"); - }); - }); -}); - -test("integration: test.controller.js: dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - - const resource = resourceFactory.createResource({ - path: "/test.controller.js", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg.controller.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test-dbg.controller.js in target"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), content, "Correct content"); - }); - }); -}); - -test("integration: test.designtime.js: dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "sap.ui.define([],function(){return {};});"; - - const resource = resourceFactory.createResource({ - path: "/test.designtime.js", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg.designtime.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test-dbg.designtime.js in target"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), content, "Correct content"); - }); - }); -}); - -test("integration: test.fragment.js: dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - - const resource = resourceFactory.createResource({ - path: "/test.fragment.js", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg.fragment.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test-dbg.fragment.js in target locator"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), content, "Correct content"); - }); - }); -}); - -test("integration: test.support.js: dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "sap.ui.define([],function(){return {};});"; - - const resource = resourceFactory.createResource({ - path: "/test.support.js", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg.support.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test-dbg.support.js in target"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), content, "Correct content"); - }); - }); -}); - -test("integration: test-dbg.js: dbg-dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - - const resource = resourceFactory.createResource({ - path: "/test-dbg.js", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg-dbg.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test-dbg-dbg.js in target locator"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), content, "Correct content"); - }); - }); -}); - -test("integration: test.xml: *no* dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = ""; - - const resource = resourceFactory.createResource({ - path: "/test.xml", - string: content - }); - - return sourceAdapter.write(resource).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return sourceAdapter.byPath("/test-dbg.xml").then((resource) => { - if (!resource) { - t.pass("Could not find /test-dbg.xml in target locator as it is not a JavaScript file"); - } else { - t.fail("Found /test-dbg.xml which should not be there (no JavaScript file)"); - } - }); - }); - }); -}); - -test("integration: test1.js, test2.js: dbg file creation", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - - const resources = [ - resourceFactory.createResource({ - path: "/test1.js", - string: content - }), - resourceFactory.createResource({ - path: "/test2.js", - string: content - }) - ]; - - return Promise.all(resources.map((resource) => { - return sourceAdapter.write(resource); - })).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return Promise.all([ - sourceAdapter.byPath("/test1-dbg.js"), - sourceAdapter.byPath("/test2-dbg.js") - ]).then((resources) => { - if (!resources || !resources[0] || !resources[1]) { - t.fail("Could not find /test1-dbg.js and/or /test2-dbg.js in target locator"); - } else { - return Promise.all(resources.map((resource) => { - return resource.getBuffer(); - })); - } - }); - }).then((buffers) => { - t.deepEqual(buffers[0].toString(), content, "Content of /test1-dbg.js is correct"); - t.deepEqual(buffers[1].toString(), content, "Content of /test2-dbg.js is correct"); - }); - }); -}); - -test("integration: dbg file creation should not overwrite the existing -dbg file", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - const resource = resourceFactory.createResource({ - path: "/test1.js", - string: content - }); - - const contentDebug = "console.log('Hello Debug World')"; - const debugResource = resourceFactory.createResource({ - path: "/test1-dbg.js", - string: contentDebug - }); - - const workspace = resourceFactory.createWorkspace({ - reader: sourceAdapter - }); - - return Promise.all([ - sourceAdapter.write(resource), - workspace.write(debugResource) - ]).then(() => { - return createDebugFiles({ - workspace, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return workspace.byPath("/test1-dbg.js").then((resource) => { - if (!resource) { - t.fail("Could not find the existing /test1-dbg.js"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - t.deepEqual(buffer.toString(), contentDebug, "Content of /test1-dbg.js is correct"); - }); - }); -}); - -test("integration: add '-dbg' suffix only to files and not to the folders in the path", (t) => { - const sourceAdapter = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const content = "console.log('Hello World');"; - const resources = [ - resourceFactory.createResource({ - path: "/someFolder/test.js/test.js", - string: content - }), - resourceFactory.createResource({ - path: "/someFolder/test.view.js/test.view.js", - string: content - }), - resourceFactory.createResource({ - path: "/someFolder/test.fragment.js/test.fragment.js", - string: content - }), - resourceFactory.createResource({ - path: "/someFolder/test.controller.js/test.controller.js", - string: content - }), - resourceFactory.createResource({ - path: "/someFolder/test.designtime.js/test.designtime.js", - string: content - }), - resourceFactory.createResource({ - path: "/someFolder/test.support.js/test.support.js", - string: content - }) - ]; - - return Promise.all(resources.map((resource) => { - return sourceAdapter.write(resource); - })).then(() => { - return createDebugFiles({ - workspace: sourceAdapter, - options: { - pattern: "/**/*.js" - } - }).then(() => { - return Promise.all([ - sourceAdapter.byPath("/someFolder/test.js/test-dbg.js"), - sourceAdapter.byPath("/someFolder/test.view.js/test-dbg.view.js"), - sourceAdapter.byPath("/someFolder/test.fragment.js/test-dbg.fragment.js"), - sourceAdapter.byPath("/someFolder/test.controller.js/test-dbg.controller.js"), - sourceAdapter.byPath("/someFolder/test.designtime.js/test-dbg.designtime.js"), - sourceAdapter.byPath("/someFolder/test.support.js/test-dbg.support.js"), - ]).then((resources) => { - if (!resources || resources.length !== 6) { - t.fail("Could not find all created debug files in target locator"); - } else { - return Promise.all(resources.map((resource) => { - return resource.getBuffer(); - })); - } - }); - }).then((buffers) => { - t.deepEqual(buffers[0].toString(), content, - "Content of '/someFolder/test.js/test-dbg.js' is correct" - ); - t.deepEqual(buffers[1].toString(), content, - "Content of '/someFolder/test.view.js/test-dbg.view.js' is correct" - ); - t.deepEqual(buffers[2].toString(), content, - "Content of '/someFolder/test.fragment.js/test-dbg.fragment.js' is correct" - ); - t.deepEqual(buffers[3].toString(), content, - "Content of '/someFolder/test.controller.js/test-dbg.controller.js' is correct" - ); - t.deepEqual(buffers[4].toString(), content, - "Content of '/someFolder/test.designtime.js/test-dbg.designtime.js' is correct" - ); - t.deepEqual(buffers[5].toString(), content, - "Content of '/someFolder/test.support.js/test-dbg.support.js' is correct" - ); - }); - }); -}); diff --git a/test/lib/tasks/generateResourcesJson.js b/test/lib/tasks/generateResourcesJson.js index c46a330de..1c2737605 100644 --- a/test/lib/tasks/generateResourcesJson.js +++ b/test/lib/tasks/generateResourcesJson.js @@ -26,6 +26,12 @@ function createWorkspace() { }); } +function createDependencies() { + return { + byGlob: sinon.stub().resolves([]) + }; +} + test.beforeEach((t) => { t.context.resourceListCreatorStub = sinon.stub(); t.context.resourceListCreatorStub.returns(Promise.resolve([])); @@ -39,18 +45,33 @@ test.afterEach.always((t) => { mock.stopAll(); }); +test.serial("Missing 'dependencies' parameter", async (t) => { + const {generateResourcesJson} = t.context; + + await t.throwsAsync(generateResourcesJson({ + workspace: createWorkspace(), + options: { + projectName: "sap.ui.core" + } + }), { + // Not passing dependencies should result into a TypeError + name: "TypeError" + }); +}); + test.serial("empty resources (sap.ui.core)", async (t) => { const {generateResourcesJson, resourceListCreatorStub} = t.context; const result = await generateResourcesJson({ workspace: createWorkspace(), - dependencies: undefined, + dependencies: createDependencies(), options: { projectName: "sap.ui.core" } }); t.deepEqual(result, undefined, "no resources returned"); t.is(resourceListCreatorStub.callCount, 1); + t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].resources, [], "no resources are passed"); const expectedOptions = { externalResources: { "sap/ui/core": [ @@ -68,13 +89,14 @@ test.serial("empty resources (my.lib)", async (t) => { const result = await generateResourcesJson({ workspace: createWorkspace(), - dependencies: undefined, + dependencies: createDependencies(), options: { projectName: "my.lib" } }); t.deepEqual(result, undefined, "no resources returned"); t.is(t.context.resourceListCreatorStub.callCount, 1); + t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].resources, [], "no resources are passed"); const expectedOptions = {}; t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].options, expectedOptions, "options match"); }); @@ -96,8 +118,73 @@ test.serial("empty resources (my.lib with dependencies)", async (t) => { }); t.deepEqual(result, undefined, "no resources returned"); t.is(t.context.resourceListCreatorStub.callCount, 1); + t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].resources, [], "no resources are passed"); const expectedOptions = {}; t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].options, expectedOptions, "options match"); t.is(t.context.resourceListCreatorStub.getCall(0).args[0].dependencyResources, dependencyResources, "dependencyResources reference should be passed to resourceListCreator"); }); + +test.serial("Resources omitted from build result should be ignored", async (t) => { + const generateResourcesJson = require("../../../lib/tasks/generateResourcesJson"); + + const resource1 = {}; + const resource2 = {}; + const resource3 = {}; + + const workspace = createWorkspace(); + workspace.byGlob = sinon.stub().resolves([ + resource1, + resource2, + resource3, + ]); + + const dependencyResource1 = {}; + const dependencyResource2 = {}; + const dependencies = { + byGlob: sinon.stub().resolves([dependencyResource1, dependencyResource2]) + }; + + const taskUtil = { + getTag: sinon.stub(), + STANDARD_TAGS: { + OmitFromBuildResult: "TEST-OmitFromBuildResult-TEST" + } + }; + + // resources + taskUtil.getTag + .onCall(0).returns(false) + .onCall(1).returns(true) // second resource should be filtered out + .onCall(2).returns(false); + + // dependencyResources + taskUtil.getTag + .onCall(3).returns(true) // first dependencyResource should be filtered out + .onCall(4).returns(false); + + const result = await generateResourcesJson({ + workspace, + dependencies, + taskUtil, + options: { + projectName: "my.lib" + } + }); + + t.is(taskUtil.getTag.callCount, 5); + t.deepEqual(taskUtil.getTag.getCall(0).args, [resource1, "TEST-OmitFromBuildResult-TEST"]); + t.deepEqual(taskUtil.getTag.getCall(1).args, [resource2, "TEST-OmitFromBuildResult-TEST"]); + t.deepEqual(taskUtil.getTag.getCall(2).args, [resource3, "TEST-OmitFromBuildResult-TEST"]); + t.deepEqual(taskUtil.getTag.getCall(3).args, [dependencyResource1, "TEST-OmitFromBuildResult-TEST"]); + t.deepEqual(taskUtil.getTag.getCall(4).args, [dependencyResource2, "TEST-OmitFromBuildResult-TEST"]); + + t.deepEqual(result, undefined, "no resources returned"); + t.is(t.context.resourceListCreatorStub.callCount, 1); + t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].resources, + [resource1, resource3], "only resources 1 and 3 are passed"); + const expectedOptions = {}; + t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].options, expectedOptions, "options match"); + t.deepEqual(t.context.resourceListCreatorStub.getCall(0).args[0].dependencyResources, [dependencyResource2], + "dependencyResources reference should be passed to resourceListCreator"); +}); diff --git a/test/lib/tasks/minify.js b/test/lib/tasks/minify.js new file mode 100644 index 000000000..cea4f7db1 --- /dev/null +++ b/test/lib/tasks/minify.js @@ -0,0 +1,245 @@ +const test = require("ava"); +const sinon = require("sinon"); + +const minify = require("../../../lib/tasks/minify"); +const ui5Fs = require("@ui5/fs"); +const resourceFactory = ui5Fs.resourceFactory; +const DuplexCollection = ui5Fs.DuplexCollection; + +// Node.js itself tries to parse sourceMappingURLs in all JavaScript files. This is unwanted and might even lead to +// obscure errors when dynamically generating Data-URI soruceMappingURL values. +// Therefore use this constant to never write the actual string. +const SOURCE_MAPPING_URL = "//" + "# sourceMappingURL"; + +function createWorkspace() { + const reader = resourceFactory.createAdapter({ + virBasePath: "/" + }); + const writer = resourceFactory.createAdapter({ + virBasePath: "/" + }); + const workspace = new DuplexCollection({reader: reader, writer: writer}); + return {reader, writer, workspace}; +} + +test.afterEach.always((t) => { + sinon.restore(); +}); + +test("integration: minify", async (t) => { + const taskUtil = { + setTag: sinon.stub(), + STANDARD_TAGS: { + HasDebugVariant: "1️⃣", + IsDebugVariant: "2️⃣", + OmitFromBuildResult: "3️⃣" + } + }; + const {reader, writer, workspace} = createWorkspace(); + const content = ` +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + await reader.write(testResource); + + await minify({ + workspace, + taskUtil, + options: { + pattern: "/test.js" + } + }); + + const expected = `function test(t){var o=t;console.log(o)}test();`; + const res = await writer.byPath("/test.js"); + if (!res) { + t.fail("Could not find /test.js in target locator"); + } + t.deepEqual(await res.getString(), expected, "Correct file content"); + + const resDbg = await writer.byPath("/test-dbg.js"); + if (!resDbg) { + t.fail("Could not find /test-dbg.js in target locator"); + } + t.deepEqual(await resDbg.getString(), content, "Correct debug-file content"); + + const expectedSourceMap = + `{"version":3,"sources":["test-dbg.js"],"names":["test","paramA","variableA","console","log"],` + + `"mappings":"AACA,SAASA,KAAKC,GACb,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test.js"}`; + + const resSourceMap = await writer.byPath("/test.js.map"); + if (!resSourceMap) { + t.fail("Could not find /test-dbg.js.map in target locator"); + } + t.deepEqual(await resSourceMap.getString(), expectedSourceMap, "Correct source map content"); + + t.is(taskUtil.setTag.callCount, 4, "taskUtil.setTag was called 4 times"); + t.deepEqual(taskUtil.setTag.getCall(0).args, [res, "1️⃣"], "First taskUtil.setTag call with expected arguments"); + t.deepEqual(taskUtil.setTag.getCall(1).args, [resDbg, "2️⃣"], + "Second taskUtil.setTag call with expected arguments"); + t.deepEqual(taskUtil.setTag.getCall(2).args, [resSourceMap, "1️⃣"], + "Third taskUtil.setTag call with expected arguments"); + t.deepEqual(taskUtil.setTag.getCall(3).args, [resSourceMap, "3️⃣"], + "Fourth taskUtil.setTag call with expected arguments"); +}); + +test("integration: minify omitSourceMapResources=false", async (t) => { + const taskUtil = { + setTag: sinon.stub(), + STANDARD_TAGS: { + HasDebugVariant: "1️⃣", + IsDebugVariant: "2️⃣", + OmitFromBuildResult: "3️⃣" + } + }; + const {reader, writer, workspace} = createWorkspace(); + const content = ` +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + await reader.write(testResource); + + await minify({ + workspace, + taskUtil, + options: { + pattern: "/test.js", + omitSourceMapResources: false + } + }); + + const expected = `function test(t){var o=t;console.log(o)}test(); +${SOURCE_MAPPING_URL}=test.js.map`; + const res = await writer.byPath("/test.js"); + if (!res) { + t.fail("Could not find /test.js in target locator"); + } + t.deepEqual(await res.getString(), expected, "Correct file content"); + + const resDbg = await writer.byPath("/test-dbg.js"); + if (!resDbg) { + t.fail("Could not find /test-dbg.js in target locator"); + } + t.deepEqual(await resDbg.getString(), content, "Correct debug-file content"); + + const expectedSourceMap = + `{"version":3,"sources":["test-dbg.js"],"names":["test","paramA","variableA","console","log"],` + + `"mappings":"AACA,SAASA,KAAKC,GACb,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test.js"}`; + + const resSourceMap = await writer.byPath("/test.js.map"); + if (!resSourceMap) { + t.fail("Could not find /test-dbg.js.map in target locator"); + } + t.deepEqual(await resSourceMap.getString(), expectedSourceMap, "Correct source map content"); + + t.is(taskUtil.setTag.callCount, 3, "taskUtil.setTag was called 3 times"); + t.deepEqual(taskUtil.setTag.getCall(0).args, [res, "1️⃣"], "First taskUtil.setTag call with expected arguments"); + t.deepEqual(taskUtil.setTag.getCall(1).args, [resDbg, "2️⃣"], + "Second taskUtil.setTag call with expected arguments"); + t.deepEqual(taskUtil.setTag.getCall(2).args, [resSourceMap, "1️⃣"], + "Third taskUtil.setTag call with expected arguments"); +}); + +test("integration: minify (without taskUtil)", async (t) => { + const {reader, writer, workspace} = createWorkspace(); + const content = ` +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + await reader.write(testResource); + + await minify({ + workspace, + options: { + pattern: "/test.js" + } + }); + + const expected = `function test(t){var o=t;console.log(o)}test();`; + const res = await writer.byPath("/test.js"); + if (!res) { + t.fail("Could not find /test.js in target locator"); + } + t.deepEqual(await res.getString(), expected, "Correct file content"); + + const resDbg = await writer.byPath("/test-dbg.js"); + if (!resDbg) { + t.fail("Could not find /test-dbg.js in target locator"); + } + t.deepEqual(await resDbg.getString(), content, "Correct debug-file content"); + + const expectedSourceMap = + `{"version":3,"sources":["test-dbg.js"],"names":["test","paramA","variableA","console","log"],` + + `"mappings":"AACA,SAASA,KAAKC,GACb,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test.js"}`; + + const resSourceMap = await writer.byPath("/test.js.map"); + if (!resSourceMap) { + t.fail("Could not find /test-dbg.js.map in target locator"); + } + t.deepEqual(await resSourceMap.getString(), expectedSourceMap, "Correct source map content"); +}); + +test("integration: minify omitSourceMapResources=false (without taskUtil)", async (t) => { + const {reader, writer, workspace} = createWorkspace(); + const content = ` +function test(paramA) { + var variableA = paramA; + console.log(variableA); +} +test();`; + const testResource = resourceFactory.createResource({ + path: "/test.js", + string: content + }); + await reader.write(testResource); + + await minify({ + workspace, + options: { + pattern: "/test.js", + omitSourceMapResources: false + } + }); + + const expected = `function test(t){var o=t;console.log(o)}test(); +${SOURCE_MAPPING_URL}=test.js.map`; + const res = await writer.byPath("/test.js"); + if (!res) { + t.fail("Could not find /test.js in target locator"); + } + t.deepEqual(await res.getString(), expected, "Correct file content"); + + const resDbg = await writer.byPath("/test-dbg.js"); + if (!resDbg) { + t.fail("Could not find /test-dbg.js in target locator"); + } + t.deepEqual(await resDbg.getString(), content, "Correct debug-file content"); + + const expectedSourceMap = + `{"version":3,"sources":["test-dbg.js"],"names":["test","paramA","variableA","console","log"],` + + `"mappings":"AACA,SAASA,KAAKC,GACb,IAAIC,EAAYD,EAChBE,QAAQC,IAAIF,GAEbF","file":"test.js"}`; + + const resSourceMap = await writer.byPath("/test.js.map"); + if (!resSourceMap) { + t.fail("Could not find /test-dbg.js.map in target locator"); + } + t.deepEqual(await resSourceMap.getString(), expectedSourceMap, "Correct source map content"); +}); diff --git a/test/lib/tasks/replaceVersion.js b/test/lib/tasks/replaceVersion.js index 72752f5f3..332879514 100644 --- a/test/lib/tasks/replaceVersion.js +++ b/test/lib/tasks/replaceVersion.js @@ -13,8 +13,8 @@ test("integration: replace version", (t) => { virBasePath: "/" }); - const content = "console.log('${version}');"; - const expected = "console.log('1.337.0');"; + const content = "console.log('${version} equals ${project.version}');"; + const expected = "console.log('1.337.0 equals 1.337.0');"; const resource = resourceFactory.createResource({ path: "/test.js", diff --git a/test/lib/tasks/taskRepository.js b/test/lib/tasks/taskRepository.js index 720ab5518..7c1ce4323 100644 --- a/test/lib/tasks/taskRepository.js +++ b/test/lib/tasks/taskRepository.js @@ -24,6 +24,24 @@ test("Unknown task retrieval", (t) => { t.deepEqual(error.message, "taskRepository: Unknown Task not-existing", "Correct exception"); }); +test("Removed task retrieval", (t) => { + const error = t.throws(() => { + taskRepository.getTask("createDebugFiles"); + }); + t.deepEqual(error.message, + `Standard task createDebugFiles has been removed in UI5 Tooling 3.0. ` + + `Please see the migration guide at https://sap.github.io/ui5-tooling/updates/migrate-v3/`, + "Correct exception"); + + const error2 = t.throws(() => { + taskRepository.getTask("uglify"); + }); + t.deepEqual(error2.message, + `Standard task uglify has been removed in UI5 Tooling 3.0. ` + + `Please see the migration guide at https://sap.github.io/ui5-tooling/updates/migrate-v3/`, + "Correct exception"); +}); + test("Duplicate task", (t) => { const myTask = {}; taskRepository.addTask("myOtherTask", myTask); diff --git a/test/lib/tasks/uglify.js b/test/lib/tasks/uglify.js deleted file mode 100644 index 509dc350a..000000000 --- a/test/lib/tasks/uglify.js +++ /dev/null @@ -1,219 +0,0 @@ -const test = require("ava"); - -const uglify = require("../../../lib/tasks/uglify"); -const ui5Fs = require("@ui5/fs"); -const resourceFactory = ui5Fs.resourceFactory; -const DuplexCollection = ui5Fs.DuplexCollection; - -test("integration: uglify", (t) => { - const reader = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const writer = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const duplexCollection = new DuplexCollection({reader: reader, writer: writer}); - const content = ` -function test(paramA) { - var variableA = paramA; - console.log(variableA); -} -test();`; - const testResource = resourceFactory.createResource({ - path: "/test.js", - string: content - }); - const expected = "function test(t){var o=t;console.log(o)}test();"; - - return reader.write(testResource) - .then(() => { - return reader.byPath("/test.js"); - }).then(() => { - return uglify({ - workspace: duplexCollection, - options: { - pattern: "/test.js" - } - }); - }).then(() => { - return writer.byPath("/test.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test.js in target locator"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - return t.deepEqual(buffer.toString(), expected, "Correct content"); - }); -}); - -test("integration: uglify copyright", (t) => { - const reader = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const writer = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const duplexCollection = new DuplexCollection({reader: reader, writer: writer}); - const content = ` -/* - * Copyright jQuery Foundation and other contributors - */ -function test(paramA) { - var variableA = paramA; - console.log(variableA); -} -test();`; - const testResource = resourceFactory.createResource({ - path: "/test.js", - string: content - }); - const expected = `/* - * Copyright jQuery Foundation and other contributors - */ -function test(t){var o=t;console.log(o)}test();`; - - return reader.write(testResource) - .then(() => { - return reader.byPath("/test.js"); - }).then(() => { - return uglify({ - workspace: duplexCollection, - options: { - pattern: "/test.js" - } - }); - }).then(() => { - return writer.byPath("/test.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test.js in target locator"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - return t.deepEqual(buffer.toString(), expected, "Correct content"); - }); -}); - -test("integration: uglify raw module (@ui5-bundle-raw-include)", (t) => { - const reader = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const writer = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const duplexCollection = new DuplexCollection({reader: reader, writer: writer}); - const content = ` -//@ui5-bundle-raw-include sap/ui/my/module.js -function test(paramA) { - var variableA = paramA; - console.log(variableA); -} -test();`; - const testResource = resourceFactory.createResource({ - path: "/test.js", - string: content - }); - const expected = `//@ui5-bundle-raw-include sap/ui/my/module.js -function test(t){var o=t;console.log(o)}test();`; - - return reader.write(testResource) - .then(() => { - return reader.byPath("/test.js"); - }).then(() => { - return uglify({ - workspace: duplexCollection, - options: { - pattern: "/test.js" - } - }); - }).then(() => { - return writer.byPath("/test.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test.js in target locator"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - return t.deepEqual(buffer.toString(), expected, "Correct content"); - }); -}); - -test("integration: uglify raw module (@ui5-bundle)", (t) => { - const reader = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const writer = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const duplexCollection = new DuplexCollection({reader: reader, writer: writer}); - const content = ` -//@ui5-bundle sap/ui/my/module.js -function test(paramA) { - var variableA = paramA; - console.log(variableA); -} -test();`; - const testResource = resourceFactory.createResource({ - path: "/test.js", - string: content - }); - const expected = `//@ui5-bundle sap/ui/my/module.js -function test(t){var o=t;console.log(o)}test();`; - - return reader.write(testResource) - .then(() => { - return reader.byPath("/test.js"); - }).then(() => { - return uglify({ - workspace: duplexCollection, - options: { - pattern: "/test.js" - } - }); - }).then(() => { - return writer.byPath("/test.js").then((resource) => { - if (!resource) { - t.fail("Could not find /test.js in target locator"); - } else { - return resource.getBuffer(); - } - }); - }).then((buffer) => { - return t.deepEqual(buffer.toString(), expected, "Correct content"); - }); -}); - -test("integration: uglify error handling", async (t) => { - const reader = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const writer = resourceFactory.createAdapter({ - virBasePath: "/" - }); - const duplexCollection = new DuplexCollection({reader: reader, writer: writer}); - const content = ` -this code can't be parsed!`; - const testResource = resourceFactory.createResource({ - path: "/test.js", - string: content - }); - - await reader.write(testResource); - - const error = await t.throwsAsync(uglify({ - workspace: duplexCollection, - options: { - pattern: "/test.js" - } - })); - - t.regex(error.message, /Uglification failed with error/, "Error should contain expected message"); - t.regex(error.message, /test\.js/, "Error should contain filename"); - t.regex(error.message, /col/, "Error should contain col"); - t.regex(error.message, /pos/, "Error should contain pos"); - t.regex(error.message, /line/, "Error should contain line"); -}); diff --git a/test/lib/types/AbstractBuilder.js b/test/lib/types/AbstractBuilder.js index 430036784..65033e58f 100644 --- a/test/lib/types/AbstractBuilder.js +++ b/test/lib/types/AbstractBuilder.js @@ -159,14 +159,14 @@ test("Instantiation with custom task and unknown beforeTask", (t) => { const project = clone(applicationBTree); project.builder = { customTasks: [{ - name: "uglify", + name: "minify", beforeTask: "someTask" }] }; const error = t.throws(() => { new CustomBuilder({project}); }); - t.deepEqual(error.message, "Could not find task someTask, referenced by custom task uglify, " + + t.deepEqual(error.message, "Could not find task someTask, referenced by custom task minify, " + "to be scheduled for project application.b", "Correct exception thrown"); }); diff --git a/test/lib/types/application/ApplicationBuilder.js b/test/lib/types/application/ApplicationBuilder.js index b37cb222f..4bf00ac38 100644 --- a/test/lib/types/application/ApplicationBuilder.js +++ b/test/lib/types/application/ApplicationBuilder.js @@ -62,12 +62,11 @@ test("Instantiation", (t) => { "replaceVersion", "generateFlexChangesBundle", "generateManifestBundle", + "minify", "generateComponentPreload", "generateStandaloneAppBundle", "transformBootstrapHtml", "generateBundle", - "createDebugFiles", - "uglify", "generateVersionInfo", "generateCachebusterInfo", "generateApiIndex", @@ -86,12 +85,11 @@ test("Instantiation without component preload project configuration", (t) => { "replaceVersion", "generateFlexChangesBundle", "generateManifestBundle", + "minify", "generateComponentPreload", "generateStandaloneAppBundle", "transformBootstrapHtml", "generateBundle", - "createDebugFiles", - "uglify", "generateVersionInfo", "generateCachebusterInfo", "generateApiIndex", @@ -110,11 +108,10 @@ test("Instantiation without project namespace", (t) => { "replaceCopyright", "replaceVersion", "generateFlexChangesBundle", + "minify", "generateStandaloneAppBundle", "transformBootstrapHtml", "generateBundle", - "createDebugFiles", - "uglify", "generateVersionInfo", "generateApiIndex", "generateResourcesJson" @@ -124,25 +121,24 @@ test("Instantiation without project namespace", (t) => { test("Instantiation with custom tasks", (t) => { const project = clone(applicationBTree); project.builder.customTasks = [ - {name: "replaceVersion", afterTask: "uglify"}, - {name: "uglify", beforeTask: "replaceVersion"} + {name: "replaceVersion", afterTask: "minify"}, + {name: "minify", beforeTask: "replaceVersion"} ]; const appBuilder = new ApplicationBuilder({parentLogger, project}); t.truthy(appBuilder); t.deepEqual(appBuilder.taskExecutionOrder, [ "escapeNonAsciiCharacters", "replaceCopyright", - "uglify--1", + "minify--1", "replaceVersion", "generateFlexChangesBundle", "generateManifestBundle", + "minify", + "replaceVersion--1", "generateComponentPreload", "generateStandaloneAppBundle", "transformBootstrapHtml", "generateBundle", - "createDebugFiles", - "uglify", - "replaceVersion--1", "generateVersionInfo", "generateCachebusterInfo", "generateApiIndex", diff --git a/test/lib/types/library/LibraryBuilder.js b/test/lib/types/library/LibraryBuilder.js index a6b483b82..4afcbbac7 100644 --- a/test/lib/types/library/LibraryBuilder.js +++ b/test/lib/types/library/LibraryBuilder.js @@ -20,13 +20,12 @@ test("Instantiation", (t) => { "replaceBuildtime", "generateJsdoc", "executeJsdocSdkTransformation", + "minify", "generateLibraryManifest", "generateManifestBundle", "generateLibraryPreload", "buildThemes", "generateThemeDesignerResources", - "createDebugFiles", - "uglify", "generateResourcesJson" ], "LibraryBuilder is instantiated with standard tasks"); }); diff --git a/test/lib/types/themeLibrary/ThemeLibraryBuilder.js b/test/lib/types/themeLibrary/ThemeLibraryBuilder.js index 7deab2f94..75e4d70af 100644 --- a/test/lib/types/themeLibrary/ThemeLibraryBuilder.js +++ b/test/lib/types/themeLibrary/ThemeLibraryBuilder.js @@ -9,6 +9,11 @@ test("tasks", async (t) => { byGlob: async () => { return []; } + }, + dependencies: { + byGlob: async () => { + return []; + } } }, buildContext: { @@ -39,6 +44,12 @@ test("tasks", async (t) => { taskUtil: { isRootProject: () => { return true; + }, + getBuildOptions: () => { + return {}; + }, + getBuildOption: (key) => { + return key; } } });