From 1e54baf19806bc72a50576a2328ea071b15ec789 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 18 Sep 2025 13:03:17 -0700 Subject: [PATCH] feat(webpack): support es module bundling (#10788) --- apps/automated/src/globals/globals-tests.ts | 4 +- packages/core/global-types.d.ts | 12 +- packages/core/globals/index.ts | 46 +- packages/webpack5/package-lock.json | 515 +++++++++--------- packages/webpack5/package.json | 2 +- packages/webpack5/project.json | 2 +- packages/webpack5/src/configuration/base.ts | 250 +++++++-- .../webpack5/src/configuration/typescript.ts | 7 +- packages/webpack5/src/helpers/dependencies.ts | 75 +++ packages/webpack5/src/index.ts | 10 +- .../loaders/nativescript-hot-loader/index.ts | 7 +- .../src/plugins/CompatDefinePlugin.ts | 14 + .../src/plugins/PlatformSuffixPlugin.ts | 133 +++-- .../src/polyfills/mdn-data-at-rules.ts | 8 + .../src/polyfills/mdn-data-properties.ts | 8 + .../src/polyfills/mdn-data-syntaxes.ts | 8 + packages/webpack5/src/polyfills/module.ts | 47 ++ .../src/stubs/virtual-entry-javascript.js | 2 +- .../src/stubs/virtual-entry-typescript.js | 2 +- .../src/stubs/virtual-entry-typescript.mjs | 68 +++ 20 files changed, 806 insertions(+), 414 deletions(-) create mode 100644 packages/webpack5/src/plugins/CompatDefinePlugin.ts create mode 100644 packages/webpack5/src/polyfills/mdn-data-at-rules.ts create mode 100644 packages/webpack5/src/polyfills/mdn-data-properties.ts create mode 100644 packages/webpack5/src/polyfills/mdn-data-syntaxes.ts create mode 100644 packages/webpack5/src/polyfills/module.ts create mode 100644 packages/webpack5/src/stubs/virtual-entry-typescript.mjs diff --git a/apps/automated/src/globals/globals-tests.ts b/apps/automated/src/globals/globals-tests.ts index 65c10e14d..9bd024465 100644 --- a/apps/automated/src/globals/globals-tests.ts +++ b/apps/automated/src/globals/globals-tests.ts @@ -23,8 +23,8 @@ export function test_global_registerModule() { TKUnit.assert(typeof global.registerModule === 'function', 'global.registerModule not a function'); } -export function test_global_registerWebpackModules() { - TKUnit.assert(typeof global.registerWebpackModules === 'function', 'global.registerWebpackModules not a function'); +export function test_global_registerBundlerModules() { + TKUnit.assert(typeof global.registerBundlerModules === 'function', 'global.registerBundlerModules not a function'); } export function test_global_loadModule() { diff --git a/packages/core/global-types.d.ts b/packages/core/global-types.d.ts index a116b5237..0c3895a5a 100644 --- a/packages/core/global-types.d.ts +++ b/packages/core/global-types.d.ts @@ -53,11 +53,11 @@ declare module globalThis { function registerModule(name: string, loader: (name: string) => any): void; /** - * Register all modules from a webpack context. - * The context is one created using the following webpack utility: + * Register all modules from a bundler context. + * For example, the context could be one created using the following webpack utility: * https://webpack.js.org/guides/dependency-management/#requirecontext * - * The extension map is optional, modules in the webpack context will have their original file extension (e.g. may be ".ts" or ".scss" etc.), + * The extension map is optional, modules in the bundler context will have their original file extension (e.g. may be ".ts" or ".scss" etc.), * while the built-in module builders in {N} will look for ".js", ".css" or ".xml" files. Adding a map such as: * ``` * { ".ts": ".js" } @@ -65,7 +65,7 @@ declare module globalThis { * Will resolve lookups for .js to the .ts file. * By default scss and ts files are mapped. */ - function registerWebpackModules(context: { keys(): string[]; (key: string): any }, extensionMap?: { [originalFileExtension: string]: string }); + function registerBundlerModules(context: { keys(): string[]; (key: string): any }, extensionMap?: { [originalFileExtension: string]: string }); /** * The NativeScript XML builder, style-scope, application modules use various resources such as: @@ -91,7 +91,7 @@ declare module globalThis { function loadModule(name: string, loadForUI?: boolean): any; /** - * Checks if the module has been registered with `registerModule` or in `registerWebpackModules` + * Checks if the module has been registered with `registerModule` or in `registerBundlerModules` * @param name Name of the module */ function moduleExists(name: string): boolean; @@ -100,8 +100,6 @@ declare module globalThis { function _unregisterModule(name: string): void; - function _isModuleLoadedForUI(moduleName: string): boolean; - var onGlobalLayoutListener: any; function zonedCallback(callback: T): T; var Reflect: any; diff --git a/packages/core/globals/index.ts b/packages/core/globals/index.ts index 5cc9397cf..af6585b50 100644 --- a/packages/core/globals/index.ts +++ b/packages/core/globals/index.ts @@ -170,15 +170,20 @@ export function initGlobal() { modules.delete(name); }; - global._isModuleLoadedForUI = function _isModuleLoadedForUI(moduleName: string): boolean { - return modulesLoadedForUI.has(moduleName); - }; + global.registerBundlerModules = function registerBundlerModules(context: Context, extensionMap: ExtensionMap = {}) { + const registerWithName = (nickName: string, moduleId: string) => { + modules.set(nickName, { + moduleId, + loader: () => { + return context(moduleId); + }, + }); + }; - global.registerWebpackModules = function registerWebpackModules(context: Context, extensionMap: ExtensionMap = {}) { - context.keys().forEach((moduleId) => { + const registerModuleById = (moduleId: string) => { const extDotIndex = moduleId.lastIndexOf('.'); - const base = moduleId.substr(0, extDotIndex); - const originalExt = moduleId.substr(extDotIndex); + const base = moduleId.substring(0, extDotIndex); + const originalExt = moduleId.substring(extDotIndex); const registerExt = extensionMap[originalExt] || defaultExtensionMap[originalExt] || originalExt; // We prefer source files for webpack scenarios before compilation leftovers, @@ -187,47 +192,40 @@ export function initGlobal() { const isSourceFile = originalExt !== registerExt; const registerName = base + registerExt; - const registerWithName = (nickName: string) => { - modules.set(nickName, { - moduleId, - loader: () => { - return context(moduleId); - }, - }); - }; - if (registerName.startsWith('./') && registerName.endsWith('.js')) { const jsNickNames = [ // This is extremely short version like "main-page" that was promoted to be used with global.registerModule("module-name", loaderFunc); - registerName.substr(2, registerName.length - 5), + registerName.substring(2, registerName.length - 3), // This is for supporting module names like "./main/main-page" - registerName.substr(0, registerName.length - 3), + registerName.substring(0, registerName.length - 3), // This is for supporting module names like "main/main-page.js" - registerName.substr(2), + registerName.substring(2), ]; jsNickNames.forEach((jsNickName) => { if (isSourceFile || !global.moduleExists(jsNickName)) { - registerWithName(jsNickName); + registerWithName(jsNickName, moduleId); } }); } else if (registerName.startsWith('./')) { const moduleNickNames = [ // This is for supporting module names like "main/main-page.xml" - registerName.substr(2), + registerName.substring(2), ]; moduleNickNames.forEach((moduleNickName) => { if (!global.moduleExists(moduleNickName)) { - registerWithName(moduleNickName); + registerWithName(moduleNickName, moduleId); } }); } if (isSourceFile || !global.moduleExists(registerName)) { - registerWithName(registerName); + registerWithName(registerName, moduleId); } - }); + }; + + context.keys().forEach(registerModuleById); }; global.moduleExists = function moduleExists(name: string): boolean { diff --git a/packages/webpack5/package-lock.json b/packages/webpack5/package-lock.json index 25517d304..b966041fc 100644 --- a/packages/webpack5/package-lock.json +++ b/packages/webpack5/package-lock.json @@ -1,12 +1,12 @@ { "name": "@nativescript/webpack", - "version": "5.0.24", + "version": "5.1.0-alpha.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@nativescript/webpack", - "version": "5.0.24", + "version": "5.1.0-alpha.0", "license": "Apache-2.0", "dependencies": { "@babel/core": "^7.0.0", @@ -3379,7 +3379,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -3393,10 +3393,10 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz", - "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==", - "devOptional": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", + "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/base64": "^1.1.1", @@ -3416,10 +3416,10 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", - "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", - "devOptional": true, + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz", + "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -3436,7 +3436,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@lmdb/lmdb-darwin-arm64": { @@ -4703,10 +4703,10 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "devOptional": true, + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, "license": "MIT", "dependencies": { "@types/connect": "*", @@ -4717,7 +4717,7 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4734,7 +4734,7 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4744,7 +4744,7 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", @@ -4785,10 +4785,10 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "devOptional": true, + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", @@ -4798,23 +4798,10 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", - "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { "version": "4.19.6", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -4834,17 +4821,17 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "devOptional": true, + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", - "devOptional": true, + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4961,7 +4948,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/node": { @@ -4974,34 +4961,34 @@ } }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "devOptional": true, + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.12.tgz", + "integrity": "sha512-a0ToKlRVnUw3aXKQq2F+krxZKq7B8LEQijzPn5RdFAMatARD2JX9o8FBpMXOOrjob0uc13aN+V/AXniOXW4d9A==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", - "devOptional": true, + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/sax": { @@ -5015,10 +5002,10 @@ } }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "devOptional": true, + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "dev": true, "license": "MIT", "dependencies": { "@types/mime": "^1", @@ -5029,17 +5016,17 @@ "version": "1.9.4", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "devOptional": true, + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", @@ -5051,7 +5038,7 @@ "version": "0.3.36", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -5146,10 +5133,10 @@ } }, "node_modules/@types/ws": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", - "devOptional": true, + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -5447,7 +5434,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -5461,7 +5448,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -5685,7 +5672,7 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "devOptional": true, + "dev": true, "engines": [ "node >= 0.8.0" ], @@ -5765,7 +5752,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/async": { @@ -6075,7 +6062,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/beasties": { @@ -6124,7 +6111,7 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -6149,7 +6136,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6159,7 +6146,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -6172,14 +6159,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6280,7 +6267,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" @@ -6296,17 +6283,17 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "devOptional": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6317,14 +6304,14 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "devOptional": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -6752,7 +6739,7 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" @@ -6762,10 +6749,10 @@ } }, "node_modules/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", - "devOptional": true, + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -6784,7 +6771,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6794,7 +6781,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/concat-map": { @@ -6807,7 +6794,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -6817,7 +6804,7 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -6830,7 +6817,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6847,7 +6834,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6857,7 +6844,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/copy-anything": { @@ -6925,7 +6912,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/cosmiconfig": { @@ -7172,7 +7159,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -7189,7 +7176,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -7202,7 +7189,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -7215,7 +7202,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -7225,7 +7212,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8", @@ -7257,7 +7244,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/diff-sequences": { @@ -7274,7 +7261,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -7379,7 +7366,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -7400,7 +7387,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/ejs": { @@ -7458,7 +7445,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -7559,7 +7546,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7569,7 +7556,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7582,10 +7569,10 @@ "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "devOptional": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -7661,7 +7648,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { @@ -7751,7 +7738,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -7761,7 +7748,7 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/events": { @@ -7834,7 +7821,7 @@ "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -7881,7 +7868,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -7891,7 +7878,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -7965,7 +7952,7 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" @@ -8047,7 +8034,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -8066,7 +8053,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -8076,7 +8063,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/find-up": { @@ -8105,7 +8092,7 @@ "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "devOptional": true, + "dev": true, "funding": [ { "type": "individual", @@ -8202,7 +8189,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8226,7 +8213,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8315,22 +8302,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", - "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", - "devOptional": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "dunder-proto": "^1.0.0", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "math-intrinsics": "^1.0.0" + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8349,6 +8336,20 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -8406,7 +8407,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8440,7 +8441,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/has-flag": { @@ -8456,7 +8457,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8506,7 +8507,7 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.1", @@ -8519,7 +8520,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -8535,14 +8536,14 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/hpack.js/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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -8607,14 +8608,14 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -8628,17 +8629,17 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "devOptional": true, + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", @@ -8695,7 +8696,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10.18" @@ -8822,7 +8823,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -8866,7 +8867,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -8926,7 +8927,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -8958,7 +8959,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=16" @@ -8980,7 +8981,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -9036,7 +9037,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -9052,7 +9053,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/isexe": { @@ -9923,10 +9924,10 @@ } }, "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", - "devOptional": true, + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "dev": true, "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -10443,7 +10444,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10453,7 +10454,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -10475,7 +10476,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "devOptional": true, + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10501,7 +10502,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -10536,7 +10537,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -10614,7 +10615,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/minimatch": { @@ -10682,7 +10683,7 @@ "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", @@ -10771,7 +10772,7 @@ "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -10801,7 +10802,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "devOptional": true, + "dev": true, "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" @@ -10891,10 +10892,10 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "devOptional": true, + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10907,14 +10908,14 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -10927,7 +10928,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11107,7 +11108,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/retry": "0.12.2", @@ -11275,7 +11276,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11319,7 +11320,7 @@ "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/path-type": { @@ -11630,7 +11631,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/prompts": { @@ -11651,7 +11652,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -11665,7 +11666,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -11709,7 +11710,7 @@ "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -11755,7 +11756,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11765,7 +11766,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -11781,7 +11782,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -11902,7 +11903,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -12045,7 +12046,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/resolve": { @@ -12187,7 +12188,7 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -12255,7 +12256,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -12322,7 +12323,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/sass": { @@ -12431,14 +12432,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", @@ -12464,7 +12465,7 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -12489,7 +12490,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -12499,14 +12500,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -12525,7 +12526,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.4", @@ -12544,7 +12545,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -12554,7 +12555,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12564,7 +12565,7 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "depd": "~1.1.2", @@ -12580,28 +12581,28 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12611,7 +12612,7 @@ "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -12627,7 +12628,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/shallow-clone": { @@ -12664,10 +12665,10 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "devOptional": true, + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -12680,7 +12681,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12700,7 +12701,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12717,7 +12718,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -12736,7 +12737,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -12830,7 +12831,7 @@ "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", @@ -12911,7 +12912,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.0", @@ -12928,7 +12929,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.0", @@ -12969,7 +12970,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -12992,7 +12993,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -13264,7 +13265,7 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", - "devOptional": true, + "dev": true, "license": "Unlicense", "engines": { "node": ">=10.18" @@ -13277,7 +13278,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { @@ -13319,7 +13320,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.6" @@ -13335,10 +13336,10 @@ } }, "node_modules/tree-dump": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", - "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", - "devOptional": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", + "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -13460,7 +13461,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, + "dev": true, "license": "0BSD" }, "node_modules/type-detect": { @@ -13477,7 +13478,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "devOptional": true, + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -13490,7 +13491,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -13583,7 +13584,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -13638,7 +13639,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -13648,7 +13649,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -13680,7 +13681,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -14018,7 +14019,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "colorette": "^2.0.10", @@ -14045,10 +14046,10 @@ } }, "node_modules/webpack-dev-middleware/node_modules/memfs": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.15.1.tgz", - "integrity": "sha512-ufCzgFwiVnR6R9cCYuvwznJdhdYXEvFl0hpnM4cCtVaVkHuqBR+6fo2sqt1SSMdp+uiHw9GyPZr3OMM5tqjSmQ==", - "devOptional": true, + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", + "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", @@ -14139,7 +14140,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -14164,7 +14165,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -14202,7 +14203,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -14215,7 +14216,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -14225,10 +14226,10 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "devOptional": true, + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -14301,7 +14302,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", @@ -14316,7 +14317,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=0.8.0" diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 961fdd701..8c6a9b8b1 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/webpack", - "version": "5.0.24", + "version": "5.0.25-alpha.1", "private": false, "main": "dist/index.js", "files": [ diff --git a/packages/webpack5/project.json b/packages/webpack5/project.json index 7e65fafc4..81e44bac3 100644 --- a/packages/webpack5/project.json +++ b/packages/webpack5/project.json @@ -23,7 +23,7 @@ "assets": [ { "input": "{projectRoot}/src/stubs", - "glob": "*.js", + "glob": "*.{js,mjs}", "output": "stubs" }, { diff --git a/packages/webpack5/src/configuration/base.ts b/packages/webpack5/src/configuration/base.ts index 1345be347..fcc846ad1 100644 --- a/packages/webpack5/src/configuration/base.ts +++ b/packages/webpack5/src/configuration/base.ts @@ -1,11 +1,8 @@ import { extname, relative, resolve } from 'path'; -import { - ContextExclusionPlugin, - DefinePlugin, - HotModuleReplacementPlugin, -} from 'webpack'; +import { ContextExclusionPlugin, HotModuleReplacementPlugin } from 'webpack'; import Config from 'webpack-chain'; import { satisfies } from 'semver'; +import { isVersionGteConsideringPrerelease } from '../helpers/dependencies'; import { existsSync } from 'fs'; import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; @@ -13,11 +10,16 @@ import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; import TerserPlugin from 'terser-webpack-plugin'; import { getProjectFilePath, getProjectTSConfigPath } from '../helpers/project'; -import { getDependencyVersion, hasDependency } from '../helpers/dependencies'; +import { + getDependencyVersion, + hasDependency, + getResolvedDependencyVersionForCheck, +} from '../helpers/dependencies'; import { PlatformSuffixPlugin } from '../plugins/PlatformSuffixPlugin'; import { applyFileReplacements } from '../helpers/fileReplacements'; import { addCopyRule, applyCopyRules } from '../helpers/copyRules'; import { WatchStatePlugin } from '../plugins/WatchStatePlugin'; +import { CompatDefinePlugin } from '../plugins/CompatDefinePlugin'; import { applyDotEnvPlugin } from '../helpers/dotEnv'; import { env as _env, IWebpackEnv } from '../index'; import { getValue } from '../helpers/config'; @@ -39,6 +41,64 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { // set mode config.mode(mode); + // use source map files by default with v9+ + function useSourceMapFiles() { + if (mode === 'development') { + // in development we always use source-map files with v9+ runtimes + // they are parsed and mapped to display in-flight app error screens + env.sourceMap = 'source-map'; + } + } + // determine target output by @nativescript/* runtime version + // v9+ supports ESM output, anything below uses CommonJS + if ( + hasDependency('@nativescript/ios') || + hasDependency('@nativescript/visionos') || + hasDependency('@nativescript/android') + ) { + const iosVersion = getDependencyVersion('@nativescript/ios'); + const visionosVersion = getDependencyVersion('@nativescript/visionos'); + const androidVersion = getDependencyVersion('@nativescript/android'); + + if (platform === 'ios') { + const iosResolved = + getResolvedDependencyVersionForCheck('@nativescript/ios', '9.0.0') ?? + iosVersion ?? + undefined; + if (isVersionGteConsideringPrerelease(iosResolved, '9.0.0')) { + useSourceMapFiles(); + } else { + env.commonjs = true; + } + } else if (platform === 'visionos') { + const visionosResolved = + getResolvedDependencyVersionForCheck( + '@nativescript/visionos', + '9.0.0', + ) ?? + visionosVersion ?? + undefined; + if (isVersionGteConsideringPrerelease(visionosResolved, '9.0.0')) { + useSourceMapFiles(); + } else { + env.commonjs = true; + } + } else if (platform === 'android') { + const androidResolved = + getResolvedDependencyVersionForCheck( + '@nativescript/android', + '9.0.0', + ) ?? + androidVersion ?? + undefined; + if (isVersionGteConsideringPrerelease(androidResolved, '9.0.0')) { + useSourceMapFiles(); + } else { + env.commonjs = true; + } + } + } + // config.stats({ // logging: 'verbose' // }) @@ -57,6 +117,37 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { node: false, }); + // Mock Node.js built-ins that are not available in NativeScript runtime + // but are required by some packages like css-tree + config.resolve.merge({ + fallback: { + module: require.resolve('../polyfills/module.js'), + }, + alias: { + // Mock mdn-data modules that css-tree tries to load + 'mdn-data/css/properties.json': require.resolve( + '../polyfills/mdn-data-properties.js', + ), + 'mdn-data/css/syntaxes.json': require.resolve( + '../polyfills/mdn-data-syntaxes.js', + ), + 'mdn-data/css/at-rules.json': require.resolve( + '../polyfills/mdn-data-at-rules.js', + ), + // Ensure imports of the Node 'module' builtin resolve to our polyfill + module: require.resolve('../polyfills/module.js'), + }, + // Allow extension-less ESM imports (fixes "fully specified" errors) + // Example: '../timer' -> resolves to index..js without requiring explicit extension + fullySpecified: false, + }); + + // As an extra guard, ensure rule-level resolve also allows extension-less imports + config.module + .rule('esm-extensionless') + .test(/\.(mjs|js|ts|tsx)$/) + .resolve.set('fullySpecified', false); + const getSourceMapType = (map: string | boolean): Config.DevTool => { const defaultSourceMap = 'inline-source-map'; @@ -98,6 +189,8 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { // appears to be working - but we still have to deal with HMR config.target('node'); + // config.entry('globals').add('@nativescript/core/globals/index').end(); + config .entry('bundle') // ensure we load nativescript globals first @@ -124,16 +217,38 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { .add('@nativescript/core/inspector_modules'); }); - config.output - .path(outputPath) - .pathinfo(false) - .publicPath('') - .libraryTarget('commonjs') - .globalObject('global') - .set('clean', true); + if (env.commonjs) { + // CommonJS output + config.output + .path(outputPath) + .pathinfo(false) + .publicPath('') + .libraryTarget('commonjs') + .globalObject('global') + .set('clean', true); + if (env === null || env === void 0 ? void 0 : env.uniqueBundle) { + config.output.filename(`[name].${env.uniqueBundle}.js`); + } + } else { + // ESM output + config.merge({ + experiments: { + // enable ES module syntax (import/exports) + outputModule: true, + }, + }); - if (env?.uniqueBundle) { - config.output.filename(`[name].${env.uniqueBundle}.js`); + config.output + .path(outputPath) + .pathinfo(false) + .publicPath('file:///app/') + .set('module', true) + .libraryTarget('module') + .globalObject('global') + .set('clean', true); + if (env === null || env === void 0 ? void 0 : env.uniqueBundle) { + config.output.filename(`[name].${env.uniqueBundle}.mjs`); + } } config.watchOptions({ @@ -175,16 +290,43 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { config.optimization.runtimeChunk('single'); - config.optimization.splitChunks({ - cacheGroups: { - defaultVendor: { - test: /[\\/]node_modules[\\/]/, - priority: -10, - name: 'vendor', - chunks: 'all', + if (env.commonjs) { + // Set up CommonJS output + config.optimization.splitChunks({ + cacheGroups: { + defaultVendor: { + test: /[\\/]node_modules[\\/]/, + priority: -10, + name: 'vendor', + chunks: 'all', + }, }, - }, - }); + }); + } else { + // Set up ESM output + config.output.chunkFilename('[name].mjs'); + + // now re‑add exactly what you want: + config.optimization.splitChunks({ + // only split out vendor from the main bundle… + chunks: 'initial', + cacheGroups: { + // no “default” group + default: false, + + // only pull node_modules into vendor.js from the *initial* chunk + vendor: { + test: /[\\/]node_modules[\\/]/, + name: 'vendor', + chunks: 'initial', + priority: -10, + reuseExistingChunk: true, + }, + }, + }); + + config.optimization.set('moduleIds', 'named').set('chunkIds', 'named'); + } // look for loaders in // - node_modules/@nativescript/webpack/dist/loaders @@ -407,7 +549,14 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { .options(postCSSOptions) .end() .use('sass-loader') - .loader('sass-loader'); + .loader('sass-loader') + .options({ + // helps ensure proper project compatibility + // particularly in cases of workspaces + // which may have different nested Sass implementations + // via transient dependencies + implementation: require('sass'), + }); // config.plugin('NormalModuleReplacementPlugin').use(NormalModuleReplacementPlugin, [ // /.*/, @@ -440,7 +589,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { config .plugin('ContextExclusionPlugin|Other_Platforms') .use(ContextExclusionPlugin, [ - new RegExp(`\\.(${otherPlatformsRE})\\.(\\w+)$`), + new RegExp(`\.(${otherPlatformsRE})\.(\w+)$`), ]); // Filter common undesirable warnings @@ -460,30 +609,31 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { ); // todo: refine defaults - config.plugin('DefinePlugin').use(DefinePlugin, [ - { - __DEV__: mode === 'development', - __NS_WEBPACK__: true, - __NS_ENV_VERBOSE__: !!env.verbose, - __NS_DEV_HOST_IPS__: - mode === 'development' ? JSON.stringify(getIPS()) : `[]`, - __CSS_PARSER__: JSON.stringify(getValue('cssParser', 'css-tree')), - __UI_USE_XML_PARSER__: true, - __UI_USE_EXTERNAL_RENDERER__: false, - __ANDROID__: platform === 'android', - __IOS__: platform === 'ios', - __VISIONOS__: platform === 'visionos', - __APPLE__: platform === 'ios' || platform === 'visionos', - /* for compat only */ 'global.isAndroid': platform === 'android', - /* for compat only */ 'global.isIOS': - platform === 'ios' || platform === 'visionos', - /* for compat only */ 'global.isVisionOS': platform === 'visionos', - process: 'global.process', - - // todo: ?!?! - // profile: '() => {}', - }, - ]); + config.plugin('DefinePlugin').use( + CompatDefinePlugin as any, + [ + { + __DEV__: mode === 'development', + __NS_WEBPACK__: true, + __NS_ENV_VERBOSE__: !!env.verbose, + __NS_DEV_HOST_IPS__: + mode === 'development' ? JSON.stringify(getIPS()) : `[]`, + __CSS_PARSER__: JSON.stringify(getValue('cssParser', 'css-tree')), + __UI_USE_XML_PARSER__: true, + __UI_USE_EXTERNAL_RENDERER__: false, + __COMMONJS__: !!env.commonjs, + __ANDROID__: platform === 'android', + __IOS__: platform === 'ios', + __VISIONOS__: platform === 'visionos', + __APPLE__: platform === 'ios' || platform === 'visionos', + /* for compat only */ 'global.isAndroid': platform === 'android', + /* for compat only */ 'global.isIOS': + platform === 'ios' || platform === 'visionos', + /* for compat only */ 'global.isVisionOS': platform === 'visionos', + process: 'global.process', + }, + ] as any, + ); // enable DotEnv applyDotEnvPlugin(config); diff --git a/packages/webpack5/src/configuration/typescript.ts b/packages/webpack5/src/configuration/typescript.ts index da0409319..c909ff48c 100644 --- a/packages/webpack5/src/configuration/typescript.ts +++ b/packages/webpack5/src/configuration/typescript.ts @@ -12,7 +12,10 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { const entryPath = getEntryPath(); const virtualEntryPath = path.resolve( __dirname, - '../stubs/virtual-entry-typescript.js' + // Note: this is possible if needed + // at moment it's not but just leaving as note for futre + // `../stubs/virtual-entry-typescript.${env.commonjs ? 'js' : 'mjs'}`, + `../stubs/virtual-entry-typescript.js`, ); // exclude files starting with _ from require.context @@ -23,7 +26,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { chainedSetAddAfter( config.entry('bundle'), '@nativescript/core/globals/index', - virtualEntryPath + virtualEntryPath, ); config.when(env.hmr, (config) => { diff --git a/packages/webpack5/src/helpers/dependencies.ts b/packages/webpack5/src/helpers/dependencies.ts index 97f252827..c6cd74487 100644 --- a/packages/webpack5/src/helpers/dependencies.ts +++ b/packages/webpack5/src/helpers/dependencies.ts @@ -1,5 +1,6 @@ import path from 'path'; +import { satisfies } from 'semver'; import { getPackageJson, getProjectRootPath } from './project'; // todo: memoize @@ -67,3 +68,77 @@ export function getDependencyVersion(dependencyName: string): string | null { } return null; } + +/** + * Resolve a usable version string for checks (eg. semver.satisfies). + * Strategy: + * - prefer installed package.json version (getDependencyVersion) + * - fall back to declared version in project package.json (dependencies/devDependencies) + * - if declared is a common dist-tag (alpha|beta|rc|next) return a 9.x prerelease + */ +export function getResolvedDependencyVersionForCheck( + dependencyName: string, + target: string, +): string | null { + // try installed + const installed = getDependencyVersion(dependencyName); + if (installed) { + return installed; + } + + // try declared in project package.json + const pkg = getPackageJson(); + const declared = + (pkg.dependencies && pkg.dependencies[dependencyName]) || + (pkg.devDependencies && pkg.devDependencies[dependencyName]); + if (!declared) { + return null; + } + + // if declared already satisfies semver check, use it + // Note: declared may be a dist-tag like 'alpha' or a range. We only treat + // common tags as prereleases of target. Avoid trying to interpret arbitrary + // ranges here. + + // common dist-tags -> treat as prerelease of 9.x for the purpose of >=9 checks + if (/^(alpha|beta|rc|next)$/.test(String(declared))) { + return `${target}-0`; + } + + return declared ?? null; +} + +/** + * Numeric comparison that treats prerelease versions as being at the same + * numeric level as their base version. e.g. 9.0.0-alpha.2 >= 9.0.0 + */ +export function isVersionGteConsideringPrerelease( + version: string | null | undefined, + target: string, +): boolean { + if (!version) { + return false; + } + + try { + const v = require('semver').parse(String(version)); + const t = require('semver').parse(String(target)); + if (!v || !t) { + // fallback to semver.satisfies with a prerelease-aware lower bound + return require('semver').satisfies(String(version), `>=${target}-0`); + } + + if (v.major > t.major) return true; + if (v.major < t.major) return false; + if (v.minor > t.minor) return true; + if (v.minor < t.minor) return false; + if (v.patch >= t.patch) return true; + return false; + } catch (e) { + try { + return require('semver').satisfies(String(version), `>=${target}-0`); + } catch (e) { + return false; + } + } +} diff --git a/packages/webpack5/src/index.ts b/packages/webpack5/src/index.ts index c8765ec3a..8adc3bfaa 100644 --- a/packages/webpack5/src/index.ts +++ b/packages/webpack5/src/index.ts @@ -50,6 +50,9 @@ export interface IWebpackEnv { // print webpack stats (default: true) stats?: boolean; + // enable commonjs modules (default: ES modules, esm) + commonjs?: boolean; + // misc replace?: string[] | string; watchNodeModules?: boolean; @@ -158,10 +161,9 @@ export function chainWebpack( * @param mergeFn An object or a function that optionally returns an object (can mutate the object directly and return nothing) */ export function mergeWebpack( - mergeFn: (( - config: Partial, - env: IWebpackEnv, - ) => any) | Partial, + mergeFn: + | ((config: Partial, env: IWebpackEnv) => any) + | Partial, ) { webpackMerges.push(mergeFn); } diff --git a/packages/webpack5/src/loaders/nativescript-hot-loader/index.ts b/packages/webpack5/src/loaders/nativescript-hot-loader/index.ts index 6a91088f8..41cf4d29c 100644 --- a/packages/webpack5/src/loaders/nativescript-hot-loader/index.ts +++ b/packages/webpack5/src/loaders/nativescript-hot-loader/index.ts @@ -24,15 +24,10 @@ export default function loader(content: string, map: any) { return this.callback(null, `${content}\n${hmrRuntime}`, map); } - const relativePath = relative( - opts.appPath ?? this.rootContext, - this.resourcePath - ).replace(/\\/g, '/'); - const hmrCode = this.hot ? dedent` /* NATIVESCRIPT-HOT-LOADER */ - if(module.hot && global._isModuleLoadedForUI && global._isModuleLoadedForUI("./${relativePath}")) { + if(module.hot?.accept) { module.hot.accept() } ` diff --git a/packages/webpack5/src/plugins/CompatDefinePlugin.ts b/packages/webpack5/src/plugins/CompatDefinePlugin.ts new file mode 100644 index 000000000..2ed2f39aa --- /dev/null +++ b/packages/webpack5/src/plugins/CompatDefinePlugin.ts @@ -0,0 +1,14 @@ +export class CompatDefinePlugin { + private readonly definitions: Record; + + constructor(definitions: Record) { + this.definitions = definitions || {}; + } + + apply(compiler: any) { + // Use the same webpack instance as the compiler to avoid version mismatches + const wp = compiler?.webpack || require('webpack'); + const DefinePlugin = wp.DefinePlugin || require('webpack').DefinePlugin; + new DefinePlugin(this.definitions).apply(compiler); + } +} diff --git a/packages/webpack5/src/plugins/PlatformSuffixPlugin.ts b/packages/webpack5/src/plugins/PlatformSuffixPlugin.ts index d6b59483d..41a434268 100644 --- a/packages/webpack5/src/plugins/PlatformSuffixPlugin.ts +++ b/packages/webpack5/src/plugins/PlatformSuffixPlugin.ts @@ -37,22 +37,28 @@ export class PlatformSuffixPlugin { // require.context compiler.hooks.contextModuleFactory.tap(id, (cmf) => { // @ts-ignore - cmf.hooks.alternativeRequests.tap(id, (modules, options) => { - const additionalModules = []; - // we are looking for modules that are platform specific (something..ext) - // and we are duplicating them without the platform suffix - // this allows using require.context with non-existent platformless filenames - // but mapped to the platform specific variant (done in the resolver hook below) - for (const module of modules) { - if (platformRE.test(module.request)) { - additionalModules.push({ - ...module, - request: module.request.replace(platformRE, '.'), - }); + const altHook = (cmf as any).hooks?.alternativeRequests; + if (altHook && typeof altHook.tap === 'function') { + altHook.tap(id, (modules: any[], options: any) => { + const additionalModules = []; + // we are looking for modules that are platform specific (something..ext) + // and we are duplicating them without the platform suffix + // this allows using require.context with non-existent platformless filenames + // but mapped to the platform specific variant (done in the resolver hook below) + for (const module of modules) { + if (platformRE.test(module.request)) { + additionalModules.push({ + ...module, + request: module.request.replace(platformRE, '.'), + }); + } } - } - modules.push(...additionalModules); - }); + modules.push(...additionalModules); + }); + } else { + // Hook may be absent on some webpack versions; skip gracefully + // console.log(`[${id}] alternativeRequests hook not available; skipping.`) + } }); compiler.resolverFactory.hooks.resolver @@ -73,57 +79,68 @@ export class PlatformSuffixPlugin { // }); // }) - resolver.hooks.normalResolve.tapAsync( - id, - (request_, resolveContext, callback) => { - for (const platform of this.extensions) { - const { path, request } = request_; - const ext = request && extname(request); - const platformExt = ext ? `.${platform}${ext}` : ''; + const normalResolveHook = (resolver as any).hooks?.normalResolve; + const ensureHook = (name: string) => { + return typeof (resolver as any).ensureHook === 'function' + ? (resolver as any).ensureHook(name) + : (resolver as any).hooks?.[name]; + }; - if (path && request && ext && !request.includes(platformExt)) { - const platformRequest = request.replace(ext, platformExt); - const extPath = resolve(path, platformRequest); + if ( + !normalResolveHook || + typeof normalResolveHook.tapAsync !== 'function' + ) { + // Missing or incompatible hook; skip to avoid crashes + return; + } - // console.log({ - // path, - // request, - // ext, - // extPath - // }) + normalResolveHook.tapAsync(id, (request_, resolveContext, callback) => { + for (const platform of this.extensions) { + const { path, request } = request_; + const ext = request && extname(request); + const platformExt = ext ? `.${platform}${ext}` : ''; - // if a file with the same + a platform suffix exists - // we want to resolve that file instead - if (existsSync(extPath)) { - const message = `resolving "${request}" to "${platformRequest}"`; - const hook = resolver.ensureHook('normalResolve'); - console.log(message); + if (path && request && ext && !request.includes(platformExt)) { + const platformRequest = request.replace(ext, platformExt); + const extPath = resolve(path, platformRequest); - // here we are creating a new resolve object and replacing the path - // with the .. suffix - const obj = { - ...request_, - path: resolver.join(path, platformRequest), - relativePath: - request_.relativePath && - resolver.join(request_.relativePath, platformRequest), - request: undefined, - }; + // console.log({ + // path, + // request, + // ext, + // extPath + // }) - // we call to the actual resolver to do the resolving of this new file - return resolver.doResolve( - hook, - obj, - message, - resolveContext, - callback - ); - } + // if a file with the same + a platform suffix exists + // we want to resolve that file instead + if (existsSync(extPath)) { + const message = `resolving "${request}" to "${platformRequest}"`; + const hook = ensureHook('normalResolve'); + + // here we are creating a new resolve object and replacing the path + // with the .. suffix + const obj = { + ...request_, + path: resolver.join(path, platformRequest), + relativePath: + request_.relativePath && + resolver.join(request_.relativePath, platformRequest), + request: undefined, + }; + + // we call to the actual resolver to do the resolving of this new file + return (resolver as any).doResolve( + hook as any, + obj, + message, + resolveContext, + callback, + ); } } - callback(); } - ); + callback(); + }); // resolver.hooks.rawFile.tap(id, (request, resolveContext, callback) => { // if(request.path && !/\.ios\..+$/.test(request.path)) { // const { ext } = parse(request.path) diff --git a/packages/webpack5/src/polyfills/mdn-data-at-rules.ts b/packages/webpack5/src/polyfills/mdn-data-at-rules.ts new file mode 100644 index 000000000..048e5e3ee --- /dev/null +++ b/packages/webpack5/src/polyfills/mdn-data-at-rules.ts @@ -0,0 +1,8 @@ +/** + * Mock for mdn-data/css/at-rules.json + * Returns empty object since css-tree has its own comprehensive data + * This prevents css-tree from failing when trying to patch its data + */ + +// Return empty object - css-tree will use its built-in data instead +export = {}; diff --git a/packages/webpack5/src/polyfills/mdn-data-properties.ts b/packages/webpack5/src/polyfills/mdn-data-properties.ts new file mode 100644 index 000000000..dc81ffec7 --- /dev/null +++ b/packages/webpack5/src/polyfills/mdn-data-properties.ts @@ -0,0 +1,8 @@ +/** + * Mock for mdn-data/css/properties.json + * Returns empty object since css-tree has its own comprehensive data + * This prevents css-tree from failing when trying to patch its data + */ + +// Return empty object - css-tree will use its built-in data instead +export = {}; diff --git a/packages/webpack5/src/polyfills/mdn-data-syntaxes.ts b/packages/webpack5/src/polyfills/mdn-data-syntaxes.ts new file mode 100644 index 000000000..162ddbb39 --- /dev/null +++ b/packages/webpack5/src/polyfills/mdn-data-syntaxes.ts @@ -0,0 +1,8 @@ +/** + * Mock for mdn-data/css/syntaxes.json + * Returns empty object since css-tree has its own comprehensive data + * This prevents css-tree from failing when trying to patch its data + */ + +// Return empty object - css-tree will use its built-in data instead +export = {}; diff --git a/packages/webpack5/src/polyfills/module.ts b/packages/webpack5/src/polyfills/module.ts new file mode 100644 index 000000000..ebc2b6ffe --- /dev/null +++ b/packages/webpack5/src/polyfills/module.ts @@ -0,0 +1,47 @@ +/** + * Polyfill for Node.js 'module' built-in + * Provides minimal implementation for NativeScript environment + */ + +// Mock createRequire function that css-tree uses +function createRequire(filename: string) { + // Return a mock require function + return function mockRequire(id: string) { + // Handle css-tree's internal patch.json file + if (id.includes('../data/patch.json') || id.includes('patch.json')) { + // Return css-tree's patch structure + return { + atrules: {}, + properties: {}, + types: {}, + }; + } + + // For mdn-data files, return empty objects + if (id.includes('mdn-data')) { + return {}; + } + + // For any other requires, return empty object + return {}; + }; +} + +// CommonJS export +module.exports = { + createRequire: createRequire, +}; + +// Provide a named export for ESM consumers: `import { createRequire } from 'module'` +try { + Object.defineProperty(module.exports, 'createRequire', { + enumerable: true, + value: createRequire, + }); + // Also export under an __esModule flag for certain bundlers + Object.defineProperty(module.exports, '__esModule', { + value: true, + }); +} catch (e) { + // ignore in environments where defineProperty is unavailable +} diff --git a/packages/webpack5/src/stubs/virtual-entry-javascript.js b/packages/webpack5/src/stubs/virtual-entry-javascript.js index 86e778c00..a853ee5f1 100644 --- a/packages/webpack5/src/stubs/virtual-entry-javascript.js +++ b/packages/webpack5/src/stubs/virtual-entry-javascript.js @@ -1,5 +1,5 @@ // VIRTUAL ENTRY START require('@nativescript/core/bundle-entry-points') const context = require.context("~/", /* deep: */ true, /* filter: */ /.(xml|js|s?css)$/); -global.registerWebpackModules(context); +global.registerBundlerModules(context); // VIRTUAL ENTRY END \ No newline at end of file diff --git a/packages/webpack5/src/stubs/virtual-entry-typescript.js b/packages/webpack5/src/stubs/virtual-entry-typescript.js index 083813806..c514317f4 100644 --- a/packages/webpack5/src/stubs/virtual-entry-typescript.js +++ b/packages/webpack5/src/stubs/virtual-entry-typescript.js @@ -1,5 +1,5 @@ // VIRTUAL ENTRY START require('@nativescript/core/bundle-entry-points') const context = require.context("~/", /* deep: */ true, /* filter: */ /\.(xml|js|(?