From c5620bdda5a5610449630800260e545943d92c99 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 5 Mar 2025 12:02:01 -0800 Subject: [PATCH 001/136] chore: 8.9.2 next --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 89cf4e48ed..04b854cefa 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "8.9.1", + "version": "8.9.2", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From ca6fb68a96cbf4006885c878527c0743b3dae248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20de=20Dios=20Mart=C3=ADnez=20Vallejo?= Date: Mon, 24 Mar 2025 21:31:05 +0100 Subject: [PATCH 002/136] fix: remove --legacy-peer-deps flag on install (#5839) --- lib/bun-package-manager.ts | 5 +---- lib/node-package-manager.ts | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/bun-package-manager.ts b/lib/bun-package-manager.ts index b2d5b8f842..cfd5ffc057 100644 --- a/lib/bun-package-manager.ts +++ b/lib/bun-package-manager.ts @@ -47,10 +47,7 @@ export class BunPackageManager extends BasePackageManager { const jsonContentBefore = this.$fs.readJson(packageJsonPath); const flags = this.getFlagsString(config, true); - // TODO: Confirm desired behavior. The npm version uses --legacy-peer-deps - // by default, we could use `--no-peer` for Bun if similar is needed; the - // pnpm version uses `--shamefully-hoist`, but Bun has no similar flag. - let params = ["install", "--legacy-peer-deps"]; + let params = ["install"]; const isInstallingAllDependencies = packageName === pathToSave; if (!isInstallingAllDependencies) { params.push(packageName); diff --git a/lib/node-package-manager.ts b/lib/node-package-manager.ts index 254ff7e5e5..bf63cae523 100644 --- a/lib/node-package-manager.ts +++ b/lib/node-package-manager.ts @@ -47,7 +47,7 @@ export class NodePackageManager extends BasePackageManager { const jsonContentBefore = this.$fs.readJson(packageJsonPath); const flags = this.getFlagsString(config, true); - let params = ["install", "--legacy-peer-deps"]; + let params = ["install"]; const isInstallingAllDependencies = packageName === pathToSave; if (!isInstallingAllDependencies) { params.push(packageName); From af8149113844a7aebcd6bf66eeae73154ac7927b Mon Sep 17 00:00:00 2001 From: Dimitris-Rafail Katsampas Date: Mon, 24 Mar 2025 22:36:06 +0200 Subject: [PATCH 003/136] fix: icon generator color type error (#5838) --- .../assets-generation-service.ts | 81 ++++++++++--------- 1 file changed, 43 insertions(+), 38 deletions(-) diff --git a/lib/services/assets-generation/assets-generation-service.ts b/lib/services/assets-generation/assets-generation-service.ts index 6f669d5bf4..fb37845e51 100644 --- a/lib/services/assets-generation/assets-generation-service.ts +++ b/lib/services/assets-generation/assets-generation-service.ts @@ -1,4 +1,4 @@ -import { Jimp, cssColorToHex, rgbaToInt, JimpInstance } from "jimp"; +import JimpModule = require("jimp"); import * as Color from "color"; import { exported } from "../../common/decorators"; import { AssetConstants } from "../../constants"; @@ -113,7 +113,7 @@ export class AssetsGenerationService implements IAssetsGenerationService { assetItem.data?.default ?? "white"; - const colorHEX: number = cssColorToHex(color); + const colorHEX: number = JimpModule.cssColorToHex(color); const hex = colorHEX?.toString(16).substring(0, 6) ?? "FFFFFF"; this.$fs.writeFile( @@ -164,7 +164,8 @@ export class AssetsGenerationService implements IAssetsGenerationService { continue; } - let image: JimpInstance; + let image: JimpModule.JimpInstance; + switch (operation) { case Operations.OverlayWith: const overlayImageScale = @@ -178,16 +179,10 @@ export class AssetsGenerationService implements IAssetsGenerationService { imageResize, imageResize, ); - image = this.generateImage( - background, - width, - height, - outputPath, - image, - ); + image = this.generateImage(background, width, height, image); break; case Operations.Blank: - image = this.generateImage(background, width, height, outputPath); + image = this.generateImage(background, width, height); break; case Operations.Resize: image = await this.resize(generationData.imagePath, width, height); @@ -200,13 +195,7 @@ export class AssetsGenerationService implements IAssetsGenerationService { assetItem.height, ); // The scale will apply to the underlying layer of the generated image - image = this.generateImage( - "#00000000", - width, - height, - outputPath, - image, - ); + image = this.generateImage("#00000000", width, height, image); break; default: throw new Error(`Invalid image generation operation: ${operation}`); @@ -214,16 +203,17 @@ export class AssetsGenerationService implements IAssetsGenerationService { // This code disables the alpha chanel, as some images for the Apple App Store must not have transparency. if (assetItem.rgba === false) { - // - // The original code here became broken at some time and there is an issue posted here.. - // https://github.com/oliver-moran/jimp/issues/954 - // But NathanaelA recommended the below change and it works so maybe that's just what we go with. - // - // image = image.rgba(false); - image = (image as any).colorType(2); + // Add an underlying white layer + image = this.generateImage("#FFFFFF", image.width, image.height, image); } - image.write(outputPath as any); + if (this.isAssetFilePath(outputPath)) { + image.write(outputPath); + } else { + this.$logger.warn( + `Incorrect destination path ${outputPath} for image ${assetItem.filename}`, + ); + } } } @@ -231,29 +221,30 @@ export class AssetsGenerationService implements IAssetsGenerationService { imagePath: string, width: number, height: number, - ): Promise { - const image = await Jimp.read(imagePath); + ): Promise { + const image = await JimpModule.Jimp.read(imagePath); return image.scaleToFit({ w: width, h: height, - }) as any; + }) as JimpModule.JimpInstance; } private generateImage( background: string, width: number, height: number, - outputPath: string, - overlayImage?: JimpInstance, - ): JimpInstance { - // Typescript declarations for Jimp are not updated to define the constructor with backgroundColor so we workaround it by casting it to for this case only. - const J = Jimp; + overlayImage?: JimpModule.JimpInstance, + ): JimpModule.JimpInstance { const backgroundColor = this.getRgbaNumber(background); - let image = new J(width, height, backgroundColor); + let image = new JimpModule.Jimp({ + width, + height, + color: backgroundColor, + }); if (overlayImage) { - const centeredWidth = (width - overlayImage.bitmap.width) / 2; - const centeredHeight = (height - overlayImage.bitmap.height) / 2; + const centeredWidth = (width - overlayImage.width) / 2; + const centeredHeight = (height - overlayImage.height) / 2; image = image.composite(overlayImage, centeredWidth, centeredHeight); } @@ -265,7 +256,21 @@ export class AssetsGenerationService implements IAssetsGenerationService { const colorRgb = color.rgb(); const alpha = Math.round(colorRgb.alpha() * 255); - return rgbaToInt(colorRgb.red(), colorRgb.green(), colorRgb.blue(), alpha); + return JimpModule.rgbaToInt( + colorRgb.red(), + colorRgb.green(), + colorRgb.blue(), + alpha, + ); + } + + private isAssetFilePath(path: string): path is `${string}.${string}` { + if (!path) { + return false; + } + + const index = path.lastIndexOf("."); + return index > -1 && index < path.length - 1; } } From a4faa9cd7f7d0cdd34bba2ea5f42bf8e0ff1004f Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 25 Mar 2025 13:12:51 -0700 Subject: [PATCH 004/136] release: 8.9.2 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 487d817ca9..e7e3fa82ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## [8.9.2](https://github.com/NativeScript/nativescript-cli/compare/v8.9.1...v8.9.2) (2025-03-25) + + +### Bug Fixes + +* icon generator color type error ([#5838](https://github.com/NativeScript/nativescript-cli/issues/5838)) ([af81491](https://github.com/NativeScript/nativescript-cli/commit/af8149113844a7aebcd6bf66eeae73154ac7927b)) +* remove --legacy-peer-deps flag on install ([#5839](https://github.com/NativeScript/nativescript-cli/issues/5839)) ([ca6fb68](https://github.com/NativeScript/nativescript-cli/commit/ca6fb68a96cbf4006885c878527c0743b3dae248)) + + + ## [8.9.1](https://github.com/NativeScript/nativescript-cli/compare/v8.9.0...v8.9.1) (2025-03-05) From 4d184bef94443b48d57665871bb2f51c4f6e0b25 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 25 Mar 2025 13:13:24 -0700 Subject: [PATCH 005/136] chore: 8.9.3 next --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04b854cefa..5fe54c4a8a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "8.9.2", + "version": "8.9.3", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From 1e8b93fb0b8c5ac3080fdb5eecec5b7326859c81 Mon Sep 17 00:00:00 2001 From: Samuel Schultze Date: Wed, 16 Jul 2025 14:24:19 -0300 Subject: [PATCH 006/136] fix: pass down process environment to webpack process (#5844) --- lib/services/webpack/webpack-compiler-service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/services/webpack/webpack-compiler-service.ts b/lib/services/webpack/webpack-compiler-service.ts index 323899793a..34a805c8a1 100644 --- a/lib/services/webpack/webpack-compiler-service.ts +++ b/lib/services/webpack/webpack-compiler-service.ts @@ -356,6 +356,7 @@ export class WebpackCompilerService }; options.env = { NATIVESCRIPT_WEBPACK_ENV: JSON.stringify(envData), + ...process.env, }; if (this.$hostInfo.isWindows) { Object.assign(options.env, { APPDATA: process.env.appData }); From 4df139dc83456ac98dc4cdae765b72a47a945f91 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 16 Jul 2025 10:42:50 -0700 Subject: [PATCH 007/136] fix(bundler): include process.env first --- .../webpack/webpack-compiler-service.ts | 86 +++++++++---------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/lib/services/webpack/webpack-compiler-service.ts b/lib/services/webpack/webpack-compiler-service.ts index 34a805c8a1..5a571b7168 100644 --- a/lib/services/webpack/webpack-compiler-service.ts +++ b/lib/services/webpack/webpack-compiler-service.ts @@ -64,7 +64,7 @@ export class WebpackCompilerService private $mobileHelper: Mobile.IMobileHelper, private $cleanupService: ICleanupService, private $packageManager: IPackageManager, - private $packageInstallationManager: IPackageInstallationManager // private $sharedEventBus: ISharedEventBus + private $packageInstallationManager: IPackageInstallationManager, // private $sharedEventBus: ISharedEventBus ) { super(); } @@ -72,7 +72,7 @@ export class WebpackCompilerService public async compileWithWatch( platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ): Promise { return new Promise(async (resolve, reject) => { if (this.webpackProcesses[platformData.platformNameLowerCase]) { @@ -86,7 +86,7 @@ export class WebpackCompilerService const childProcess = await this.startWebpackProcess( platformData, projectData, - prepareData + prepareData, ); childProcess.stdout.on("data", function (data) { @@ -125,7 +125,7 @@ export class WebpackCompilerService message as IWebpackMessage, platformData, projectData, - prepareData + prepareData, ); } @@ -153,7 +153,7 @@ export class WebpackCompilerService message.emittedFiles, message.chunkFiles, message.hash, - platformData.platformNameLowerCase + platformData.platformNameLowerCase, ); } else { result = { @@ -166,21 +166,21 @@ export class WebpackCompilerService path.join( platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, - file - ) + file, + ), ); const fallbackFiles = result.fallbackFiles.map((file: string) => path.join( platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, - file - ) + file, + ), ); const data = { files, hasOnlyHotUpdateFiles: files.every( - (f) => f.indexOf("hot-update") > -1 + (f) => f.indexOf("hot-update") > -1, ), hmrData: { hash: result.hash, @@ -204,7 +204,7 @@ export class WebpackCompilerService childProcess.on("error", (err) => { this.$logger.trace( - `Unable to start webpack process in watch mode. Error is: ${err}` + `Unable to start webpack process in watch mode. Error is: ${err}`, ); delete this.webpackProcesses[platformData.platformNameLowerCase]; reject(err); @@ -212,15 +212,15 @@ export class WebpackCompilerService childProcess.on("close", async (arg: any) => { await this.$cleanupService.removeKillProcess( - childProcess.pid.toString() + childProcess.pid.toString(), ); const exitCode = typeof arg === "number" ? arg : arg && arg.code; this.$logger.trace( - `Webpack process exited with code ${exitCode} when we expected it to be long living with watch.` + `Webpack process exited with code ${exitCode} when we expected it to be long living with watch.`, ); const error: any = new Error( - `Executing webpack failed with exit code ${exitCode}.` + `Executing webpack failed with exit code ${exitCode}.`, ); error.code = exitCode; delete this.webpackProcesses[platformData.platformNameLowerCase]; @@ -235,7 +235,7 @@ export class WebpackCompilerService public async compileWithoutWatch( platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ): Promise { return new Promise(async (resolve, reject) => { if (this.webpackProcesses[platformData.platformNameLowerCase]) { @@ -247,12 +247,12 @@ export class WebpackCompilerService const childProcess = await this.startWebpackProcess( platformData, projectData, - prepareData + prepareData, ); childProcess.on("error", (err) => { this.$logger.trace( - `Unable to start webpack process in non-watch mode. Error is: ${err}` + `Unable to start webpack process in non-watch mode. Error is: ${err}`, ); delete this.webpackProcesses[platformData.platformNameLowerCase]; reject(err); @@ -260,7 +260,7 @@ export class WebpackCompilerService childProcess.on("close", async (arg: any) => { await this.$cleanupService.removeKillProcess( - childProcess.pid.toString() + childProcess.pid.toString(), ); delete this.webpackProcesses[platformData.platformNameLowerCase]; @@ -269,7 +269,7 @@ export class WebpackCompilerService resolve(); } else { const error: any = new Error( - `Executing webpack failed with exit code ${exitCode}.` + `Executing webpack failed with exit code ${exitCode}.`, ); error.code = exitCode; reject(error); @@ -307,24 +307,24 @@ export class WebpackCompilerService private async startWebpackProcess( platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ): Promise { if (!this.$fs.exists(projectData.webpackConfigPath)) { this.$errors.fail( - `The webpack configuration file ${projectData.webpackConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}.` + `The webpack configuration file ${projectData.webpackConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}.`, ); } const envData = this.buildEnvData( platformData.platformNameLowerCase, projectData, - prepareData + prepareData, ); const envParams = await this.buildEnvCommandLineParams( envData, platformData, projectData, - prepareData + prepareData, ); const additionalNodeArgs = semver.major(process.version) <= 8 ? ["--harmony"] : []; @@ -355,8 +355,8 @@ export class WebpackCompilerService stdio, }; options.env = { - NATIVESCRIPT_WEBPACK_ENV: JSON.stringify(envData), ...process.env, + NATIVESCRIPT_WEBPACK_ENV: JSON.stringify(envData), }; if (this.$hostInfo.isWindows) { Object.assign(options.env, { APPDATA: process.env.appData }); @@ -373,7 +373,7 @@ export class WebpackCompilerService const childProcess = this.$childProcess.spawn( process.execPath, args, - options + options, ); this.webpackProcesses[platformData.platformNameLowerCase] = childProcess; @@ -385,7 +385,7 @@ export class WebpackCompilerService private buildEnvData( platform: string, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ) { const { env } = prepareData; const envData = Object.assign({}, env, { [platform.toLowerCase()]: true }); @@ -404,9 +404,9 @@ export class WebpackCompilerService __dirname, "..", "..", - "nativescript-cli-lib.js" + "nativescript-cli-lib.js", ), - } + }, ); envData.verbose = envData.verbose || this.$logger.isVerbose(); @@ -453,7 +453,7 @@ export class WebpackCompilerService envData: any, platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ) { const envFlagNames = Object.keys(envData); const canSnapshot = @@ -463,7 +463,7 @@ export class WebpackCompilerService if (!canSnapshot) { this.$logger.warn( "Stripping the snapshot flag. " + - "Bear in mind that snapshot is only available in Android release builds." + "Bear in mind that snapshot is only available in Android release builds.", ); envFlagNames.splice(envFlagNames.indexOf("snapshot"), 1); } else if (this.$hostInfo.isWindows) { @@ -471,18 +471,18 @@ export class WebpackCompilerService const installedWebpackPluginVersion = await this.$packageInstallationManager.getInstalledDependencyVersion( WEBPACK_PLUGIN_NAME, - projectData.projectDir + projectData.projectDir, ); const hasWebpackPluginWithWinSnapshotsSupport = !!installedWebpackPluginVersion ? semver.gte( semver.coerce(installedWebpackPluginVersion), - minWebpackPluginWithWinSnapshotsVersion - ) + minWebpackPluginWithWinSnapshotsVersion, + ) : true; if (!hasWebpackPluginWithWinSnapshotsSupport) { this.$errors.fail( - `In order to generate Snapshots on Windows, please upgrade your Webpack plugin version (npm i ${WEBPACK_PLUGIN_NAME}@latest).` + `In order to generate Snapshots on Windows, please upgrade your Webpack plugin version (npm i ${WEBPACK_PLUGIN_NAME}@latest).`, ); } } @@ -514,7 +514,7 @@ export class WebpackCompilerService allEmittedFiles: string[], chunkFiles: string[], nextHash: string, - platform: string + platform: string, ) { const currentHash = this.getCurrentHotUpdateHash(allEmittedFiles); @@ -536,7 +536,7 @@ export class WebpackCompilerService ? _.difference(allEmittedFiles, chunkFiles) : allEmittedFiles; const fallbackFiles = chunkFiles.concat( - emittedHotUpdatesAndAssets.filter((f) => f.indexOf("hot-update") === -1) + emittedHotUpdatesAndAssets.filter((f) => f.indexOf("hot-update") === -1), ); return { @@ -549,7 +549,7 @@ export class WebpackCompilerService private getCurrentHotUpdateHash(emittedFiles: string[]) { let hotHash; const hotUpdateScripts = emittedFiles.filter((x) => - x.endsWith(".hot-update.js") + x.endsWith(".hot-update.js"), ); if (hotUpdateScripts && hotUpdateScripts.length) { // the hash is the same for each hot update in the current compilation @@ -576,7 +576,7 @@ export class WebpackCompilerService message: IWebpackMessage, platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ) { // handle new webpack hmr packets this.$logger.trace("Received message from webpack process:", message); @@ -591,21 +591,21 @@ export class WebpackCompilerService path.join( platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, - asset - ) + asset, + ), ); const staleFiles = message.data.staleAssets.map((asset: string) => path.join( platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, - asset - ) + asset, + ), ); // extract last hash from emitted filenames const lastHash = (() => { const absoluteFileNameWithLastHash = files.find((fileName: string) => - fileName.endsWith("hot-update.js") + fileName.endsWith("hot-update.js"), ); if (!absoluteFileNameWithLastHash) { From 2f35e04f50dad4d3493e52754b7216571f95a5b5 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 16 Jul 2025 10:51:32 -0700 Subject: [PATCH 008/136] release: 8.9.3 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7e3fa82ea..14db2db140 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## [8.9.3](https://github.com/NativeScript/nativescript-cli/compare/v8.9.2...v8.9.3) (2025-07-16) + + +### Bug Fixes + +* **bundler:** include process.env first ([4df139d](https://github.com/NativeScript/nativescript-cli/commit/4df139dc83456ac98dc4cdae765b72a47a945f91)) +* pass down process environment to webpack process ([#5844](https://github.com/NativeScript/nativescript-cli/issues/5844)) ([1e8b93f](https://github.com/NativeScript/nativescript-cli/commit/1e8b93fb0b8c5ac3080fdb5eecec5b7326859c81)) + + + ## [8.9.2](https://github.com/NativeScript/nativescript-cli/compare/v8.9.1...v8.9.2) (2025-03-25) diff --git a/package-lock.json b/package-lock.json index 1341cd2e72..123e11e5c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nativescript", - "version": "8.9.1", + "version": "8.9.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nativescript", - "version": "8.9.1", + "version": "8.9.3", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { From 067ffd90b62853be5edaf1b37d1ee60aad13874b Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 16 Jul 2025 10:52:07 -0700 Subject: [PATCH 009/136] chore: 8.9.4 next --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5fe54c4a8a..8dbd629ed2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "8.9.3", + "version": "8.9.4", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From 0b08cb29bda03495a1e9a99e4bef100bc2d88838 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 26 Jul 2025 18:03:52 -0700 Subject: [PATCH 010/136] fix(security): axios 1.11.0 (#5847) https://github.com/NativeScript/NativeScript/security/dependabot/17 --- Gruntfile.js | 2 - package-lock.json | 770 ++++++++++++++++++++++------------------------ package.json | 2 +- 3 files changed, 362 insertions(+), 412 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index ad630f4650..c2ca4d482c 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -248,7 +248,6 @@ function registerTestingDependenciesTasks(grunt) { const generatedVersionFilePath = path.join(configsBasePath, "test-deps-versions-generated.json"); grunt.registerTask("generate_unit_testing_dependencies", async function () { - var done = this.async(); const dependenciesVersions = {}; const testDependencies = grunt.file.readJSON(path.join(configsBasePath, "test-dependencies.json")); for (var dependency of testDependencies) { @@ -256,7 +255,6 @@ function registerTestingDependenciesTasks(grunt) { dependenciesVersions[dependency.name] = dependencyVersion; } grunt.file.write(generatedVersionFilePath, JSON.stringify(dependenciesVersions)); - done(); }); grunt.registerTask("verify_unit_testing_dependencies", function () { diff --git a/package-lock.json b/package-lock.json index 123e11e5c8..8a0235a463 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nativescript", - "version": "8.9.3", + "version": "8.9.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nativescript", - "version": "8.9.3", + "version": "8.9.4", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -17,7 +17,7 @@ "@rigor789/trapezedev-project": "7.1.2", "ansi-colors": "^4.1.3", "archiver": "^7.0.1", - "axios": "1.7.9", + "axios": "1.11.0", "byline": "5.0.0", "chalk": "4.1.2", "chokidar": "4.0.3", @@ -132,23 +132,23 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -301,6 +301,27 @@ "node": ">=16.0.0" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -834,9 +855,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -890,6 +911,18 @@ "node": ">=10" } }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -949,9 +982,9 @@ } }, "node_modules/@npmcli/arborist": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.0.0.tgz", - "integrity": "sha512-ZFsI/VJ7wJ2rTksLNJ9xqr75Ste/wiKvW+7w12ZGbcT67xWii97yS+aDlh3edNhqlqoXvdzYG4hTNui81VxJCA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.3.tgz", + "integrity": "sha512-PvwtZD1dipP5VByHyWX28tZfan1AkfBLenJTgr0rDdEbdovZc06Z5PHdGb5SEeN7EERl68wFH8lq6WvuUHmgrw==", "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", @@ -1149,9 +1182,9 @@ } }, "node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.0.tgz", - "integrity": "sha512-znLKqdy1ZEGNK3VB9j/RzGyb/P0BJb3fGpvEbHIAyBAXsps2l1ce8SVHfsGAFLl9s8072PxafqTn7RC8wSnQPg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.1.tgz", + "integrity": "sha512-B7ziEnkSmnauecEvFbg9h0d2CVa3uJudd9bTDc9vScfYdRETkQkCriFiYCV3PXE++igd5JRw35WJz902HnGrCg==", "license": "ISC", "dependencies": { "cacache": "^19.0.0", @@ -1183,9 +1216,9 @@ } }, "node_modules/@npmcli/package-json": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.1.1.tgz", - "integrity": "sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", "license": "ISC", "dependencies": { "@npmcli/git": "^6.0.0", @@ -1288,30 +1321,30 @@ } }, "node_modules/@npmcli/query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-4.0.0.tgz", - "integrity": "sha512-3pPbese0fbCiFJ/7/X1GBgxAKYFE8sxBddA7GtuRmOgNseH4YbGsXJ807Ig3AEwNITjDUISHglvy89cyDJnAwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-4.0.1.tgz", + "integrity": "sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw==", "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/redact": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.1.1.tgz", - "integrity": "sha512-3Hc2KGIkrvJWJqTbvueXzBeZlmvoOxc2jyX00yzr3+sNFquJg0N8hH4SAPLPVrkWIRQICVpVgjrss971awXVnA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/run-script": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.0.2.tgz", - "integrity": "sha512-cJXiUlycdizQwvqE1iaAb4VRUM3RX09/8q46zjvy+ct9GhfZRWd7jXYVc1tn/CfRlGPVkX/u4sstRlepsm7hfw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^4.0.0", @@ -1325,6 +1358,15 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1477,9 +1519,9 @@ } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.0.tgz", - "integrity": "sha512-o09cLSIq9EKyRXwryWDOJagkml9XgQCoCSRjHOnHLnvsivaW7Qznzz6yjfV7PHJHhIvyp8OH7OX8w0Dc5bQK7A==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", "license": "Apache-2.0", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -1503,12 +1545,12 @@ } }, "node_modules/@sigstore/tuf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.0.tgz", - "integrity": "sha512-suVMQEA+sKdOz5hwP9qNcEjX6B45R+hFFr4LAWzbRc5O+U2IInwvay/bpG5a4s+qR35P/JK/PiKiRGjfuLy1IA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/protobuf-specs": "^0.4.1", "tuf-js": "^3.0.1" }, "engines": { @@ -1516,14 +1558,14 @@ } }, "node_modules/@sigstore/verify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.0.tgz", - "integrity": "sha512-kAAM06ca4CzhvjIZdONAL9+MLppW3K48wOFy1TbuaWFW/OMfl8JuTgW0Bm02JB1WJGT/ET2eqav0KTEKmxqkIA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0" + "@sigstore/protobuf-specs": "^0.4.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -1562,14 +1604,13 @@ } }, "node_modules/@sinonjs/samsam": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", - "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", + "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "lodash.get": "^4.4.2", "type-detect": "^4.1.0" } }, @@ -1710,9 +1751,9 @@ } }, "node_modules/@types/cacache": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@types/cacache/-/cacache-17.0.2.tgz", - "integrity": "sha512-IrqHzVX2VRMDQQKa7CtKRnuoCLdRJiLW6hWU+w7i7+AaQ0Ii5bKwJxd5uRK4zBCyrHd3tG6G8zOm2LplxbSfQg==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@types/cacache/-/cacache-19.0.0.tgz", + "integrity": "sha512-O4V427CUunRaoaoG6awmIbamf/gTmsys9PHJNb2ujB+tGtSiDkAtkT+M8Lc04jhDxVBIWnBkFoKjFyne4zjKEw==", "dev": true, "license": "MIT", "dependencies": { @@ -1867,12 +1908,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "version": "22.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", + "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-fetch": { @@ -1900,9 +1941,9 @@ "license": "MIT" }, "node_modules/@types/npm-registry-fetch": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/@types/npm-registry-fetch/-/npm-registry-fetch-8.0.7.tgz", - "integrity": "sha512-db9iBh7kDDg4lRT4k4XZ6IiecTEgFCID4qk+VDVPbtzU855q3KZLCn08ATr4H27ntRJVhulQ7GWjl24H42x96w==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@types/npm-registry-fetch/-/npm-registry-fetch-8.0.8.tgz", + "integrity": "sha512-VL/chssZawBkaQ5gFD5njblJce/ny9OICBlWAG9X6/m/ypPNJMWYiM22SY2mhLIGoknd4AyEJyi+FGyrBnsr+A==", "dev": true, "license": "MIT", "dependencies": { @@ -1914,9 +1955,9 @@ } }, "node_modules/@types/npmcli__arborist": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@types/npmcli__arborist/-/npmcli__arborist-6.3.0.tgz", - "integrity": "sha512-CXkuOBZDlcb+r0UMlmEAq3XOUZrL9XfZ2MXIwCSo726OBkkg+UIWlZ9h3n6To9w1WqMEIOZT2LkerhLgnsPV+Q==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@types/npmcli__arborist/-/npmcli__arborist-6.3.1.tgz", + "integrity": "sha512-CUADRvIKRFwVuiroLQ0wWzOpeOcL8OacCbODtZZxMOA+PBg1au/D8ry/zBnQWdEH+i0IXKeNL2Nt0er30bYWng==", "dev": true, "license": "MIT", "dependencies": { @@ -2034,25 +2075,64 @@ "license": "MIT" }, "node_modules/@types/shelljs": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz", - "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==", + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.17.tgz", + "integrity": "sha512-IDksKYmQA2W9MkQjiyptbMmcQx+8+Ol6b7h6dPU5S05JyiQDSb/nZKnrMrZqGwgV6VkVdl6/SPCKPDlMRvqECg==", "dev": true, "license": "MIT", "dependencies": { - "@types/glob": "~7.2.0", - "@types/node": "*" + "@types/node": "*", + "glob": "^11.0.3" } }, - "node_modules/@types/shelljs/node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@types/shelljs/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/shelljs/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/shelljs/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/@types/sinon": { @@ -2219,9 +2299,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -2249,9 +2329,9 @@ "license": "MIT" }, "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { "node": ">= 14" @@ -2810,13 +2890,13 @@ } }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -2833,9 +2913,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.0.tgz", + "integrity": "sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==", "license": "Apache-2.0", "optional": true }, @@ -3002,9 +3082,9 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -4094,9 +4174,9 @@ } }, "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-writer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.0.1.tgz", - "integrity": "sha512-hlqcy3xHred2gyYg/zXSMXraY2mjAYYo0msUCpK+BGyaVJMFCKWVXPIHiaacGO2GGp13kvHWXFhYmxT4QQqW3Q==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz", + "integrity": "sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -4123,9 +4203,9 @@ } }, "node_modules/conventional-changelog-cli/node_modules/conventional-commits-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.1.0.tgz", - "integrity": "sha512-5nxDo7TwKB5InYBl4ZC//1g9GRwB/F3TXOGR9hgUjMGfvSP4Vu5NkpNro2+1+TIEy1vwxApl5ircECr2ri5JIw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.0.tgz", + "integrity": "sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==", "dev": true, "license": "MIT", "dependencies": { @@ -4201,15 +4281,15 @@ } }, "node_modules/conventional-changelog-cli/node_modules/parse-json": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { "node": ">=18" @@ -4239,9 +4319,9 @@ } }, "node_modules/conventional-changelog-cli/node_modules/type-fest": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", - "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -5075,9 +5155,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5233,9 +5313,9 @@ } }, "node_modules/del/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -6229,14 +6309,15 @@ } }, "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -6244,15 +6325,18 @@ } }, "node_modules/formidable": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.2.tgz", - "integrity": "sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "license": "MIT", "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", - "hexoid": "^2.0.0", "once": "^1.4.0" }, + "engines": { + "node": ">=14.0.0" + }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } @@ -7233,9 +7317,9 @@ } }, "node_modules/globule/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -7961,9 +8045,9 @@ } }, "node_modules/grunt/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -8217,15 +8301,6 @@ "he": "bin/he" } }, - "node_modules/hexoid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-2.0.0.tgz", - "integrity": "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", @@ -8258,9 +8333,9 @@ } }, "node_modules/hosted-git-info": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", - "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" @@ -8270,15 +8345,15 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "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" }, @@ -8383,27 +8458,27 @@ "license": "ISC" }, "node_modules/ignore-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", - "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "minimatch": "^10.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8443,9 +8518,9 @@ } }, "node_modules/index-to-position": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", - "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", "dev": true, "license": "MIT", "engines": { @@ -8987,9 +9062,9 @@ "license": "MIT" }, "node_modules/istanbul/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -9112,9 +9187,9 @@ } }, "node_modules/jackspeak": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -9308,9 +9383,9 @@ } }, "node_modules/ky": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.5.tgz", - "integrity": "sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.8.2.tgz", + "integrity": "sha512-XybQJ3d4Ea1kI27DoelE5ZCT3bSJlibYTtQuMsyzKox3TMyayw1asgQdl54WroAm+fIA3ZCr8zXW2RpR7qWVpA==", "dev": true, "license": "MIT", "engines": { @@ -9510,9 +9585,9 @@ } }, "node_modules/listr2": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", - "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9661,14 +9736,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", @@ -9839,9 +9906,9 @@ } }, "node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz", + "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==", "dev": true, "license": "MIT" }, @@ -10315,68 +10382,17 @@ "license": "ISC" }, "node_modules/minizlib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", - "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "license": "MIT", "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" + "minipass": "^7.1.2" }, "engines": { "node": ">= 18" } }, - "node_modules/minizlib/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/minizlib/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/minizlib/node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -10386,37 +10402,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/minizlib/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -10725,9 +10710,9 @@ } }, "node_modules/nan": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", - "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", "dev": true, "license": "MIT", "optional": true @@ -10888,20 +10873,20 @@ } }, "node_modules/node-gyp": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.1.0.tgz", - "integrity": "sha512-/+7TuHKnBpnMvUQnsYEb0JOozDZqarQbfNuSGLXIjhStMT0fbw7IdSqWgopOP5xhRZE+lsbIvAHcekddruPZgQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", + "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", "make-fetch-happen": "^14.0.3", "nopt": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "tar": "^7.4.3", + "tinyglobby": "^0.2.12", "which": "^5.0.0" }, "bin": { @@ -10920,81 +10905,6 @@ "node": ">=6" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/node-gyp/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/nodemon": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz", @@ -11049,9 +10959,9 @@ } }, "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -11155,9 +11065,9 @@ } }, "node_modules/nopt/node_modules/abbrev": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz", - "integrity": "sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -11266,12 +11176,12 @@ } }, "node_modules/npm-packlist": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.0.tgz", - "integrity": "sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.1.tgz", + "integrity": "sha512-vaC03b2PqJA6QqmwHi1jNU8fAPXEnnyv4j/W4PVfgm24C4/zZGSVut3z0YUeN0WIFCo1oGOL02+6LbvFK7JL4Q==", "license": "ISC", "dependencies": { - "ignore-walk": "^7.0.0" + "ignore-walk": "^8.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -12073,9 +11983,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", - "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "license": "ISC", "engines": { "node": "20 || >=22" @@ -12122,9 +12032,9 @@ } }, "node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, "license": "MIT", "engines": { @@ -12283,9 +12193,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -12656,15 +12566,15 @@ } }, "node_modules/read-package-up/node_modules/parse-json": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { "node": ">=18" @@ -12694,9 +12604,9 @@ } }, "node_modules/read-package-up/node_modules/type-fest": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", - "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13104,9 +13014,9 @@ } }, "node_modules/replace/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -13492,9 +13402,9 @@ } }, "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -13715,9 +13625,9 @@ } }, "node_modules/shelljs/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -14164,9 +14074,9 @@ } }, "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", + "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", "license": "MIT", "dependencies": { "ip-address": "^9.0.5", @@ -14449,9 +14359,9 @@ } }, "node_modules/streamx": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", + "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", @@ -14727,9 +14637,9 @@ } }, "node_modules/temp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -14937,6 +14847,48 @@ "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -15128,14 +15080,14 @@ "license": "0BSD" }, "node_modules/tuf-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz", - "integrity": "sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", "license": "MIT", "dependencies": { "@tufjs/models": "3.0.1", - "debug": "^4.3.6", - "make-fetch-happen": "^14.0.1" + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -15249,9 +15201,9 @@ "license": "BSD-3-Clause" }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-emoji-modifier-base": { @@ -15517,9 +15469,9 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz", - "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -15829,16 +15781,16 @@ } }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { @@ -15943,9 +15895,9 @@ } }, "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 8dbd629ed2..002823db4e 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@rigor789/trapezedev-project": "7.1.2", "ansi-colors": "^4.1.3", "archiver": "^7.0.1", - "axios": "1.7.9", + "axios": "1.11.0", "byline": "5.0.0", "chalk": "4.1.2", "chokidar": "4.0.3", From debc85a584cdb305ff329bca12c255750e8a9658 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 26 Jul 2025 18:19:39 -0700 Subject: [PATCH 011/136] fix(security): xml2js and braces (#5848) closes https://github.com/NativeScript/nativescript-cli/security/dependabot/234 closes https://github.com/NativeScript/nativescript-cli/security/dependabot/207 --- package-lock.json | 4 +++- package.json | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a0235a463..40a16f7da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -106,6 +106,7 @@ "@types/ws": "8.5.14", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", + "braces": ">=3.0.3", "chai": "5.2.0", "chai-as-promised": "8.0.1", "conventional-changelog-cli": "^5.0.0", @@ -122,7 +123,8 @@ "lint-staged": "~15.4.3", "mocha": "11.1.0", "sinon": "19.0.2", - "source-map-support": "0.5.21" + "source-map-support": "0.5.21", + "xml2js": ">=0.5.0" }, "engines": { "node": ">=20.0.0" diff --git a/package.json b/package.json index 002823db4e..8b38c82ca1 100644 --- a/package.json +++ b/package.json @@ -144,6 +144,7 @@ "@types/ws": "8.5.14", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", + "braces": ">=3.0.3", "chai": "5.2.0", "chai-as-promised": "8.0.1", "conventional-changelog-cli": "^5.0.0", @@ -160,7 +161,8 @@ "lint-staged": "~15.4.3", "mocha": "11.1.0", "sinon": "19.0.2", - "source-map-support": "0.5.21" + "source-map-support": "0.5.21", + "xml2js": ">=0.5.0" }, "optionalDependencies": { "fsevents": "*" @@ -181,4 +183,4 @@ "lint-staged": { "*.ts": "prettier --write" } -} +} \ No newline at end of file From de2cb8c1e68bfbf0c7651a440bbaff72de27cf50 Mon Sep 17 00:00:00 2001 From: Samuel Schultze Date: Sat, 26 Jul 2025 22:20:43 -0300 Subject: [PATCH 012/136] feat(android): api level 36 + start up emulator with unknown target versions (#5842) --- lib/common/mobile/android/android-emulator-services.ts | 2 +- lib/common/mobile/emulator-helper.ts | 1 + packages/doctor/src/android-tools-info.ts | 1 + packages/doctor/test/android-tools-info.ts | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/common/mobile/android/android-emulator-services.ts b/lib/common/mobile/android/android-emulator-services.ts index efe09016b6..8fd7cbb592 100644 --- a/lib/common/mobile/android/android-emulator-services.ts +++ b/lib/common/mobile/android/android-emulator-services.ts @@ -235,7 +235,7 @@ export class AndroidEmulatorServices const minVersion = semver.coerce(AndroidVirtualDevice.MIN_ANDROID_VERSION); const bestVersion = best && best.version && semver.coerce(best.version); - return bestVersion && semver.gte(bestVersion, minVersion) ? best : null; + return !bestVersion || semver.gte(bestVersion, minVersion) ? best : null; } private async waitForEmulatorBootToComplete( diff --git a/lib/common/mobile/emulator-helper.ts b/lib/common/mobile/emulator-helper.ts index f892b605fa..9e8434cba7 100644 --- a/lib/common/mobile/emulator-helper.ts +++ b/lib/common/mobile/emulator-helper.ts @@ -5,6 +5,7 @@ import { injector } from "../yok"; export class EmulatorHelper implements Mobile.IEmulatorHelper { // https://developer.android.com/guide/topics/manifest/uses-sdk-element public mapAndroidApiLevelToVersion = { + "android-36": "16.0.0", "android-35": "15.0.0", "android-34": "14.0.0", "android-33": "13.0.0", diff --git a/packages/doctor/src/android-tools-info.ts b/packages/doctor/src/android-tools-info.ts index 3950b56587..7c5dfb67e4 100644 --- a/packages/doctor/src/android-tools-info.ts +++ b/packages/doctor/src/android-tools-info.ts @@ -32,6 +32,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { "android-33", "android-34", "android-35", + "android-36", ]; const isRuntimeVersionLessThan = (targetVersion: string) => { diff --git a/packages/doctor/test/android-tools-info.ts b/packages/doctor/test/android-tools-info.ts index afa3c5fcf7..90a24bb552 100644 --- a/packages/doctor/test/android-tools-info.ts +++ b/packages/doctor/test/android-tools-info.ts @@ -70,6 +70,7 @@ describe("androidToolsInfo", () => { "android-33", "android-34", "android-35", + "android-36", ]; } }, From f575bdcc39a1a749788aa04e4cc33d2d26f92489 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Wed, 6 Aug 2025 18:03:52 -0300 Subject: [PATCH 013/136] fix: update ios-sim-portable to version 4.5.1 (#5850) --- package-lock.json | 196 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 +- 2 files changed, 190 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 40a16f7da7..a8436f7354 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "glob": "11.0.1", "ios-device-lib": "0.9.4", "ios-mobileprovision-finder": "1.2.1", - "ios-sim-portable": "4.5.0", + "ios-sim-portable": "4.5.1", "jimp": "1.6.0", "lodash": "4.17.21", "log4js": "6.9.1", @@ -5531,6 +5531,15 @@ "iconv-lite": "^0.6.2" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/env-paths": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", @@ -8610,15 +8619,15 @@ } }, "node_modules/ios-sim-portable": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/ios-sim-portable/-/ios-sim-portable-4.5.0.tgz", - "integrity": "sha512-fJ6HewuZh6uoUkljXbTZF1MhDiSUs33C6WWPd+M7UuwHsf0e6urjURvxSS5MkkSedIVJyY6vCRup781HieW7NQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/ios-sim-portable/-/ios-sim-portable-4.5.1.tgz", + "integrity": "sha512-g7qWaHXiFw7MuMrbwSQjeBpPl5zoHyhA6xArT2yhYg3U+WsoEy6d7x1Mgf6J77B+tvBJDWMjf2fjpuRBbQZggA==", "license": "Apache-2.0", "dependencies": { "bplist-parser": "0.3.2", "lodash": "4.17.21", "plist": "3.0.6", - "shelljs": "~0.8.4", + "shelljs": "~0.9.2", "yargs": "17.7.1" }, "bin": { @@ -8629,6 +8638,76 @@ "node": ">=6.0.0" } }, + "node_modules/ios-sim-portable/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/ios-sim-portable/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ios-sim-portable/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ios-sim-portable/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ios-sim-portable/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/ios-sim-portable/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/ios-sim-portable/node_modules/plist": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", @@ -8642,6 +8721,77 @@ "node": ">=6" } }, + "node_modules/ios-sim-portable/node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ios-sim-portable/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ios-sim-portable/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ios-sim-portable/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ios-sim-portable/node_modules/shelljs": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz", + "integrity": "sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==", + "license": "BSD-3-Clause", + "dependencies": { + "execa": "^1.0.0", + "fast-glob": "^3.3.2", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ios-sim-portable/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/ios-sim-portable/node_modules/yargs": { "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", @@ -10825,6 +10975,12 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "license": "MIT" }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "license": "MIT" + }, "node_modules/nise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", @@ -11236,7 +11392,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^2.0.0" @@ -11249,7 +11404,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11568,6 +11722,15 @@ "os-tmpdir": "^1.0.0" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -12365,6 +12528,16 @@ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "license": "MIT" }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -14483,6 +14656,15 @@ "node": ">=0.10.0" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", diff --git a/package.json b/package.json index 8b38c82ca1..f57c0b238f 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "glob": "11.0.1", "ios-device-lib": "0.9.4", "ios-mobileprovision-finder": "1.2.1", - "ios-sim-portable": "4.5.0", + "ios-sim-portable": "4.5.1", "jimp": "1.6.0", "lodash": "4.17.21", "log4js": "6.9.1", From 431c1338d39102905dc4c5c3075f45992d328820 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 6 Aug 2025 18:30:20 -0700 Subject: [PATCH 014/136] ci: build --- Gruntfile.js | 37 ++++++++++++++++++++++---- package-lock.json | 68 +++++++++++++++++++++++------------------------ 2 files changed, 66 insertions(+), 39 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index c2ca4d482c..26f6fffbe1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -248,13 +248,40 @@ function registerTestingDependenciesTasks(grunt) { const generatedVersionFilePath = path.join(configsBasePath, "test-deps-versions-generated.json"); grunt.registerTask("generate_unit_testing_dependencies", async function () { + const done = this.async(); + const dependenciesVersions = {}; - const testDependencies = grunt.file.readJSON(path.join(configsBasePath, "test-dependencies.json")); - for (var dependency of testDependencies) { - const dependencyVersion = dependency.version || await latestVersion(dependency.name); - dependenciesVersions[dependency.name] = dependencyVersion; + let testDependencies; + + try { + testDependencies = grunt.file.readJSON(path.join(configsBasePath, "test-dependencies.json")); + } catch (err) { + grunt.log.error("Could not read test-dependencies.json:", err); + return done(false); } - grunt.file.write(generatedVersionFilePath, JSON.stringify(dependenciesVersions)); + + + // Kick off all version resolutions in parallel + const versionPromises = testDependencies.map(dep => { + if (dep.version) { + dependenciesVersions[dep.name] = dep.version; + return Promise.resolve(); + } + return latestVersion(dep.name).then(v => { + dependenciesVersions[dep.name] = v; + }); + }); + + Promise.all(versionPromises) + .then(() => { + grunt.file.write(generatedVersionFilePath, JSON.stringify(dependenciesVersions, null, 2)); + grunt.log.writeln("Wrote", generatedVersionFilePath); + done(); + }) + .catch(err => { + grunt.log.error(err); + done(false); + }); }); grunt.registerTask("verify_unit_testing_dependencies", function () { diff --git a/package-lock.json b/package-lock.json index a8436f7354..0a968451af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1871,9 +1871,9 @@ } }, "node_modules/@types/marked-terminal/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", + "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", "dev": true, "license": "MIT", "engines": { @@ -1910,23 +1910,23 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", - "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "version": "22.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz", + "integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", - "form-data": "^4.0.0" + "form-data": "^4.0.4" } }, "node_modules/@types/normalize-package-data": { @@ -6236,9 +6236,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -8607,9 +8607,9 @@ } }, "node_modules/ios-mobileprovision-finder/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", + "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -9724,9 +9724,9 @@ } }, "node_modules/lint-staged/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", + "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", "dev": true, "license": "MIT", "engines": { @@ -10189,9 +10189,9 @@ } }, "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", + "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -11031,9 +11031,9 @@ } }, "node_modules/node-gyp": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", - "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.3.0.tgz", + "integrity": "sha512-9J0+C+2nt3WFuui/mC46z2XCZ21/cKlFDuywULmseD/LlmnOrSeEAE4c/1jw6aybXLmpZnQY3/LmOJfgyHIcng==", "license": "MIT", "dependencies": { "env-paths": "^2.2.0", @@ -14356,9 +14356,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "license": "CC0-1.0" }, "node_modules/split": { @@ -15074,9 +15074,9 @@ } }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", + "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", "license": "MIT", "engines": { "node": ">=14.14" @@ -15965,9 +15965,9 @@ } }, "node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", "bin": { From 23c07aa097750147432a8a823a4673c328df76fc Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 6 Aug 2025 18:41:41 -0700 Subject: [PATCH 015/136] feat(hooks): support ES Modules (#5843) - Hooks now support .js, .cjs and .mjs Any project can use the CLI with @nativescript/hooks v3+ to write/consume es modules hooks. --- lib/common/services/hooks-service.ts | 104 ++++++++++++++++----------- package.json | 4 +- 2 files changed, 63 insertions(+), 45 deletions(-) diff --git a/lib/common/services/hooks-service.ts b/lib/common/services/hooks-service.ts index 4879ae4a5b..0b9676258a 100644 --- a/lib/common/services/hooks-service.ts +++ b/lib/common/services/hooks-service.ts @@ -24,7 +24,10 @@ import { color } from "../../color"; import { memoize } from "../decorators"; class Hook implements IHook { - constructor(public name: string, public fullPath: string) {} + constructor( + public name: string, + public fullPath: string, + ) {} } export class HooksService implements IHooksService { @@ -45,7 +48,7 @@ export class HooksService implements IHooksService { private $projectHelper: IProjectHelper, private $options: IOptions, private $performanceService: IPerformanceService, - private $projectConfigService: IProjectConfigService + private $projectConfigService: IProjectConfigService, ) {} public get hookArgsName(): string { @@ -69,12 +72,12 @@ export class HooksService implements IHooksService { if (projectDir) { this.hooksDirectories.push( - path.join(projectDir, HooksService.HOOKS_DIRECTORY_NAME) + path.join(projectDir, HooksService.HOOKS_DIRECTORY_NAME), ); } this.$logger.trace( - "Hooks directories: " + util.inspect(this.hooksDirectories) + "Hooks directories: " + util.inspect(this.hooksDirectories), ); const customHooks = this.$projectConfigService.getValue("hooks", []); @@ -91,7 +94,7 @@ export class HooksService implements IHooksService { public executeBeforeHooks( commandName: string, - hookArguments?: IDictionary + hookArguments?: IDictionary, ): Promise { const beforeHookName = `before-${HooksService.formatHookName(commandName)}`; const traceMessage = `BeforeHookName for command ${commandName} is ${beforeHookName}`; @@ -100,7 +103,7 @@ export class HooksService implements IHooksService { public executeAfterHooks( commandName: string, - hookArguments?: IDictionary + hookArguments?: IDictionary, ): Promise { const afterHookName = `after-${HooksService.formatHookName(commandName)}`; const traceMessage = `AfterHookName for command ${commandName} is ${afterHookName}`; @@ -110,7 +113,7 @@ export class HooksService implements IHooksService { private async executeHooks( hookName: string, traceMessage: string, - hookArguments?: IDictionary + hookArguments?: IDictionary, ): Promise { if (this.$config.DISABLE_HOOKS || !this.$options.hooks) { return; @@ -135,8 +138,8 @@ export class HooksService implements IHooksService { await this.executeHooksInDirectory( hooksDirectory, hookName, - hookArguments - ) + hookArguments, + ), ); } @@ -148,8 +151,8 @@ export class HooksService implements IHooksService { this.$projectHelper.projectDir, hookName, hook, - hookArguments - ) + hookArguments, + ), ); } } catch (err) { @@ -160,11 +163,16 @@ export class HooksService implements IHooksService { return _.flatten(results); } + private isESModule(hook: IHook): boolean { + const ext = path.extname(hook.fullPath).toLowerCase(); + return ext === ".mjs"; + } + private async executeHook( directoryPath: string, hookName: string, hook: IHook, - hookArguments?: IDictionary + hookArguments?: IDictionary, ): Promise { hookArguments = hookArguments || {}; @@ -173,15 +181,22 @@ export class HooksService implements IHooksService { const relativePath = path.relative(directoryPath, hook.fullPath); const trackId = relativePath.replace( new RegExp("\\" + path.sep, "g"), - AnalyticsEventLabelDelimiter + AnalyticsEventLabelDelimiter, ); + const isESM = this.isESModule(hook); let command = this.getSheBangInterpreter(hook); let inProc = false; if (!command) { command = hook.fullPath; - if (path.extname(hook.fullPath).toLowerCase() === ".js") { + if ( + [".mjs", ".cjs", ".js"].includes( + path.extname(hook.fullPath).toLowerCase(), + ) + ) { command = process.argv[0]; - inProc = this.shouldExecuteInProcess(this.$fs.readText(hook.fullPath)); + inProc = isESM + ? true + : this.shouldExecuteInProcess(this.$fs.readText(hook.fullPath)); } } @@ -190,15 +205,21 @@ export class HooksService implements IHooksService { this.$logger.trace( "Executing %s hook at location %s in-process", hookName, - hook.fullPath + hook.fullPath, ); - const hookEntryPoint = require(hook.fullPath); + let hookEntryPoint; + if (isESM) { + const { default: hookFn } = await import(hook.fullPath); + hookEntryPoint = hookFn; + } else { + hookEntryPoint = require(hook.fullPath); + } this.$logger.trace(`Validating ${hookName} arguments.`); const invalidArguments = this.validateHookArguments( hookEntryPoint, - hook.fullPath + hook.fullPath, ); if (invalidArguments.length) { @@ -206,8 +227,8 @@ export class HooksService implements IHooksService { `${ hook.fullPath } will NOT be executed because it has invalid arguments - ${color.grey( - invalidArguments.join(", ") - )}.` + invalidArguments.join(", "), + )}.`, ); return; } @@ -220,14 +241,13 @@ export class HooksService implements IHooksService { const projectDataHookArg = hookArguments["hookArgs"] && hookArguments["hookArgs"]["projectData"]; if (projectDataHookArg) { - hookArguments["projectData"] = hookArguments[ - "$projectData" - ] = projectDataHookArg; + hookArguments["projectData"] = hookArguments["$projectData"] = + projectDataHookArg; } const maybePromise = this.$injector.resolve( hookEntryPoint, - hookArguments + hookArguments, ); if (maybePromise) { this.$logger.trace("Hook promises to signal completion"); @@ -255,7 +275,7 @@ export class HooksService implements IHooksService { "Executing %s hook at location %s with environment ", hookName, hook.fullPath, - environment + environment, ); const output = await this.$childProcess.spawnFromEvent( @@ -263,7 +283,7 @@ export class HooksService implements IHooksService { [hook.fullPath], "close", environment, - { throwError: false } + { throwError: false }, ); result = output; @@ -275,7 +295,7 @@ export class HooksService implements IHooksService { "Finished executing %s hook at location %s with environment ", hookName, hook.fullPath, - environment + environment, ); } const endTime = this.$performanceService.now(); @@ -289,7 +309,7 @@ export class HooksService implements IHooksService { private async executeHooksInDirectory( directoryPath: string, hookName: string, - hookArguments?: IDictionary + hookArguments?: IDictionary, ): Promise { hookArguments = hookArguments || {}; const results: any[] = []; @@ -301,7 +321,7 @@ export class HooksService implements IHooksService { directoryPath, hookName, hook, - hookArguments + hookArguments, ); if (result) { @@ -316,14 +336,14 @@ export class HooksService implements IHooksService { const hooks: IHook[] = []; const customHooks: INsConfigHooks[] = this.$projectConfigService.getValue( "hooks", - [] + [], ); for (const cHook of customHooks) { if (cHook.type === hookName) { const fullPath = path.join( this.$projectHelper.projectDir, - cHook.script + cHook.script, ); const isFile = this.$fs.getFsStats(fullPath).isFile(); @@ -332,8 +352,8 @@ export class HooksService implements IHooksService { hooks.push( new Hook( this.getBaseFilename(fileNameParts[fileNameParts.length - 1]), - fullPath - ) + fullPath, + ), ); } } @@ -346,10 +366,10 @@ export class HooksService implements IHooksService { const allBaseHooks = this.getHooksInDirectory(directoryPath); const baseHooks = _.filter( allBaseHooks, - (hook) => hook.name.toLowerCase() === hookName.toLowerCase() + (hook) => hook.name.toLowerCase() === hookName.toLowerCase(), ); const moreHooks = this.getHooksInDirectory( - path.join(directoryPath, hookName) + path.join(directoryPath, hookName), ); return baseHooks.concat(moreHooks); } @@ -385,13 +405,11 @@ export class HooksService implements IHooksService { const clientName = this.$staticConfig.CLIENT_NAME.toUpperCase(); const environment: IStringDictionary = {}; - environment[util.format("%s-COMMANDLINE", clientName)] = process.argv.join( - " " - ); + environment[util.format("%s-COMMANDLINE", clientName)] = + process.argv.join(" "); environment[util.format("%s-HOOK_FULL_PATH", clientName)] = hookFullPath; - environment[ - util.format("%s-VERSION", clientName) - ] = this.$staticConfig.version; + environment[util.format("%s-VERSION", clientName)] = + this.$staticConfig.version; return { cwd: this.$projectHelper.projectDir, @@ -463,7 +481,7 @@ export class HooksService implements IHooksService { private validateHookArguments( hookConstructor: any, - hookFullPath: string + hookFullPath: string, ): string[] { const invalidArguments: string[] = []; @@ -477,7 +495,7 @@ export class HooksService implements IHooksService { } } catch (err) { this.$logger.trace( - `Cannot resolve ${argument} of hook ${hookFullPath}, reason: ${err}` + `Cannot resolve ${argument} of hook ${hookFullPath}, reason: ${err}`, ); invalidArguments.push(argument); } diff --git a/package.json b/package.json index f57c0b238f..60976bca6d 100644 --- a/package.json +++ b/package.json @@ -50,8 +50,8 @@ }, "keywords": [ "nativescript", - "telerik", - "mobile" + "typescript", + "javascript" ], "dependencies": { "@foxt/js-srp": "^0.0.3-patch2", From cca32f99d644c176f61383866cd45979d6e1f6b2 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Wed, 3 Sep 2025 02:51:10 -0300 Subject: [PATCH 016/136] feat(android): update default compileSdkVersion and buildToolsVersion to 35 (#5849) --- vendor/gradle-plugin/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vendor/gradle-plugin/build.gradle b/vendor/gradle-plugin/build.gradle index 1bd9c57cf4..e775618e64 100644 --- a/vendor/gradle-plugin/build.gradle +++ b/vendor/gradle-plugin/build.gradle @@ -159,10 +159,10 @@ allprojects { } -def computeCompileSdkVersion = { -> project.hasProperty("compileSdk") ? compileSdk : 34 } -def computeTargetSdkVersion = { -> project.hasProperty("targetSdk") ? targetSdk : 34 as int } +def computeCompileSdkVersion = { -> project.hasProperty("compileSdk") ? compileSdk : 35 } +def computeTargetSdkVersion = { -> project.hasProperty("targetSdk") ? targetSdk : 35 as int } def computeBuildToolsVersion = { -> - project.hasProperty("buildToolsVersion") ? buildToolsVersion : "34.0.0" + project.hasProperty("buildToolsVersion") ? buildToolsVersion : "35.0.1" } android { From 06154e9ab681894f0527a55cdc92e514d8a3ea8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulises=20Gasc=C3=B3n?= Date: Thu, 4 Sep 2025 22:19:40 +0200 Subject: [PATCH 017/136] chore: support for OSSF scorecard reporting (#5854) --- .github/workflows/scorecard.yml | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .github/workflows/scorecard.yml diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 0000000000..f330c1f444 --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,73 @@ +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '20 7 * * 2' + push: + branches: ["main"] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + contents: read + actions: read + # To allow GraphQL ListCommits to work + issues: read + pull-requests: read + # To detect SAST tools + checks: read + + steps: + + - name: "Checkout code" + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecards on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 + with: + sarif_file: results.sarif \ No newline at end of file From d0398adea45be7323ebd30cfc12d0d9875fc2239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulises=20Gasc=C3=B3n?= Date: Thu, 4 Sep 2025 22:20:13 +0200 Subject: [PATCH 018/136] chore: CodeQL (SAST) (#5855) --- .github/workflows/codeql.yml | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000000..b3c9454a84 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,62 @@ +name: "CodeQL" + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + schedule: + - cron: "0 0 * * 1" + +permissions: + contents: read + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: ["javascript", "typescript"] + # CodeQL supports [ $supported-codeql-languages ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + + - name: Checkout repository + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 + with: + category: "/language:${{matrix.language}}" \ No newline at end of file From 236be5c6df48697cd5c81272eea9865dc4faac43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulises=20Gasc=C3=B3n?= Date: Thu, 4 Sep 2025 22:20:51 +0200 Subject: [PATCH 019/136] chore: improve workflows security (#5856) --- .github/workflows/npm_release_cli.yml | 9 +++++++++ .github/workflows/npm_release_doctor.yml | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index 56ea306218..b7fc03e487 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -10,11 +10,20 @@ on: env: NPM_TAG: 'next' +permissions: + contents: read + jobs: release: runs-on: macos-latest steps: + + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + with: + egress-policy: audit + - uses: actions/checkout@v2 - uses: actions/setup-node@v3 diff --git a/.github/workflows/npm_release_doctor.yml b/.github/workflows/npm_release_doctor.yml index c3b5d04520..d054ef2cf9 100644 --- a/.github/workflows/npm_release_doctor.yml +++ b/.github/workflows/npm_release_doctor.yml @@ -14,11 +14,20 @@ defaults: env: NPM_TAG: 'next' +permissions: + contents: read + jobs: release: runs-on: ubuntu-latest steps: + + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + with: + egress-policy: audit + - uses: actions/checkout@v2 - name: Setup From e562267ce6a7d5cf2172679d6498b2ab79a9aff7 Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Thu, 4 Sep 2025 17:59:26 -0300 Subject: [PATCH 020/136] feat: replace chalk/ansi-colors/glob with Node.js built-ins (#5853) --- Gruntfile.js | 42 +- lib/bootstrap.ts | 4 +- lib/color.ts | 98 ++- lib/commands/clean.ts | 3 +- lib/commands/embedding/embed.ts | 5 +- lib/commands/post-install.ts | 7 +- lib/commands/typings.ts | 32 +- lib/common/header.ts | 9 +- lib/common/logger/layouts/cli-layout.ts | 2 +- lib/common/logger/logger.ts | 4 +- .../android/android-emulator-services.ts | 99 +-- lib/common/mobile/device-log-provider.ts | 11 +- lib/common/mobile/emulator-helper.ts | 18 +- lib/common/verify-node-version.ts | 18 +- lib/constants.ts | 4 +- lib/controllers/prepare-controller.ts | 22 +- lib/definitions/project.d.ts | 20 +- lib/helpers/key-command-helper.ts | 5 +- lib/project-data.ts | 48 +- lib/services/analytics-settings-service.ts | 17 +- .../bundler-compiler-service.ts} | 479 ++++++++--- .../webpack.d.ts => bundler/bundler.ts} | 46 +- package-lock.json | 786 ++++-------------- package.json | 9 +- packages/doctor/src/android-tools-info.ts | 70 +- packages/doctor/test/android-tools-info.ts | 16 +- test/controllers/prepare-controller.ts | 6 +- test/project-data.ts | 93 ++- .../bundler-compiler-service.ts} | 113 +-- test/stubs.ts | 3 + 30 files changed, 1041 insertions(+), 1048 deletions(-) rename lib/services/{webpack/webpack-compiler-service.ts => bundler/bundler-compiler-service.ts} (53%) rename lib/services/{webpack/webpack.d.ts => bundler/bundler.ts} (89%) rename test/services/{webpack/webpack-compiler-service.ts => bundler/bundler-compiler-service.ts} (62%) diff --git a/Gruntfile.js b/Gruntfile.js index 26f6fffbe1..a08b50c319 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -2,7 +2,7 @@ const childProcess = require("child_process"); const EOL = require("os").EOL; const path = require("path"); const now = new Date().toISOString(); -const latestVersion = require('latest-version').default; +const manifest = require('pacote').manifest; const ENVIRONMENTS = { @@ -260,28 +260,26 @@ function registerTestingDependenciesTasks(grunt) { return done(false); } - - // Kick off all version resolutions in parallel - const versionPromises = testDependencies.map(dep => { - if (dep.version) { - dependenciesVersions[dep.name] = dep.version; - return Promise.resolve(); - } - return latestVersion(dep.name).then(v => { - dependenciesVersions[dep.name] = v; - }); - }); - - Promise.all(versionPromises) - .then(() => { - grunt.file.write(generatedVersionFilePath, JSON.stringify(dependenciesVersions, null, 2)); + (async () => { + try { + for (const dep of testDependencies) { + if (dep.version) { + dependenciesVersions[dep.name] = dep.version; + } else { + dependenciesVersions[dep.name] = await latestVersion(dep.name); + } + } + grunt.file.write( + generatedVersionFilePath, + JSON.stringify(dependenciesVersions, null, 2) + ); grunt.log.writeln("Wrote", generatedVersionFilePath); done(); - }) - .catch(err => { + } catch (err) { grunt.log.error(err); done(false); - }); + } + })(); }); grunt.registerTask("verify_unit_testing_dependencies", function () { @@ -291,3 +289,9 @@ function registerTestingDependenciesTasks(grunt) { }); } +async function latestVersion(name) { + // only fetches the package.json for the latest dist-tag + const { version } = await manifest(name.toLowerCase(), { fullMetadata: false }); + return version; +} + diff --git a/lib/bootstrap.ts b/lib/bootstrap.ts index ca8fe39888..ad181a1062 100644 --- a/lib/bootstrap.ts +++ b/lib/bootstrap.ts @@ -414,8 +414,8 @@ injector.require( injector.requirePublic("cleanupService", "./services/cleanup-service"); injector.require( - "webpackCompilerService", - "./services/webpack/webpack-compiler-service", + "bundlerCompilerService", + "./services/bundler/bundler-compiler-service", ); injector.require( diff --git a/lib/color.ts b/lib/color.ts index 9260c23f5c..936569201e 100644 --- a/lib/color.ts +++ b/lib/color.ts @@ -1,12 +1,92 @@ -// using chalk as some of our other dependencies are already using it... -// exporting from here so we can easily refactor to a different color library if needed -import * as ansi from "ansi-colors"; -import * as chalk from "chalk"; +import { styleText, stripVTControlCharacters } from "node:util"; -export type Color = typeof chalk.Color; +// Define color types based on util.inspect.colors +export type StyleFormat = + | "reset" + | "bold" + | "dim" + | "italic" + | "underline" + | "blink" + | "inverse" + | "hidden" + | "strikethrough" + | "doubleunderline" + | "black" + | "red" + | "green" + | "yellow" + | "blue" + | "magenta" + | "cyan" + | "white" + | "gray" + | "redBright" + | "greenBright" + | "yellowBright" + | "blueBright" + | "magentaBright" + | "cyanBright" + | "whiteBright" + | "bgBlack" + | "bgRed" + | "bgGreen" + | "bgYellow" + | "bgBlue" + | "bgMagenta" + | "bgCyan" + | "bgWhite" + | "bgGray" + | "bgRedBright" + | "bgGreenBright" + | "bgYellowBright" + | "bgBlueBright" + | "bgMagentaBright" + | "bgCyanBright" + | "bgWhiteBright"; -export function stripColors(formatStr: string) { - return ansi.stripColor(formatStr); -} +export type Color = StyleFormat; -export const color = chalk; +// Create a chalk-like API using the Node.js util.styleText function +export const color = { + reset: (text: string) => styleText("reset", text), + bold: (text: string) => styleText("bold", text), + dim: (text: string) => styleText("dim", text), + italic: (text: string) => styleText("italic", text), + underline: (text: string) => styleText("underline", text), + inverse: (text: string) => styleText("inverse", text), + hidden: (text: string) => styleText("hidden", text), + strikethrough: (text: string) => styleText("strikethrough", text), + + // Text colors + black: (text: string) => styleText("black", text), + red: (text: string) => styleText("red", text), + blue: (text: string) => styleText("blue", text), + magenta: (text: string) => styleText("magenta", text), + cyan: (text: string) => styleText("cyan", text), + white: (text: string) => styleText("white", text), + gray: (text: string) => styleText("gray", text), + yellow: (text: string) => styleText("yellow", text), + green: (text: string) => styleText("green", text), + grey: (text: string) => styleText("grey", text), + + // Background colors + bgBlack: (text: string) => styleText("bgBlack", text), + bgBlackBright: (text: string) => styleText("bgBlackBright", text), + bgRed: (text: string) => styleText("bgRed", text), + bgGreen: (text: string) => styleText("bgGreen", text), + bgYellow: (text: string) => styleText("bgYellow", text), + bgBlue: (text: string) => styleText("bgBlue", text), + bgMagenta: (text: string) => styleText("bgMagenta", text), + bgCyan: (text: string) => styleText("bgCyan", text), + bgWhite: (text: string) => styleText("bgWhite", text), + cyanBright: (text: string) => styleText("cyanBright", text), + whiteBright: (text: string) => styleText("whiteBright", text), + greenBright: (text: string) => styleText("greenBright", text), + yellowBright: (text: string) => styleText("yellowBright", text), + redBright: (text: string) => styleText("redBright", text), + + styleText, +}; + +export const stripColors = (text: string) => stripVTControlCharacters(text); diff --git a/lib/commands/clean.ts b/lib/commands/clean.ts index 1d8c636a55..2d0608140d 100644 --- a/lib/commands/clean.ts +++ b/lib/commands/clean.ts @@ -267,7 +267,8 @@ export class CleanCommand implements ICommand { spinner.warn( `This will run "${color.yellow( `ns clean`, - )}" in all the selected projects and ${color.red.bold( + )}" in all the selected projects and ${color.styleText( + ["red", "bold"], "delete files from your system", )}!`, ); diff --git a/lib/commands/embedding/embed.ts b/lib/commands/embedding/embed.ts index a186b8763c..f5c488cd46 100644 --- a/lib/commands/embedding/embed.ts +++ b/lib/commands/embedding/embed.ts @@ -56,8 +56,9 @@ export class EmbedCommand extends PrepareCommand implements ICommand { if (!this.$fs.exists(resolvedHostProjectPath)) { this.$logger.error( `The host project path ${color.yellow( - hostProjectPath - )} (resolved to: ${color.yellow.dim( + hostProjectPath, + )} (resolved to: ${color.styleText( + ["yellow", "dim"], resolvedHostProjectPath )}) does not exist.` ); diff --git a/lib/commands/post-install.ts b/lib/commands/post-install.ts index d02b0d769f..c0a6ac8a45 100644 --- a/lib/commands/post-install.ts +++ b/lib/commands/post-install.ts @@ -55,11 +55,14 @@ export class PostInstallCliCommand implements ICommand { public async postCommandAction(args: string[]): Promise { this.$logger.info(""); this.$logger.info( - color.green.bold("You have successfully installed the NativeScript CLI!") + color.styleText( + ["green", "bold"], + "You have successfully installed the NativeScript CLI!", + ), ); this.$logger.info(""); this.$logger.info("Your next step is to create a new project:"); - this.$logger.info(color.green.bold("ns create")); + this.$logger.info(color.styleText(["green", "bold"], "ns create")); this.$logger.info(""); this.$logger.printMarkdown( diff --git a/lib/commands/typings.ts b/lib/commands/typings.ts index 67f01cfc62..6811a247d8 100644 --- a/lib/commands/typings.ts +++ b/lib/commands/typings.ts @@ -1,4 +1,4 @@ -import { glob } from "glob"; +import { glob } from "node:fs/promises"; import { homedir } from "os"; import * as path from "path"; import { PromptObject } from "prompts"; @@ -67,18 +67,12 @@ export class TypingsCommand implements ICommand { const pattern = `${target.replaceAll(":", "/")}/**/*.{jar,aar}`; - const res = await glob(pattern, { + const items = []; + for await (const item of glob(pattern, { cwd: gradleFiles, - }); - - if (!res || res.length === 0) { - this.$logger.warn("No files found"); - return []; - } - - const items = res.map((item) => { + })) { const [group, artifact, version, sha1, file] = item.split(path.sep); - return { + items.push({ id: sha1 + version, group, artifact, @@ -86,8 +80,13 @@ export class TypingsCommand implements ICommand { sha1, file, path: path.resolve(gradleFiles, item), - }; - }); + }); + } + + if (items.length === 0) { + this.$logger.warn("No files found"); + return []; + } this.$logger.clearScreen(); @@ -108,9 +107,10 @@ export class TypingsCommand implements ICommand { .map((item) => { return { title: `${color.white(item.group)}:${color.greenBright( - item.artifact - )}:${color.yellow(item.version)} - ${color.cyanBright.bold( - item.file + item.artifact, + )}:${color.yellow(item.version)} - ${color.styleText( + ["cyanBright", "bold"], + item.file, )}`, value: item.id, }; diff --git a/lib/common/header.ts b/lib/common/header.ts index 6cc7b0eed8..6fb1f2c671 100644 --- a/lib/common/header.ts +++ b/lib/common/header.ts @@ -10,15 +10,18 @@ export function printHeader() { const header = [ color.dim("│ "), - color.cyanBright.bold("{N} NativeScript "), - color.whiteBright.bold("CLI"), + color.styleText(["cyanBright", "bold"], "{N} NativeScript "), + color.styleText(["whiteBright", "bold"], "CLI"), color.dim(` [v${version}] `), // color.dim(" │"), ].join(""); const tagLine = [ color.dim("│ "), color.dim(" → "), - color.whiteBright.bold("Empower JavaScript with native APIs "), + color.styleText( + ["whiteBright", "bold"], + "Empower JavaScript with native APIs ", + ), // color.dim(" │"), ].join(""); diff --git a/lib/common/logger/layouts/cli-layout.ts b/lib/common/logger/layouts/cli-layout.ts index 003854ed77..aadae92252 100644 --- a/lib/common/logger/layouts/cli-layout.ts +++ b/lib/common/logger/layouts/cli-layout.ts @@ -22,7 +22,7 @@ export function layout(config: any) { } if (logEvent.level.isEqualTo(LoggerLevel.ERROR)) { - return color.red.bold(msg); + return color.styleText(["red", "bold"], msg); } if (logEvent.level.isEqualTo(LoggerLevel.WARN)) { diff --git a/lib/common/logger/logger.ts b/lib/common/logger/logger.ts index d0cb1ccd88..cd6ae95ce0 100644 --- a/lib/common/logger/logger.ts +++ b/lib/common/logger/logger.ts @@ -136,8 +136,8 @@ export class Logger implements ILogger { const opts = { unescape: true, link: color.red, - strong: color.green.bold, - firstHeading: color.blue.bold, + strong: (str: string) => color.styleText(["green", "bold"], str), + firstHeading: (str: string) => color.styleText(["blue", "bold"], str), tableOptions: { chars: { mid: "", "left-mid": "", "mid-mid": "", "right-mid": "" }, style: { diff --git a/lib/common/mobile/android/android-emulator-services.ts b/lib/common/mobile/android/android-emulator-services.ts index 8fd7cbb592..6a973d2ed4 100644 --- a/lib/common/mobile/android/android-emulator-services.ts +++ b/lib/common/mobile/android/android-emulator-services.ts @@ -8,7 +8,8 @@ import { injector } from "../../yok"; import * as semver from "semver"; export class AndroidEmulatorServices - implements Mobile.IEmulatorPlatformService { + implements Mobile.IEmulatorPlatformService +{ constructor( private $androidGenymotionService: Mobile.IAndroidVirtualDeviceService, private $androidVirtualDeviceService: Mobile.IAndroidVirtualDeviceService, @@ -16,71 +17,75 @@ export class AndroidEmulatorServices private $childProcess: IChildProcess, private $emulatorHelper: Mobile.IEmulatorHelper, private $logger: ILogger, - private $utils: IUtils + private $utils: IUtils, ) {} public async getEmulatorImages(): Promise { const adbDevicesOutput = await this.$adb.getDevicesSafe(); - const avdAvailableEmulatorsOutput = await this.$androidVirtualDeviceService.getEmulatorImages( - adbDevicesOutput - ); - const genyAvailableDevicesOutput = await this.$androidGenymotionService.getEmulatorImages( - adbDevicesOutput - ); + const avdAvailableEmulatorsOutput = + await this.$androidVirtualDeviceService.getEmulatorImages( + adbDevicesOutput, + ); + const genyAvailableDevicesOutput = + await this.$androidGenymotionService.getEmulatorImages(adbDevicesOutput); const devices = _.concat( avdAvailableEmulatorsOutput.devices, - genyAvailableDevicesOutput.devices + genyAvailableDevicesOutput.devices, ).filter((item) => !!item); return { devices, errors: avdAvailableEmulatorsOutput.errors.concat( - genyAvailableDevicesOutput.errors + genyAvailableDevicesOutput.errors, ), }; } public async getRunningEmulatorIds(): Promise { const adbDevicesOutput = await this.$adb.getDevicesSafe(); - const avds = await this.$androidVirtualDeviceService.getRunningEmulatorIds( - adbDevicesOutput - ); - const genies = await this.$androidGenymotionService.getRunningEmulatorIds( - adbDevicesOutput - ); + const avds = + await this.$androidVirtualDeviceService.getRunningEmulatorIds( + adbDevicesOutput, + ); + const genies = + await this.$androidGenymotionService.getRunningEmulatorIds( + adbDevicesOutput, + ); return avds.concat(genies); } public async getRunningEmulatorName(emulatorId: string): Promise { - let result = await this.$androidVirtualDeviceService.getRunningEmulatorName( - emulatorId - ); - if (!result) { - result = await this.$androidGenymotionService.getRunningEmulatorName( - emulatorId + let result = + await this.$androidVirtualDeviceService.getRunningEmulatorName( + emulatorId, ); + if (!result) { + result = + await this.$androidGenymotionService.getRunningEmulatorName(emulatorId); } return result; } public async getRunningEmulatorImageIdentifier( - emulatorId: string + emulatorId: string, ): Promise { - let result = await this.$androidVirtualDeviceService.getRunningEmulatorImageIdentifier( - emulatorId - ); - if (!result) { - result = await this.$androidGenymotionService.getRunningEmulatorImageIdentifier( - emulatorId + let result = + await this.$androidVirtualDeviceService.getRunningEmulatorImageIdentifier( + emulatorId, ); + if (!result) { + result = + await this.$androidGenymotionService.getRunningEmulatorImageIdentifier( + emulatorId, + ); } return result; } public async startEmulator( - options: Mobile.IAndroidStartEmulatorOptions + options: Mobile.IAndroidStartEmulatorOptions, ): Promise { const output = await this.startEmulatorCore(options); let bootToCompleteOutput = null; @@ -88,13 +93,13 @@ export class AndroidEmulatorServices bootToCompleteOutput = await this.waitForEmulatorBootToComplete( output.runningEmulator, output.endTimeEpoch, - options.timeout + options.timeout, ); } return { errors: ((output && output.errors) || []).concat( - (bootToCompleteOutput && bootToCompleteOutput.errors) || [] + (bootToCompleteOutput && bootToCompleteOutput.errors) || [], ), }; } @@ -104,7 +109,7 @@ export class AndroidEmulatorServices } private async startEmulatorCore( - options: Mobile.IAndroidStartEmulatorOptions + options: Mobile.IAndroidStartEmulatorOptions, ): Promise<{ runningEmulator: Mobile.IDeviceInfo; errors: string[]; @@ -118,7 +123,7 @@ export class AndroidEmulatorServices let emulator = this.$emulatorHelper.getEmulatorByStartEmulatorOptions( options, - availableEmulators + availableEmulators, ); if ( !emulator && @@ -158,7 +163,7 @@ export class AndroidEmulatorServices const emulators = (await this.getEmulatorImages()).devices; const newEmulator = _.find( emulators, - (e) => e.imageIdentifier === emulator.imageIdentifier + (e) => e.imageIdentifier === emulator.imageIdentifier, ); if (newEmulator && this.$emulatorHelper.isEmulatorRunning(newEmulator)) { return { @@ -185,29 +190,29 @@ export class AndroidEmulatorServices let pathToEmulatorExecutable = null; let startEmulatorArgs = null; if (emulator.vendor === AndroidVirtualDevice.AVD_VENDOR_NAME) { - pathToEmulatorExecutable = this.$androidVirtualDeviceService - .pathToEmulatorExecutable; + pathToEmulatorExecutable = + this.$androidVirtualDeviceService.pathToEmulatorExecutable; startEmulatorArgs = this.$androidVirtualDeviceService.startEmulatorArgs( - emulator.imageIdentifier + emulator.imageIdentifier, ); } else if ( emulator.vendor === AndroidVirtualDevice.GENYMOTION_VENDOR_NAME ) { - pathToEmulatorExecutable = this.$androidGenymotionService - .pathToEmulatorExecutable; + pathToEmulatorExecutable = + this.$androidGenymotionService.pathToEmulatorExecutable; startEmulatorArgs = this.$androidGenymotionService.startEmulatorArgs( - emulator.imageIdentifier + emulator.imageIdentifier, ); } this.$logger.info( - `Starting Android emulator with image ${emulator.imageIdentifier}` + `Starting Android emulator with image ${emulator.imageIdentifier}`, ); const childProcess = this.$childProcess.spawn( pathToEmulatorExecutable, startEmulatorArgs, - { stdio: "ignore", detached: true } + { stdio: "ignore", detached: true }, ); childProcess.unref(); childProcess.on("error", (err: Error) => { @@ -241,7 +246,7 @@ export class AndroidEmulatorServices private async waitForEmulatorBootToComplete( emulator: Mobile.IDeviceInfo, endTimeEpoch: number, - timeout: number + timeout: number, ): Promise<{ runningEmulator: Mobile.IDeviceInfo; errors: string[] }> { this.$logger.info("Waiting for emulator device initialization...", { [LoggerConfigData.skipNewLine]: true, @@ -249,11 +254,11 @@ export class AndroidEmulatorServices const isInfiniteWait = this.$utils.getMilliSecondsTimeout( - timeout || AndroidVirtualDevice.TIMEOUT_SECONDS + timeout || AndroidVirtualDevice.TIMEOUT_SECONDS, ) === 0; while (getCurrentEpochTime() < endTimeEpoch || isInfiniteWait) { const isEmulatorBootCompleted = await this.isEmulatorBootCompleted( - emulator.identifier + emulator.identifier, ); if (isEmulatorBootCompleted) { this.$logger.info(EOL, { [LoggerConfigData.skipNewLine]: true }); @@ -276,7 +281,7 @@ export class AndroidEmulatorServices private async isEmulatorBootCompleted(emulatorId: string): Promise { const output = await this.$adb.getPropertyValue( emulatorId, - "dev.bootcomplete" + "dev.bootcomplete", ); const matches = output.match("1"); return matches && matches.length > 0; diff --git a/lib/common/mobile/device-log-provider.ts b/lib/common/mobile/device-log-provider.ts index 4a3c8e0617..d1a786db9e 100644 --- a/lib/common/mobile/device-log-provider.ts +++ b/lib/common/mobile/device-log-provider.ts @@ -4,7 +4,7 @@ import { injector } from "../yok"; import { LoggerConfigData } from "../../constants"; import { IOptions } from "../../declarations"; -import { Color, color } from "../../color"; +import { color, StyleFormat } from "../../color"; import { ITimelineProfilerService } from "../../services/timeline-profiler-service"; @@ -55,10 +55,9 @@ export class DeviceLogProvider extends DeviceLogProviderBase { time: color.greenBright, }; - private deviceColorMap = new Map(); + private deviceColorMap = new Map(); - private colorPool: Color[] = [ - "bgBlackBright", + private colorPool: StyleFormat[] = [ "bgMagentaBright", "bgBlueBright", "bgWhiteBright", @@ -73,7 +72,7 @@ export class DeviceLogProvider extends DeviceLogProviderBase { return this.deviceColorMap.get(deviceIdentifier); } - const color = this.colorPool[this.colorPoolIndex]; + const color = this.colorPool[this.colorPoolIndex] as StyleFormat; // wrap around if we have no more colors in the pool this.colorPoolIndex = this.colorPoolIndex === this.colorPool.length - 1 @@ -150,7 +149,7 @@ export class DeviceLogProvider extends DeviceLogProviderBase { toLog.split("\n").forEach((actualLine) => { this.printLine( - color[this.getDeviceColor(deviceIdentifier)](" "), + color.styleText(this.getDeviceColor(deviceIdentifier), " "), this.consoleLevelColor[level](actualLine) ); }); diff --git a/lib/common/mobile/emulator-helper.ts b/lib/common/mobile/emulator-helper.ts index 9e8434cba7..baf98fc7aa 100644 --- a/lib/common/mobile/emulator-helper.ts +++ b/lib/common/mobile/emulator-helper.ts @@ -28,7 +28,7 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { }; public getEmulatorsFromAvailableEmulatorsOutput( - availableEmulatorsOutput: Mobile.IListEmulatorsOutput + availableEmulatorsOutput: Mobile.IListEmulatorsOutput, ): Mobile.IDeviceInfo[] { return _(availableEmulatorsOutput) .valuesIn() @@ -39,7 +39,7 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { } public getErrorsFromAvailableEmulatorsOutput( - availableEmulatorsOutput: Mobile.IListEmulatorsOutput + availableEmulatorsOutput: Mobile.IListEmulatorsOutput, ): string[] { return _(availableEmulatorsOutput) .valuesIn() @@ -51,7 +51,7 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { public getEmulatorByImageIdentifier( imageIdentifier: string, - emulators: Mobile.IDeviceInfo[] + emulators: Mobile.IDeviceInfo[], ): Mobile.IDeviceInfo { const imagerIdentifierLowerCase = imageIdentifier && imageIdentifier.toLowerCase(); @@ -61,13 +61,13 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { emulator && emulator.imageIdentifier && imageIdentifier && - emulator.imageIdentifier.toLowerCase() === imagerIdentifierLowerCase + emulator.imageIdentifier.toLowerCase() === imagerIdentifierLowerCase, ); } public getEmulatorByIdOrName( emulatorIdOrName: string, - emulators: Mobile.IDeviceInfo[] + emulators: Mobile.IDeviceInfo[], ): Mobile.IDeviceInfo { const emulatorIdOrNameLowerCase = emulatorIdOrName && emulatorIdOrName.toLowerCase(); @@ -78,7 +78,7 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { emulatorIdOrNameLowerCase && ((emulator.identifier && emulator.identifier.toLowerCase() === emulatorIdOrNameLowerCase) || - emulator.displayName.toLowerCase() === emulatorIdOrNameLowerCase) + emulator.displayName.toLowerCase() === emulatorIdOrNameLowerCase), ); } @@ -88,7 +88,7 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { public getEmulatorByStartEmulatorOptions( options: Mobile.IStartEmulatorOptions, - emulators: Mobile.IDeviceInfo[] + emulators: Mobile.IDeviceInfo[], ): Mobile.IDeviceInfo { let result: Mobile.IDeviceInfo = null; @@ -99,7 +99,7 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { if (!result && options.imageIdentifier) { result = this.getEmulatorByImageIdentifier( options.imageIdentifier, - emulators + emulators, ); } @@ -112,7 +112,7 @@ export class EmulatorHelper implements Mobile.IEmulatorHelper { public setRunningAndroidEmulatorProperties( emulatorId: string, - emulator: Mobile.IDeviceInfo + emulator: Mobile.IDeviceInfo, ): void { emulator.identifier = emulatorId; emulator.status = RUNNING_EMULATOR_STATUS; diff --git a/lib/common/verify-node-version.ts b/lib/common/verify-node-version.ts index fb64c4a456..fa13e858ba 100644 --- a/lib/common/verify-node-version.ts +++ b/lib/common/verify-node-version.ts @@ -46,14 +46,16 @@ export function verifyNodeVersion(): void { semver.lt(nodeVer, minimumRequiredVersion) ) { console.error( - color.red.bold( - util.format( - "%sNode.js '%s' is not supported. To be able to work with %s CLI, install any Node.js version in the following range: %s.%s", - os.EOL, - nodeVer, - cliName, - supportedVersionsRange, - os.EOL, + color.bold( + color.red( + util.format( + "%sNode.js '%s' is not supported. To be able to work with %s CLI, install any Node.js version in the following range: %s.%s", + os.EOL, + nodeVer, + cliName, + supportedVersionsRange, + os.EOL, + ), ), ), ); diff --git a/lib/constants.ts b/lib/constants.ts index 0ac436ec77..c76d6f6696 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -16,6 +16,7 @@ export const SCOPED_TNS_CORE_MODULES = "@nativescript/core"; export const TNS_CORE_THEME_NAME = "nativescript-theme-core"; export const SCOPED_TNS_CORE_THEME_NAME = "@nativescript/theme"; export const WEBPACK_PLUGIN_NAME = "@nativescript/webpack"; +export const RSPACK_PLUGIN_NAME = "@nativescript/rspack"; export const TNS_CORE_MODULES_WIDGETS_NAME = "tns-core-modules-widgets"; export const UI_MOBILE_BASE_NAME = "@nativescript/ui-mobile-base"; export const TNS_ANDROID_RUNTIME_NAME = "tns-android"; @@ -36,6 +37,7 @@ export const XML_FILE_EXTENSION = ".xml"; export const PLATFORMS_DIR_NAME = "platforms"; export const HOOKS_DIR_NAME = "hooks"; export const WEBPACK_CONFIG_NAME = "webpack.config.js"; +export const RSPACK_CONFIG_NAME = "rspack.config.js"; export const TSCCONFIG_TNS_JSON_NAME = "tsconfig.tns.json"; export const KARMA_CONFIG_NAME = "karma.conf.js"; export const LIB_DIR_NAME = "lib"; @@ -222,7 +224,7 @@ export const CACACHE_DIRECTORY_NAME = "_cacache"; export const FILES_CHANGE_EVENT_NAME = "filesChangeEvent"; export const INITIAL_SYNC_EVENT_NAME = "initialSyncEvent"; export const PREPARE_READY_EVENT_NAME = "prepareReadyEvent"; -export const WEBPACK_COMPILATION_COMPLETE = "webpackCompilationComplete"; +export const BUNDLER_COMPILATION_COMPLETE = "bundlerCompilationComplete"; export class DebugCommandErrors { public static UNABLE_TO_USE_FOR_DEVICE_AND_EMULATOR = diff --git a/lib/controllers/prepare-controller.ts b/lib/controllers/prepare-controller.ts index 8ba3550b86..73fa9ab5b3 100644 --- a/lib/controllers/prepare-controller.ts +++ b/lib/controllers/prepare-controller.ts @@ -13,6 +13,7 @@ import { hook } from "../common/helpers"; import { injector } from "../common/yok"; import { AnalyticsEventLabelDelimiter, + BUNDLER_COMPILATION_COMPLETE, CONFIG_FILE_NAME_JS, CONFIG_FILE_NAME_TS, PACKAGE_JSON_FILE_NAME, @@ -20,7 +21,6 @@ import { PREPARE_READY_EVENT_NAME, SupportedPlatform, TrackActionNames, - WEBPACK_COMPILATION_COMPLETE, } from "../constants"; import { IOptions, IWatchIgnoreListService } from "../declarations"; import { @@ -67,7 +67,7 @@ export class PrepareController extends EventEmitter { private $prepareNativePlatformService: IPrepareNativePlatformService, private $projectChangesService: IProjectChangesService, private $projectDataService: IProjectDataService, - private $webpackCompilerService: IWebpackCompilerService, + private $bundlerCompilerService: IBundlerCompilerService, private $watchIgnoreListService: IWatchIgnoreListService, private $analyticsService: IAnalyticsService, private $markingModeService: IMarkingModeService, @@ -117,9 +117,9 @@ export class PrepareController extends EventEmitter { this.watchersData[projectDir][platformLowerCase] && this.watchersData[projectDir][platformLowerCase].hasWebpackCompilerProcess ) { - await this.$webpackCompilerService.stopWebpackCompiler(platformLowerCase); - this.$webpackCompilerService.removeListener( - WEBPACK_COMPILATION_COMPLETE, + await this.$bundlerCompilerService.stopBundlerCompiler(platformLowerCase); + this.$bundlerCompilerService.removeListener( + BUNDLER_COMPILATION_COMPLETE, this.webpackCompilerHandler, ); this.watchersData[projectDir][ @@ -177,7 +177,7 @@ export class PrepareController extends EventEmitter { prepareData, ); } else { - await this.$webpackCompilerService.compileWithoutWatch( + await this.$bundlerCompilerService.compileWithoutWatch( platformData, projectData, prepareData, @@ -296,15 +296,15 @@ export class PrepareController extends EventEmitter { }; this.webpackCompilerHandler = handler.bind(this); - this.$webpackCompilerService.on( - WEBPACK_COMPILATION_COMPLETE, + this.$bundlerCompilerService.on( + BUNDLER_COMPILATION_COMPLETE, this.webpackCompilerHandler, ); this.watchersData[projectData.projectDir][ platformData.platformNameLowerCase ].hasWebpackCompilerProcess = true; - await this.$webpackCompilerService.compileWithWatch( + await this.$bundlerCompilerService.compileWithWatch( platformData, projectData, prepareData, @@ -560,7 +560,7 @@ export class PrepareController extends EventEmitter { if (this.pausedFileWatch) { for (const watcher of watchers) { for (const platform in watcher) { - await this.$webpackCompilerService.stopWebpackCompiler(platform); + await this.$bundlerCompilerService.stopBundlerCompiler(platform); watcher[platform].hasWebpackCompilerProcess = false; } } @@ -569,7 +569,7 @@ export class PrepareController extends EventEmitter { for (const platform in watcher) { const args = watcher[platform].prepareArguments; watcher[platform].hasWebpackCompilerProcess = true; - await this.$webpackCompilerService.compileWithWatch( + await this.$bundlerCompilerService.compileWithWatch( args.platformData, args.projectData, args.prepareData, diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index e99e204691..c8046b2ed4 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -121,6 +121,7 @@ export interface IOSLocalSPMPackage extends IOSSPMPackageBase { } export type IOSSPMPackage = IOSRemoteSPMPackage | IOSLocalSPMPackage; +export type BundlerType = "webpack" | "rspack" | "vite"; interface INsConfigIOS extends INsConfigPlaform { discardUncaughtJsExceptions?: boolean; @@ -182,6 +183,8 @@ interface INsConfig { shared?: boolean; overridePods?: string; webpackConfigPath?: string; + bundlerConfigPath?: string; + bundler?: BundlerType; ios?: INsConfigIOS; android?: INsConfigAndroid; visionos?: INSConfigVisionOS; @@ -215,13 +218,28 @@ interface IProjectData extends ICreateProjectData { * Value is true when project has nativescript.config and it has `shared: true` in it. */ isShared: boolean; - /** + * Specifies the bundler used to build the application. + * + * - `"webpack"`: Uses Webpack for traditional bundling. + * - `"rspack"`: Uses Rspack for fast bundling. + * - `"vite"`: Uses Vite for fast bundling. + * + * @default "webpack" + */ + bundler: BundlerType; + /** + * @deprecated Use bundlerConfigPath * Defines the path to the configuration file passed to webpack process. * By default this is the webpack.config.js at the root of the application. * The value can be changed by setting `webpackConfigPath` in nativescript.config. */ webpackConfigPath: string; + /** + * Defines the path to the bundler configuration file passed to the compiler. + * The value can be changed by setting `bundlerConfigPath` in nativescript.config. + */ + bundlerConfigPath: string; projectName: string; /** diff --git a/lib/helpers/key-command-helper.ts b/lib/helpers/key-command-helper.ts index ecfaabd367..821a1ea113 100644 --- a/lib/helpers/key-command-helper.ts +++ b/lib/helpers/key-command-helper.ts @@ -1,4 +1,5 @@ -import { color, stripColors } from "../color"; +import { color } from "../color"; +import { stripVTControlCharacters } from "node:util"; import { IKeyCommandHelper, IKeyCommandPlatform, @@ -62,7 +63,7 @@ export default class KeyCommandHelper implements IKeyCommandHelper { const line = ` ${color.dim("→")} ${color.bold(keyCommand.key)} — ${ keyCommand.description }`; - const lineLength = stripColors(line).length - 1; + const lineLength = stripVTControlCharacters(line).length - 1; console.log(color.dim(` ┌${"─".repeat(lineLength)}┐`)); console.log(line + color.dim(" │")); console.log(color.dim(` └${"─".repeat(lineLength)}┘`)); diff --git a/lib/project-data.ts b/lib/project-data.ts index 3e36c374b5..277dbf32d1 100644 --- a/lib/project-data.ts +++ b/lib/project-data.ts @@ -5,6 +5,7 @@ import { parseJson } from "./common/helpers"; import { EOL } from "os"; import { cache } from "./common/decorators"; import { + BundlerType, INsConfig, IProjectConfigService, IProjectData, @@ -99,6 +100,8 @@ export class ProjectData implements IProjectData { public podfilePath: string; public isShared: boolean; public webpackConfigPath: string; + public bundlerConfigPath: string; + public bundler: BundlerType; public initialized: boolean; constructor( @@ -110,7 +113,7 @@ export class ProjectData implements IProjectData { private $logger: ILogger, private $injector: IInjector, private $androidResourcesMigrationService: IAndroidResourcesMigrationService, - private $devicePlatformsConstants: Mobile.IDevicePlatformsConstants + private $devicePlatformsConstants: Mobile.IDevicePlatformsConstants, ) {} get projectConfig(): IProjectConfigService { @@ -142,7 +145,7 @@ export class ProjectData implements IProjectData { public initializeProjectDataFromContent( packageJsonContent: string, - projectDir?: string + projectDir?: string, ): void { projectDir = projectDir || this.$projectHelper.projectDir || ""; this.projectDir = projectDir; @@ -157,7 +160,7 @@ export class ProjectData implements IProjectData { this.$errors.fail( `The project file ${this.projectFilePath} is corrupted. ${EOL}` + `Consider restoring an earlier version from your source control or backup.${EOL}` + - `Additional technical info: ${err.toString()}` + `Additional technical info: ${err.toString()}`, ); } @@ -178,36 +181,43 @@ export class ProjectData implements IProjectData { this.appDirectoryPath = this.getAppDirectoryPath(); this.appResourcesDirectoryPath = this.getAppResourcesDirectoryPath(); this.androidManifestPath = this.getPathToAndroidManifest( - this.appResourcesDirectoryPath + this.appResourcesDirectoryPath, ); this.gradleFilesDirectoryPath = path.join( this.appResourcesDirectoryPath, - this.$devicePlatformsConstants.Android + this.$devicePlatformsConstants.Android, ); this.appGradlePath = path.join( this.gradleFilesDirectoryPath, - constants.APP_GRADLE_FILE_NAME + constants.APP_GRADLE_FILE_NAME, ); this.infoPlistPath = path.join( this.appResourcesDirectoryPath, this.$devicePlatformsConstants.iOS, - constants.INFO_PLIST_FILE_NAME + constants.INFO_PLIST_FILE_NAME, ); this.buildXcconfigPath = path.join( this.appResourcesDirectoryPath, this.$devicePlatformsConstants.iOS, - constants.BUILD_XCCONFIG_FILE_NAME + constants.BUILD_XCCONFIG_FILE_NAME, ); this.podfilePath = path.join( this.appResourcesDirectoryPath, this.$devicePlatformsConstants.iOS, - constants.PODFILE_NAME + constants.PODFILE_NAME, ); this.isShared = !!(this.nsConfig && this.nsConfig.shared); - this.webpackConfigPath = + + const webpackConfigPath = this.nsConfig && this.nsConfig.webpackConfigPath ? path.resolve(this.projectDir, this.nsConfig.webpackConfigPath) : path.join(this.projectDir, "webpack.config.js"); + this.webpackConfigPath = webpackConfigPath; + this.bundlerConfigPath = + this.nsConfig && this.nsConfig.bundlerConfigPath + ? path.resolve(this.projectDir, this.nsConfig.bundlerConfigPath) + : webpackConfigPath; + this.bundler = this?.nsConfig?.bundler ?? "webpack"; return; } @@ -217,7 +227,7 @@ export class ProjectData implements IProjectData { private getPathToAndroidManifest(appResourcesDir: string): string { const androidDirPath = path.join( appResourcesDir, - this.$devicePlatformsConstants.Android + this.$devicePlatformsConstants.Android, ); const androidManifestDir = this.$androidResourcesMigrationService.hasMigrated(appResourcesDir) @@ -230,13 +240,13 @@ export class ProjectData implements IProjectData { private errorInvalidProject(projectDir: string): void { const currentDir = path.resolve("."); this.$logger.trace( - `Unable to find project. projectDir: ${projectDir}, options.path: ${this.$options.path}, ${currentDir}` + `Unable to find project. projectDir: ${projectDir}, options.path: ${this.$options.path}, ${currentDir}`, ); // This is the case when no project file found this.$errors.fail( "No project found at or above '%s' and neither was a --path specified.", - projectDir || this.$options.path || currentDir + projectDir || this.$options.path || currentDir, ); } @@ -291,7 +301,7 @@ export class ProjectData implements IProjectData { private resolveToProjectDir( pathToResolve: string, - projectDir?: string + projectDir?: string, ): string { if (!projectDir) { projectDir = this.projectDir; @@ -306,7 +316,7 @@ export class ProjectData implements IProjectData { @cache() private initializeProjectIdentifiers( - config: INsConfig + config: INsConfig, ): Mobile.IProjectIdentifier { this.$logger.trace(`Initializing project identifiers. Config: `, config); @@ -341,18 +351,18 @@ export class ProjectData implements IProjectData { private getProjectType(): string { let detectedProjectType = _.find( ProjectData.PROJECT_TYPES, - (projectType) => projectType.isDefaultProjectType + (projectType) => projectType.isDefaultProjectType, ).type; const deps: string[] = _.keys(this.dependencies).concat( - _.keys(this.devDependencies) + _.keys(this.devDependencies), ); _.each(ProjectData.PROJECT_TYPES, (projectType) => { if ( _.some( projectType.requiredDependencies, - (requiredDependency) => deps.indexOf(requiredDependency) !== -1 + (requiredDependency) => deps.indexOf(requiredDependency) !== -1, ) ) { detectedProjectType = projectType.type; @@ -366,7 +376,7 @@ export class ProjectData implements IProjectData { @cache() private warnProjectId(): void { this.$logger.warn( - "[WARNING]: IProjectData.projectId is deprecated. Please use IProjectData.projectIdentifiers[platform]." + "[WARNING]: IProjectData.projectId is deprecated. Please use IProjectData.projectIdentifiers[platform].", ); } } diff --git a/lib/services/analytics-settings-service.ts b/lib/services/analytics-settings-service.ts index 9a73f67ed8..825ef0e682 100644 --- a/lib/services/analytics-settings-service.ts +++ b/lib/services/analytics-settings-service.ts @@ -38,13 +38,17 @@ class AnalyticsSettingsService implements IAnalyticsSettingsService { } public getClientName(): string { - return "" + color.cyan.bold(this.$staticConfig.CLIENT_NAME_ALIAS); + return ( + "" + + color.styleText(["cyan", "bold"], this.$staticConfig.CLIENT_NAME_ALIAS) + ); } public async getUserSessionsCount(projectName: string): Promise { - const sessionsCountForProject = await this.$userSettingsService.getSettingValue< - number - >(this.getSessionsProjectKey(projectName)); + const sessionsCountForProject = + await this.$userSettingsService.getSettingValue( + this.getSessionsProjectKey(projectName), + ); return sessionsCountForProject || 0; } @@ -97,9 +101,8 @@ class AnalyticsSettingsService implements IAnalyticsSettingsService { } private async getSettingValueOrDefault(settingName: string): Promise { - let guid = await this.$userSettingsService.getSettingValue( - settingName - ); + let guid = + await this.$userSettingsService.getSettingValue(settingName); if (!guid) { guid = createGUID(false); diff --git a/lib/services/webpack/webpack-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts similarity index 53% rename from lib/services/webpack/webpack-compiler-service.ts rename to lib/services/bundler/bundler-compiler-service.ts index 5a571b7168..12f637b389 100644 --- a/lib/services/webpack/webpack-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -5,8 +5,8 @@ import * as _ from "lodash"; import { EventEmitter } from "events"; import { performanceLog } from "../../common/decorators"; import { - WEBPACK_COMPILATION_COMPLETE, WEBPACK_PLUGIN_NAME, + BUNDLER_COMPILATION_COMPLETE, PackageManagers, CONFIG_FILE_NAME_DISPLAY, } from "../../constants"; @@ -16,7 +16,11 @@ import { IOptions, } from "../../declarations"; import { IPlatformData } from "../../definitions/platform"; -import { IProjectData } from "../../definitions/project"; +import { + BundlerType, + IProjectConfigService, + IProjectData, +} from "../../definitions/project"; import { IDictionary, IErrors, @@ -34,23 +38,23 @@ import { } from "../../helpers/package-path-helper"; // todo: move out of here -interface IWebpackMessage { +interface IBundlerMessage { type: "compilation" | "hmr-status"; version?: number; hash?: string; data?: T; } -interface IWebpackCompilation { +interface IBundlerCompilation { emittedAssets: string[]; staleAssets: string[]; } -export class WebpackCompilerService +export class BundlerCompilerService extends EventEmitter - implements IWebpackCompilerService + implements IBundlerCompilerService { - private webpackProcesses: IDictionary = {}; + private bundlerProcesses: IDictionary = {}; private expectedHashes: IStringDictionary = {}; constructor( @@ -65,6 +69,7 @@ export class WebpackCompilerService private $cleanupService: ICleanupService, private $packageManager: IPackageManager, private $packageInstallationManager: IPackageInstallationManager, // private $sharedEventBus: ISharedEventBus + private $projectConfigService: IProjectConfigService, ) { super(); } @@ -75,20 +80,23 @@ export class WebpackCompilerService prepareData: IPrepareData, ): Promise { return new Promise(async (resolve, reject) => { - if (this.webpackProcesses[platformData.platformNameLowerCase]) { + if (this.bundlerProcesses[platformData.platformNameLowerCase]) { resolve(void 0); return; } - let isFirstWebpackWatchCompilation = true; + let isFirstBundlerWatchCompilation = true; prepareData.watch = true; try { - const childProcess = await this.startWebpackProcess( + const childProcess = await this.startBundleProcess( platformData, projectData, prepareData, ); + // Handle Vite differently from webpack + const isVite = this.getBundler() === "vite"; + childProcess.stdout.on("data", function (data) { process.stdout.write(data); }); @@ -97,8 +105,123 @@ export class WebpackCompilerService process.stderr.write(data); }); - childProcess.on("message", (message: string | IWebpackEmitMessage) => { - this.$logger.trace("Message from webpack", message); + // For both Vite and webpack, we wait for the first build to complete + // Don't resolve immediately for Vite - wait for first IPC message + + childProcess.on("message", (message: string | IBundlerEmitMessage) => { + this.$logger.trace(`Message from ${projectData.bundler}`, message); + + // Handle Vite messages + if ( + isVite && + message && + (message as IBundlerEmitMessage).emittedFiles + ) { + message = message as IBundlerEmitMessage; + console.log("Received Vite IPC message:", message); + + // Copy Vite output files directly to platform destination + const distOutput = path.join(projectData.projectDir, "dist"); + const destDir = path.join( + platformData.appDestinationDirectoryPath, + this.$options.hostProjectModuleName, + ); + + console.log(`🔥 Copying from ${distOutput} to ${destDir}`); + + // For HMR updates, only copy changed files; for full builds, copy everything + if ( + message.isHMR && + message.changedFiles && + message.changedFiles.length > 0 + ) { + console.log( + "🔥 HMR update - copying only changed files for:", + message.changedFiles, + ); + + // For HTML template changes, we need to copy the component files that were rebuilt + let filesToCopy = message.emittedFiles; + + // If we have HTML changes, identify which component files need copying + const hasHTMLChanges = message.changedFiles.some((f) => + f.endsWith(".html"), + ); + if (hasHTMLChanges) { + // Copy component-related files (the ones that would have been rebuilt due to template changes) + filesToCopy = message.emittedFiles.filter( + (f) => + f.includes(".component") || + f === "bundle.mjs" || + f === "bundle.mjs.map", + ); + console.log( + "🔥 HTML change detected - copying component files:", + filesToCopy, + ); + } + + this.copyViteBundleToNative(distOutput, destDir, filesToCopy); + } else { + console.log("🔥 Full build - copying all files"); + this.copyViteBundleToNative(distOutput, destDir); + } + + // Resolve the promise on first build completion + if (isFirstBundlerWatchCompilation) { + isFirstBundlerWatchCompilation = false; + console.log( + "Vite first build completed, resolving compileWithWatch", + ); + resolve(childProcess); + } + + // Transform Vite message to match webpack format + const files = (message as IBundlerEmitMessage).emittedFiles.map( + (file) => + path.join( + platformData.appDestinationDirectoryPath, + this.$options.hostProjectModuleName, + file, + ), + ); + + const data = { + files, + hasOnlyHotUpdateFiles: message.isHMR || false, + hmrData: { + hash: (message as IBundlerEmitMessage).hash || "", + fallbackFiles: [] as string[], + }, + platform: platformData.platformNameLowerCase, + }; + + this.$logger.info( + `Vite build completed! Files copied to native platform.`, + ); + // Send HMR notification to connected WebSocket clients first + this.notifyHMRClients({ + type: message.isHMR ? "js-update" : "build-complete", + timestamp: Date.now(), + changedFiles: message.changedFiles || [], + buildType: message.buildType || "incremental", + isHMR: message.isHMR || false, + }); + + if (message.isHMR) { + console.log( + "🔥 Skipping BUNDLER_COMPILATION_COMPLETE for HMR update - app will not restart", + ); + } else { + // Only emit BUNDLER_COMPILATION_COMPLETE for non-HMR builds + // This prevents the CLI from restarting the app during HMR updates + console.log( + "🔥 Emitting BUNDLER_COMPILATION_COMPLETE for full build", + ); + this.emit(BUNDLER_COMPILATION_COMPLETE, data); + } + return; + } // if we are on webpack5 - we handle HMR in a slightly different way if ( @@ -108,8 +231,8 @@ export class WebpackCompilerService ) { // first compilation can be ignored because it will be synced regardless // handling it here would trigger 2 syncs - if (isFirstWebpackWatchCompilation) { - isFirstWebpackWatchCompilation = false; + if (isFirstBundlerWatchCompilation) { + isFirstBundlerWatchCompilation = false; resolve(childProcess); return; } @@ -122,22 +245,27 @@ export class WebpackCompilerService // } return this.handleHMRMessage( - message as IWebpackMessage, + message as IBundlerMessage, platformData, projectData, prepareData, ); } - if (message === "Webpack compilation complete.") { - this.$logger.info("Webpack build done!"); + if ( + message === + `${capitalizeFirstLetter(projectData.bundler)} compilation complete.` + ) { + this.$logger.info( + `${capitalizeFirstLetter(projectData.bundler)} build done!`, + ); resolve(childProcess); } - message = message as IWebpackEmitMessage; + message = message as IBundlerEmitMessage; if (message.emittedFiles) { - if (isFirstWebpackWatchCompilation) { - isFirstWebpackWatchCompilation = false; + if (isFirstBundlerWatchCompilation) { + isFirstBundlerWatchCompilation = false; this.expectedHashes[platformData.platformNameLowerCase] = prepareData.hmr ? message.hash : ""; return; @@ -189,7 +317,10 @@ export class WebpackCompilerService platform: platformData.platformNameLowerCase, }; - this.$logger.trace("Generated data from webpack message:", data); + this.$logger.trace( + `Generated data from ${projectData.bundler} message:`, + data, + ); // the hash of the compilation is the same as the previous one and there are only hot updates produced if (data.hasOnlyHotUpdateFiles && previousHash === message.hash) { @@ -197,33 +328,33 @@ export class WebpackCompilerService } if (data.files.length) { - this.emit(WEBPACK_COMPILATION_COMPLETE, data); + this.emit(BUNDLER_COMPILATION_COMPLETE, data); } } }); childProcess.on("error", (err) => { this.$logger.trace( - `Unable to start webpack process in watch mode. Error is: ${err}`, + `Unable to start ${projectData.bundler} process in watch mode. Error is: ${err}`, ); - delete this.webpackProcesses[platformData.platformNameLowerCase]; + delete this.bundlerProcesses[platformData.platformNameLowerCase]; reject(err); }); childProcess.on("close", async (arg: any) => { - await this.$cleanupService.removeKillProcess( - childProcess.pid.toString(), - ); - const exitCode = typeof arg === "number" ? arg : arg && arg.code; this.$logger.trace( - `Webpack process exited with code ${exitCode} when we expected it to be long living with watch.`, + `${capitalizeFirstLetter(projectData.bundler)} process exited with code ${exitCode} when we expected it to be long living with watch.`, + ); + + await this.$cleanupService.removeKillProcess( + childProcess.pid.toString(), ); const error: any = new Error( - `Executing webpack failed with exit code ${exitCode}.`, + `Executing ${projectData.bundler} failed with exit code ${exitCode}.`, ); error.code = exitCode; - delete this.webpackProcesses[platformData.platformNameLowerCase]; + delete this.bundlerProcesses[platformData.platformNameLowerCase]; reject(error); }); } catch (err) { @@ -238,13 +369,13 @@ export class WebpackCompilerService prepareData: IPrepareData, ): Promise { return new Promise(async (resolve, reject) => { - if (this.webpackProcesses[platformData.platformNameLowerCase]) { + if (this.bundlerProcesses[platformData.platformNameLowerCase]) { resolve(); return; } try { - const childProcess = await this.startWebpackProcess( + const childProcess = await this.startBundleProcess( platformData, projectData, prepareData, @@ -252,9 +383,9 @@ export class WebpackCompilerService childProcess.on("error", (err) => { this.$logger.trace( - `Unable to start webpack process in non-watch mode. Error is: ${err}`, + `Unable to start ${projectData.bundler} process in non-watch mode. Error is: ${err}`, ); - delete this.webpackProcesses[platformData.platformNameLowerCase]; + delete this.bundlerProcesses[platformData.platformNameLowerCase]; reject(err); }); @@ -263,13 +394,13 @@ export class WebpackCompilerService childProcess.pid.toString(), ); - delete this.webpackProcesses[platformData.platformNameLowerCase]; + delete this.bundlerProcesses[platformData.platformNameLowerCase]; const exitCode = typeof arg === "number" ? arg : arg && arg.code; if (exitCode === 0) { resolve(); } else { const error: any = new Error( - `Executing webpack failed with exit code ${exitCode}.`, + `Executing ${projectData.bundler} failed with exit code ${exitCode}.`, ); error.code = exitCode; reject(error); @@ -281,14 +412,14 @@ export class WebpackCompilerService }); } - public async stopWebpackCompiler(platform: string): Promise { + public async stopBundlerCompiler(platform: string): Promise { if (platform) { - await this.stopWebpackForPlatform(platform); + await this.stopBundlerForPlatform(platform); } else { - const webpackedPlatforms = Object.keys(this.webpackProcesses); + const bundlerPlatforms = Object.keys(this.bundlerProcesses); - for (let i = 0; i < webpackedPlatforms.length; i++) { - await this.stopWebpackForPlatform(webpackedPlatforms[i]); + for (let i = 0; i < bundlerPlatforms.length; i++) { + await this.stopBundlerForPlatform(bundlerPlatforms[i]); } } } @@ -304,15 +435,23 @@ export class WebpackCompilerService } @performanceLog() - private async startWebpackProcess( + private async startBundleProcess( platformData: IPlatformData, projectData: IProjectData, prepareData: IPrepareData, ): Promise { - if (!this.$fs.exists(projectData.webpackConfigPath)) { - this.$errors.fail( - `The webpack configuration file ${projectData.webpackConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}.`, - ); + if (projectData.bundlerConfigPath) { + if (!this.$fs.exists(projectData.bundlerConfigPath)) { + this.$errors.fail( + `The bundler configuration file ${projectData.bundlerConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}.`, + ); + } + } else { + if (!this.$fs.exists(projectData.bundlerConfigPath)) { + this.$errors.fail( + `The ${projectData.bundler} configuration file ${projectData.bundlerConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}.`, + ); + } } const envData = this.buildEnvData( @@ -320,12 +459,22 @@ export class WebpackCompilerService projectData, prepareData, ); - const envParams = await this.buildEnvCommandLineParams( + const isVite = this.getBundler() === "vite"; + const cliArgs = await this.buildEnvCommandLineParams( envData, platformData, projectData, prepareData, ); + // Note: With Vite, we need `--` to prevent vite cli from erroring on unknown options. + const envParams = isVite + ? [ + `--mode=${platformData.platformNameLowerCase}`, + `--watch`, + "--", + ...cliArgs, + ] + : cliArgs; const additionalNodeArgs = semver.major(process.version) <= 8 ? ["--harmony"] : []; @@ -339,17 +488,19 @@ export class WebpackCompilerService const args = [ ...additionalNodeArgs, - this.getWebpackExecutablePath(projectData), - this.isWebpack5(projectData) ? `build` : null, - `--config=${projectData.webpackConfigPath}`, + this.getBundlerExecutablePath(projectData), + isVite ? "build" : this.isModernBundler(projectData) ? `build` : null, + `--config=${projectData.bundlerConfigPath}`, ...envParams, ].filter(Boolean); - if (prepareData.watch) { - args.push("--watch"); + if (!isVite) { + if (prepareData.watch) { + args.push("--watch"); + } } - const stdio = prepareData.watch ? ["ipc"] : "inherit"; + const stdio = prepareData.watch || isVite ? ["ipc"] : "inherit"; const options: { [key: string]: any } = { cwd: projectData.projectDir, stdio, @@ -357,6 +508,7 @@ export class WebpackCompilerService options.env = { ...process.env, NATIVESCRIPT_WEBPACK_ENV: JSON.stringify(envData), + NATIVESCRIPT_BUNDLER_ENV: JSON.stringify(envData), }; if (this.$hostInfo.isWindows) { Object.assign(options.env, { APPDATA: process.env.appData }); @@ -370,13 +522,15 @@ export class WebpackCompilerService }); } + console.log("args:", args); + const childProcess = this.$childProcess.spawn( process.execPath, args, options, ); - this.webpackProcesses[platformData.platformNameLowerCase] = childProcess; + this.bundlerProcesses[platformData.platformNameLowerCase] = childProcess; await this.$cleanupService.addKillProcess(childProcess.pid.toString()); return childProcess; @@ -467,23 +621,26 @@ export class WebpackCompilerService ); envFlagNames.splice(envFlagNames.indexOf("snapshot"), 1); } else if (this.$hostInfo.isWindows) { - const minWebpackPluginWithWinSnapshotsVersion = "1.3.0"; - const installedWebpackPluginVersion = - await this.$packageInstallationManager.getInstalledDependencyVersion( - WEBPACK_PLUGIN_NAME, - projectData.projectDir, - ); - const hasWebpackPluginWithWinSnapshotsSupport = - !!installedWebpackPluginVersion - ? semver.gte( - semver.coerce(installedWebpackPluginVersion), - minWebpackPluginWithWinSnapshotsVersion, - ) - : true; - if (!hasWebpackPluginWithWinSnapshotsSupport) { - this.$errors.fail( - `In order to generate Snapshots on Windows, please upgrade your Webpack plugin version (npm i ${WEBPACK_PLUGIN_NAME}@latest).`, - ); + if (projectData.bundler === "webpack") { + //TODO: check this use case for webpack5 WEBPACK_PLUGIN_NAME + const minWebpackPluginWithWinSnapshotsVersion = "1.3.0"; + const installedWebpackPluginVersion = + await this.$packageInstallationManager.getInstalledDependencyVersion( + WEBPACK_PLUGIN_NAME, + projectData.projectDir, + ); + const hasWebpackPluginWithWinSnapshotsSupport = + !!installedWebpackPluginVersion + ? semver.gte( + semver.coerce(installedWebpackPluginVersion), + minWebpackPluginWithWinSnapshotsVersion, + ) + : true; + if (!hasWebpackPluginWithWinSnapshotsSupport) { + this.$errors.fail( + `In order to generate Snapshots on Windows, please upgrade your Webpack plugin version (npm i ${WEBPACK_PLUGIN_NAME}@latest).`, + ); + } } } } @@ -562,30 +719,37 @@ export class WebpackCompilerService return hotHash || ""; } - private async stopWebpackForPlatform(platform: string) { - this.$logger.trace(`Stopping webpack watch for platform ${platform}.`); - const webpackProcess = this.webpackProcesses[platform]; - await this.$cleanupService.removeKillProcess(webpackProcess.pid.toString()); - if (webpackProcess) { - webpackProcess.kill("SIGINT"); - delete this.webpackProcesses[platform]; + private async stopBundlerForPlatform(platform: string) { + this.$logger.trace( + `Stopping ${this.getBundler()} watch for platform ${platform}.`, + ); + const bundlerProcess = this.bundlerProcesses[platform]; + await this.$cleanupService.removeKillProcess(bundlerProcess.pid.toString()); + if (bundlerProcess) { + bundlerProcess.kill("SIGINT"); + delete this.bundlerProcesses[platform]; } } private handleHMRMessage( - message: IWebpackMessage, + message: IBundlerMessage, platformData: IPlatformData, projectData: IProjectData, prepareData: IPrepareData, ) { - // handle new webpack hmr packets - this.$logger.trace("Received message from webpack process:", message); + // handle new bundler hmr packets + this.$logger.trace( + `Received message from ${projectData.bundler} process:`, + message, + ); if (message.type !== "compilation") { return; } - this.$logger.trace("Webpack build done!"); + this.$logger.trace( + `${capitalizeFirstLetter(projectData.bundler)} build done!`, + ); const files = message.data.emittedAssets.map((asset: string) => path.join( @@ -624,7 +788,7 @@ export class WebpackCompilerService return; } - this.emit(WEBPACK_COMPILATION_COMPLETE, { + this.emit(BUNDLER_COMPILATION_COMPLETE, { files, staleFiles, hasOnlyHotUpdateFiles: prepareData.hmr, @@ -636,9 +800,19 @@ export class WebpackCompilerService }); } - private getWebpackExecutablePath(projectData: IProjectData): string { - if (this.isWebpack5(projectData)) { - const packagePath = resolvePackagePath("@nativescript/webpack", { + private getBundlerExecutablePath(projectData: IProjectData): string { + const bundler = this.getBundler(); + + if (bundler === "vite") { + const packagePath = resolvePackagePath(`vite`, { + paths: [projectData.projectDir], + }); + + if (packagePath) { + return path.resolve(packagePath, "bin", "vite.js"); + } + } else if (this.isModernBundler(projectData)) { + const packagePath = resolvePackagePath(`@nativescript/${bundler}`, { paths: [projectData.projectDir], }); @@ -658,22 +832,131 @@ export class WebpackCompilerService return path.resolve(packagePath, "bin", "webpack.js"); } - private isWebpack5(projectData: IProjectData): boolean { - const packageJSONPath = resolvePackageJSONPath("@nativescript/webpack", { - paths: [projectData.projectDir], - }); + private isModernBundler(projectData: IProjectData): boolean { + const bundler = this.getBundler(); + switch (bundler) { + case "rspack": + return true; + default: + const packageJSONPath = resolvePackageJSONPath(WEBPACK_PLUGIN_NAME, { + paths: [projectData.projectDir], + }); - if (packageJSONPath) { - const packageData = this.$fs.readJson(packageJSONPath); - const ver = semver.coerce(packageData.version); + if (packageJSONPath) { + const packageData = this.$fs.readJson(packageJSONPath); + const ver = semver.coerce(packageData.version); - if (semver.satisfies(ver, ">= 5.0.0")) { - return true; - } + if (semver.satisfies(ver, ">= 5.0.0")) { + return true; + } + } + break; } return false; } + + public getBundler(): BundlerType { + return this.$projectConfigService.getValue(`bundler`, "webpack"); + } + + private copyViteBundleToNative( + distOutput: string, + destDir: string, + specificFiles: string[] = null, + ) { + // Clean and copy Vite output to native platform folder + console.log(`Copying Vite bundle from "${distOutput}" to "${destDir}"`); + + const fs = require("fs"); + + try { + if (specificFiles) { + // HMR mode: only copy specific files + console.log("🔥 HMR: Copying specific files:", specificFiles); + + // Ensure destination directory exists + fs.mkdirSync(destDir, { recursive: true }); + + // Copy only the specified files + for (const file of specificFiles) { + const srcPath = path.join(distOutput, file); + const destPath = path.join(destDir, file); + + if (!fs.existsSync(srcPath)) continue; + + // create parent dirs + fs.mkdirSync(path.dirname(destPath), { recursive: true }); + + fs.copyFileSync(srcPath, destPath); + + console.log(`🔥 HMR: Copied ${file}`); + } + } else { + // Full build mode: clean and copy everything + console.log("🔥 Full build: Copying all files"); + + // Clean destination directory + if (fs.existsSync(destDir)) { + fs.rmSync(destDir, { recursive: true, force: true }); + } + fs.mkdirSync(destDir, { recursive: true }); + + // Copy all files from dist to platform destination + if (fs.existsSync(distOutput)) { + this.copyRecursiveSync(distOutput, destDir, fs); + } else { + this.$logger.warn( + `Vite output directory does not exist: ${distOutput}`, + ); + } + } + } catch (error) { + this.$logger.warn(`Failed to copy Vite bundle: ${error.message}`); + } + } + + private notifyHMRClients(message: any) { + // Send WebSocket notification to HMR clients + try { + const WebSocket = require("ws"); + + // Try to connect to HMR bridge and send notification + const ws = new WebSocket("ws://localhost:24678"); + + ws.on("open", () => { + console.log("🔥 Sending HMR notification to bridge:", message.type); + ws.send(JSON.stringify(message)); + ws.close(); + }); + + ws.on("error", () => { + // HMR bridge not available, which is fine + console.log("🔥 HMR bridge not available (this is normal without HMR)"); + }); + } catch (error) { + // WebSocket not available, which is fine + console.log("🔥 WebSocket not available for HMR notifications"); + } + } + + private copyRecursiveSync(src: string, dest: string, fs: any) { + for (const entry of fs.readdirSync(src, { withFileTypes: true })) { + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + fs.mkdirSync(destPath, { recursive: true }); + this.copyRecursiveSync(srcPath, destPath, fs); + } else if (entry.isFile() || entry.isSymbolicLink()) { + fs.copyFileSync(srcPath, destPath); + } + } + } +} + +function capitalizeFirstLetter(val: string) { + return String(val).charAt(0).toUpperCase() + String(val).slice(1); } -injector.register("webpackCompilerService", WebpackCompilerService); +injector.register("bundlerCompilerService", BundlerCompilerService); diff --git a/lib/services/webpack/webpack.d.ts b/lib/services/bundler/bundler.ts similarity index 89% rename from lib/services/webpack/webpack.d.ts rename to lib/services/bundler/bundler.ts index e3a8dddd8b..08e6bda859 100644 --- a/lib/services/webpack/webpack.d.ts +++ b/lib/services/bundler/bundler.ts @@ -18,21 +18,21 @@ import { import { INotConfiguredEnvOptions } from "../../common/definitions/commands"; declare global { - interface IWebpackCompilerService extends EventEmitter { + interface IBundlerCompilerService extends EventEmitter { compileWithWatch( platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ): Promise; compileWithoutWatch( platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ): Promise; - stopWebpackCompiler(platform: string): Promise; + stopBundlerCompiler(platform: string): Promise; } - interface IWebpackEnvOptions { + interface IBundlerEnvOptions { sourceMap?: boolean; uglify?: boolean; production?: boolean; @@ -42,19 +42,19 @@ declare global { checkForChanges( platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ): Promise; getPrepareInfoFilePath(platformData: IPlatformData): string; getPrepareInfo(platformData: IPlatformData): IPrepareInfo; savePrepareInfo( platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ): Promise; setNativePlatformStatus( platformData: IPlatformData, projectData: IProjectData, - addedPlatform: IAddedNativePlatform + addedPlatform: IAddedNativePlatform, ): void; currentChanges: IProjectChangesInfo; } @@ -68,10 +68,14 @@ declare global { hasNativeChanges: boolean; } - interface IWebpackEmitMessage { + interface IBundlerEmitMessage { emittedFiles: string[]; chunkFiles: string[]; hash: string; + changedFiles?: string[]; + isHMR?: boolean; + filesToCopy?: string[]; + buildType?: string; } interface IPlatformProjectService @@ -81,12 +85,12 @@ declare global { validate( projectData: IProjectData, options: IOptions, - notConfiguredEnvOptions?: INotConfiguredEnvOptions + notConfiguredEnvOptions?: INotConfiguredEnvOptions, ): Promise; createProject( frameworkDir: string, frameworkVersion: string, - projectData: IProjectData + projectData: IProjectData, ): Promise; interpolateData(projectData: IProjectData): Promise; interpolateConfigurationFile(projectData: IProjectData): void; @@ -108,13 +112,13 @@ declare global { validateOptions( projectId?: string, provision?: true | string, - teamId?: true | string + teamId?: true | string, ): Promise; buildProject( projectRoot: string, projectData: IProjectData, - buildConfig: T + buildConfig: T, ): Promise; /** @@ -125,7 +129,7 @@ declare global { */ prepareProject( projectData: IProjectData, - prepareData: T + prepareData: T, ): Promise; /** @@ -146,7 +150,7 @@ declare global { preparePluginNativeCode( pluginData: IPluginData, - options?: any + options?: any, ): Promise; /** @@ -157,17 +161,17 @@ declare global { */ removePluginNativeCode( pluginData: IPluginData, - projectData: IProjectData + projectData: IProjectData, ): Promise; beforePrepareAllPlugins( projectData: IProjectData, - dependencies?: IDependencyData[] + dependencies?: IDependencyData[], ): Promise; handleNativeDependenciesChange( projectData: IProjectData, - opts: IRelease + opts: IRelease, ): Promise; /** @@ -178,11 +182,11 @@ declare global { cleanDeviceTempFolder( deviceIdentifier: string, - projectData: IProjectData + projectData: IProjectData, ): Promise; processConfigurationFilesFromAppResources( projectData: IProjectData, - opts: { release: boolean } + opts: { release: boolean }, ): Promise; /** @@ -214,7 +218,7 @@ declare global { checkForChanges( changeset: IProjectChangesInfo, prepareData: T, - projectData: IProjectData + projectData: IProjectData, ): Promise; /** diff --git a/package-lock.json b/package-lock.json index 0a968451af..fe0a393e74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nativescript", - "version": "8.9.4", + "version": "9.0.0-alpha.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nativescript", - "version": "8.9.4", + "version": "9.0.0-alpha.5", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -15,11 +15,9 @@ "@npmcli/arborist": "^9.0.0", "@rigor789/resolve-package-path": "1.0.7", "@rigor789/trapezedev-project": "7.1.2", - "ansi-colors": "^4.1.3", "archiver": "^7.0.1", "axios": "1.11.0", "byline": "5.0.0", - "chalk": "4.1.2", "chokidar": "4.0.3", "cli-table3": "0.6.5", "color": "4.2.3", @@ -28,7 +26,6 @@ "email-validator": "2.0.4", "esprima": "4.0.1", "font-finder": "1.1.0", - "glob": "11.0.1", "ios-device-lib": "0.9.4", "ios-mobileprovision-finder": "1.2.1", "ios-sim-portable": "4.5.1", @@ -83,7 +80,6 @@ "@types/chai-as-promised": "8.0.1", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", - "@types/glob": "^8.1.0", "@types/lodash": "4.17.15", "@types/marked-terminal": "^6.1.1", "@types/node": "^22.0.0", @@ -119,7 +115,6 @@ "grunt-ts": "6.0.0-beta.22", "husky": "9.1.7", "istanbul": "0.4.5", - "latest-version": "9.0.0", "lint-staged": "~15.4.3", "mocha": "11.1.0", "sinon": "19.0.2", @@ -857,9 +852,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -1108,41 +1103,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -1158,31 +1118,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/metavuln-calculator": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.1.tgz", @@ -1235,81 +1170,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@npmcli/package-json/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/promise-spawn": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", @@ -1379,51 +1239,6 @@ "node": ">=14" } }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@prettier/plugin-xml": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz", @@ -1839,17 +1654,6 @@ "@types/node": "*" } }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, "node_modules/@types/lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz", @@ -1871,9 +1675,9 @@ } }, "node_modules/@types/marked-terminal/node_modules/chalk": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", - "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", "dev": true, "license": "MIT", "engines": { @@ -1896,13 +1700,6 @@ "node": ">= 18" } }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -1910,9 +1707,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz", - "integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==", + "version": "22.18.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.0.tgz", + "integrity": "sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -2111,6 +1908,32 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@types/shelljs/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/shelljs/node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@types/shelljs/node_modules/minimatch": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", @@ -2137,6 +1960,23 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/@types/shelljs/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@types/sinon": { "version": "17.0.4", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz", @@ -2367,6 +2207,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2388,9 +2229,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", "license": "MIT", "engines": { "node": ">=12" @@ -2625,81 +2466,6 @@ "node": ">= 14" } }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/archiver-utils/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2915,9 +2681,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.0.tgz", - "integrity": "sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.1.tgz", + "integrity": "sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==", "license": "Apache-2.0", "optional": true }, @@ -3190,61 +2956,11 @@ "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/cacache/node_modules/minipass": { @@ -3256,22 +2972,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/cacache/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -3895,24 +3595,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, "node_modules/continuable-cache": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", @@ -5240,16 +4922,6 @@ "node": ">=6" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -7190,24 +6862,21 @@ "license": "ISC" }, "node_modules/glob": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", - "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": "20 || >=22" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -7224,6 +6893,21 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob/node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -8607,9 +8291,9 @@ } }, "node_modules/ios-mobileprovision-finder/node_modules/chalk": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", - "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -8811,24 +8495,14 @@ } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" - }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -9339,18 +9013,18 @@ } }, "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": "20 || >=22" - }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jimp": { @@ -9417,12 +9091,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "license": "MIT" - }, "node_modules/jsmin2": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/jsmin2/-/jsmin2-1.2.1.tgz", @@ -9461,9 +9129,9 @@ "license": "ISC" }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -9535,9 +9203,9 @@ } }, "node_modules/ky": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.8.2.tgz", - "integrity": "sha512-XybQJ3d4Ea1kI27DoelE5ZCT3bSJlibYTtQuMsyzKox3TMyayw1asgQdl54WroAm+fIA3ZCr8zXW2RpR7qWVpA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.9.1.tgz", + "integrity": "sha512-WGzpBn57klhxsqRTEABAqF4tqTtqCuxoTIv9m6nIZtMMFTVcrHp7bRDWblzFIfqkb47+OhTztOgHn6A4xItmqg==", "dev": true, "license": "MIT", "engines": { @@ -9724,9 +9392,9 @@ } }, "node_modules/lint-staged/node_modules/chalk": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", - "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", "dev": true, "license": "MIT", "engines": { @@ -10058,9 +9726,9 @@ } }, "node_modules/loupe": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz", - "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, "license": "MIT" }, @@ -10189,9 +9857,9 @@ } }, "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", - "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -10678,43 +10346,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/mocha/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mocha/node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -10728,22 +10359,6 @@ "node": ">=8" } }, - "node_modules/mocha/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -10770,33 +10385,6 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mocha/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mocha/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -11031,9 +10619,9 @@ } }, "node_modules/node-gyp": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.3.0.tgz", - "integrity": "sha512-9J0+C+2nt3WFuui/mC46z2XCZ21/cKlFDuywULmseD/LlmnOrSeEAE4c/1jw6aybXLmpZnQY3/LmOJfgyHIcng==", + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", + "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", "license": "MIT", "dependencies": { "env-paths": "^2.2.0", @@ -11298,9 +10886,9 @@ } }, "node_modules/npm-install-checks": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", - "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" @@ -11784,25 +11372,6 @@ "node": ">=6" } }, - "node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -12132,30 +11701,21 @@ } }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/path-scurry/node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -12330,9 +11890,9 @@ } }, "node_modules/plist/node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -12500,13 +12060,6 @@ "signal-exit": "^3.0.2" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -12639,39 +12192,6 @@ "dev": true, "license": "MIT" }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-cmd-shim": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz", @@ -13089,35 +12609,6 @@ "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", "license": "MIT" }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -14249,12 +13740,12 @@ } }, "node_modules/socks": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", - "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -15048,10 +14539,13 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -15074,9 +14568,9 @@ } }, "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", - "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", "engines": { "node": ">=14.14" diff --git a/package.json b/package.json index 60976bca6d..b055efd158 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "8.9.4", + "version": "9.0.0-alpha.5", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { @@ -59,11 +59,9 @@ "@npmcli/arborist": "^9.0.0", "@rigor789/resolve-package-path": "1.0.7", "@rigor789/trapezedev-project": "7.1.2", - "ansi-colors": "^4.1.3", "archiver": "^7.0.1", "axios": "1.11.0", "byline": "5.0.0", - "chalk": "4.1.2", "chokidar": "4.0.3", "cli-table3": "0.6.5", "color": "4.2.3", @@ -72,7 +70,6 @@ "email-validator": "2.0.4", "esprima": "4.0.1", "font-finder": "1.1.0", - "glob": "11.0.1", "ios-device-lib": "0.9.4", "ios-mobileprovision-finder": "1.2.1", "ios-sim-portable": "4.5.1", @@ -121,7 +118,6 @@ "@types/chai-as-promised": "8.0.1", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", - "@types/glob": "^8.1.0", "@types/lodash": "4.17.15", "@types/marked-terminal": "^6.1.1", "@types/node": "^22.0.0", @@ -157,7 +153,6 @@ "grunt-ts": "6.0.0-beta.22", "husky": "9.1.7", "istanbul": "0.4.5", - "latest-version": "9.0.0", "lint-staged": "~15.4.3", "mocha": "11.1.0", "sinon": "19.0.2", @@ -183,4 +178,4 @@ "lint-staged": { "*.ts": "prettier --write" } -} \ No newline at end of file +} diff --git a/packages/doctor/src/android-tools-info.ts b/packages/doctor/src/android-tools-info.ts index 7c5dfb67e4..90b7ad5989 100644 --- a/packages/doctor/src/android-tools-info.ts +++ b/packages/doctor/src/android-tools-info.ts @@ -71,11 +71,11 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { private childProcess: ChildProcess, private fs: FileSystem, private hostInfo: HostInfo, - private helpers: Helpers + private helpers: Helpers, ) {} public getToolsInfo( - config: Partial = {} + config: Partial = {}, ): NativeScriptDoctor.IAndroidToolsInfoData { if (!this.toolsInfo) { const infoData: NativeScriptDoctor.IAndroidToolsInfoData = @@ -84,7 +84,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { infoData.installedTargets = this.getInstalledTargets(); infoData.compileSdkVersion = this.getCompileSdk( infoData.installedTargets, - config.projectDir + config.projectDir, ); infoData.buildToolsVersion = this.getBuildToolsVersion(config.projectDir); @@ -95,14 +95,14 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { } public validateInfo( - config: Partial = {} + config: Partial = {}, ): NativeScriptDoctor.IWarning[] { const errors: NativeScriptDoctor.IWarning[] = []; const toolsInfoData = this.getToolsInfo(config); const isAndroidHomeValid = this.isAndroidHomeValid(); if (!toolsInfoData.compileSdkVersion) { const supportedTargetsForAndroidRuntime = this.getSupportedTargets( - config.projectDir + config.projectDir, ); errors.push({ warning: [ @@ -110,7 +110,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { `To be able to build for Android with your current android runtime, install one of the following supported Android SDK targets:`, ...supportedTargetsForAndroidRuntime.map((target) => ` ${target}`), `Supported targets vary based on what android runtime you have installed. Currently your app uses @nativescript/android ${this.getRuntimeVersion( - { projectDir: config.projectDir } + { projectDir: config.projectDir }, )}`, ].join("\n"), additionalInformation: `Run \`\$ ${this.getPathToSdkManagementTool()}\` to manage your Android SDK versions.`, @@ -121,7 +121,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { if (!toolsInfoData.buildToolsVersion) { const buildToolsRange = this.getBuildToolsRange(config.projectDir); const versionRangeMatches = buildToolsRange.match( - /^.*?([\d\.]+)\s+.*?([\d\.]+)$/ + /^.*?([\d\.]+)\s+.*?([\d\.]+)$/, ); let message = `You can install any version in the following range: '${buildToolsRange}'.`; @@ -155,7 +155,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { } public static unsupportedJavaMessage( - installedJavaCompilerVersion: string + installedJavaCompilerVersion: string, ): string { return `Javac version ${installedJavaCompilerVersion} is not supported. You must install a java version greater than ${ AndroidToolsInfo.MIN_JAVA_VERSION @@ -169,7 +169,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { public validateJavacVersion( installedJavaCompilerVersion: string, projectDir?: string, - runtimeVersion?: string + runtimeVersion?: string, ): NativeScriptDoctor.IWarning[] { const errors: NativeScriptDoctor.IWarning[] = []; @@ -196,17 +196,17 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { if ( semver.lt( installedJavaCompilerSemverVersion, - AndroidToolsInfo.MIN_JAVA_VERSION + AndroidToolsInfo.MIN_JAVA_VERSION, ) || (AndroidToolsInfo.MAX_JAVA_VERSION ? semver.gte( installedJavaCompilerSemverVersion, - AndroidToolsInfo.MAX_JAVA_VERSION - ) + AndroidToolsInfo.MAX_JAVA_VERSION, + ) : false) ) { warning = AndroidToolsInfo.unsupportedJavaMessage( - installedJavaCompilerVersion + installedJavaCompilerVersion, ); } else { runtimeVersion = this.getRuntimeVersion({ runtimeVersion, projectDir }); @@ -288,7 +288,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { }); } else if ( expectedDirectoriesInAndroidHome.map((dir) => - this.fs.exists(path.join(this.androidHome, dir)) + this.fs.exists(path.join(this.androidHome, dir)), ).length === 0 ) { errors.push({ @@ -316,7 +316,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { if (!_.includes(supportedTargets, newTarget)) { const supportedVersions = supportedTargets.sort(); const minSupportedVersion = this.parseAndroidSdkString( - _.first(supportedVersions) + _.first(supportedVersions), ); if (!targetSupported && targetSdk && targetSdk < minSupportedVersion) { @@ -339,7 +339,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { const newTarget = `${this.ANDROID_TARGET_PREFIX}-${targetSdk}`; const targetSupported = _.includes( this.getSupportedTargets(projectDir), - newTarget + newTarget, ); if ( @@ -369,7 +369,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { const pathToEmulatorFromAndroidStudio = path.join( this.androidHome, emulatorExecutableName, - emulatorExecutableName + emulatorExecutableName, ); const realFilePath = this.hostInfo.isWindows ? `${pathToEmulatorFromAndroidStudio}.exe` @@ -381,7 +381,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { this.pathToEmulatorExecutable = path.join( this.androidHome, "tools", - emulatorExecutableName + emulatorExecutableName, ); } } @@ -403,12 +403,12 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { this.androidHome, "tools", "bin", - sdkmanagerName + sdkmanagerName, ); const pathToAndroidExecutable = path.join( this.androidHome, "tools", - "android" + "android", ); const pathToExecutable = this.fs.exists(pathToSdkmanager) ? pathToSdkmanager @@ -416,7 +416,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { sdkManagementToolPath = pathToExecutable.replace( this.androidHome, - this.hostInfo.isWindows ? "%ANDROID_HOME%" : "$ANDROID_HOME" + this.hostInfo.isWindows ? "%ANDROID_HOME%" : "$ANDROID_HOME", ); } @@ -425,15 +425,15 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { private getCompileSdk( installedTargets: string[], - projectDir: string + projectDir: string, ): number { const latestValidAndroidTarget = this.getLatestValidAndroidTarget( installedTargets, - projectDir + projectDir, ); if (latestValidAndroidTarget) { const integerVersion = this.parseAndroidSdkString( - latestValidAndroidTarget + latestValidAndroidTarget, ); if ( @@ -483,7 +483,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { const buildToolsRange = this.getBuildToolsRange(projectDir); buildToolsVersion = this.getMatchingDir( pathToBuildTools, - buildToolsRange + buildToolsRange, ); } @@ -492,17 +492,17 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { private getLatestValidAndroidTarget( installedTargets: string[], - projectDir: string + projectDir: string, ): string { return _.findLast( this.getSupportedTargets(projectDir).sort(), - (supportedTarget) => _.includes(installedTargets, supportedTarget) + (supportedTarget) => _.includes(installedTargets, supportedTarget), ); } private parseAndroidSdkString(androidSdkString: string): number { return parseInt( - androidSdkString.replace(`${this.ANDROID_TARGET_PREFIX}-`, "") + androidSdkString.replace(`${this.ANDROID_TARGET_PREFIX}-`, ""), ); } @@ -523,7 +523,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { const supportedTargets = this.getSupportedTargets(projectDir); return this.parseAndroidSdkString( - supportedTargets.sort()[supportedTargets.length - 1] + supportedTargets.sort()[supportedTargets.length - 1], ); } @@ -581,7 +581,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { depName === Constants.ANDROID_SCOPED_RUNTIME || depName === Constants.ANDROID_OLD_RUNTIME ); - } + }, ); if (foundRuntime) { @@ -593,7 +593,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { `${foundRuntime}/package.json`, { paths: [projectDir], - } + }, ); version = require(packagePath).version; } catch (err) { @@ -636,7 +636,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { if (!semver.validRange(runtimeVersion)) { try { const npmViewOutput = this.childProcess.execSync( - `npm view ${runtimePackage.name} dist-tags --json` + `npm view ${runtimePackage.name} dist-tags --json`, ); const jsonNpmViewOutput = JSON.parse(npmViewOutput); @@ -650,7 +650,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { if (runtimeVersion && !semver.validRange(runtimeVersion)) { // If we got here, something terribly wrong happened. throw new Error( - `The determined Android runtime version ${runtimeVersion} is not valid. Unable to verify if the current system is setup for Android development.` + `The determined Android runtime version ${runtimeVersion} is not valid. Unable to verify if the current system is setup for Android development.`, ); } @@ -661,7 +661,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { private getMaxSupportedCompileVersion( config: Partial & { runtimeVersion?: string; - } + }, ): number { if ( config.runtimeVersion && @@ -670,7 +670,7 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { return 28; } return this.parseAndroidSdkString( - _.last(this.getSupportedTargets(config.projectDir).sort()) + _.last(this.getSupportedTargets(config.projectDir).sort()), ); } } diff --git a/packages/doctor/test/android-tools-info.ts b/packages/doctor/test/android-tools-info.ts index 90a24bb552..89d1eb3f31 100644 --- a/packages/doctor/test/android-tools-info.ts +++ b/packages/doctor/test/android-tools-info.ts @@ -42,7 +42,7 @@ describe("androidToolsInfo", () => { devDependencies: { "@nativescript/android": runtimeVersion, }, - } + } : null; }, readDirectory: (path: string) => { @@ -114,7 +114,7 @@ describe("androidToolsInfo", () => { const assertSupportedRange = ( runtimeVersion: string, min: number, - max: number + max: number, ) => { let cnt = 0; const androidToolsInfo = getAndroidToolsInfo(runtimeVersion); @@ -211,7 +211,7 @@ describe("androidToolsInfo", () => { const androidToolsInfo = getAndroidToolsInfo(runtimeVersion); const actualWarnings = androidToolsInfo.validateJavacVersion( javacVersion, - "/Users/username/projectDir" + "/Users/username/projectDir", ); let expectedWarnings: NativeScriptDoctor.IWarning[] = []; @@ -228,7 +228,7 @@ describe("androidToolsInfo", () => { assert.deepEqual(actualWarnings, expectedWarnings); }); - } + }, ); const npmTagsTestData: ITestData[] = [ @@ -323,12 +323,12 @@ describe("androidToolsInfo", () => { childProcess, fs, hostInfo, - helpers + helpers, ); const actualWarnings = androidToolsInfo.validateJavacVersion( javacVersion, - "/Users/username/projectDir" + "/Users/username/projectDir", ); let expectedWarnings: NativeScriptDoctor.IWarning[] = []; if (warnings && warnings.length) { @@ -345,10 +345,10 @@ describe("androidToolsInfo", () => { assert.deepEqual(actualWarnings, expectedWarnings); assert.equal( execSyncCommand, - "npm view tns-android dist-tags --json" + "npm view tns-android dist-tags --json", ); }); - } + }, ); }); diff --git a/test/controllers/prepare-controller.ts b/test/controllers/prepare-controller.ts index a8bf78ad3b..e3982de1e4 100644 --- a/test/controllers/prepare-controller.ts +++ b/test/controllers/prepare-controller.ts @@ -38,7 +38,7 @@ function createTestInjector(data: { hasNativeChanges: boolean }): IInjector { }, }); - injector.register("webpackCompilerService", { + injector.register("bundlerCompilerService", { on: () => ({}), emit: () => ({}), compileWithWatch: async () => { @@ -119,7 +119,7 @@ describe("prepareController", () => { injector.resolve("prepareController"); const prepareNativePlatformService = injector.resolve( - "prepareNativePlatformService" + "prepareNativePlatformService", ); prepareNativePlatformService.prepareNativePlatform = async () => { const nativeFilesWatcher = (prepareController).watchersData[ @@ -128,7 +128,7 @@ describe("prepareController", () => { nativeFilesWatcher.emit( "all", "change", - "my/project/App_Resources/some/file" + "my/project/App_Resources/some/file", ); isNativePrepareCalled = true; return false; diff --git a/test/project-data.ts b/test/project-data.ts index 7ce33a1320..5b8c747bd1 100644 --- a/test/project-data.ts +++ b/test/project-data.ts @@ -56,14 +56,16 @@ describe("projectData", () => { configData?: { shared?: boolean; webpackConfigPath?: string; + bundlerConfigPath?: string; projectName?: string; + bundler?: string; }; }): IProjectData => { const testInjector = createTestInjector(); const fs = testInjector.resolve("fs"); testInjector.register( "projectConfigService", - stubs.ProjectConfigServiceStub.initWithConfig(opts?.configData) + stubs.ProjectConfigServiceStub.initWithConfig(opts?.configData), ); fs.exists = (filePath: string) => { @@ -98,7 +100,7 @@ describe("projectData", () => { const assertProjectType = ( dependencies: any, devDependencies: any, - expectedProjecType: string + expectedProjecType: string, ) => { const projectData = prepareTest({ packageJsonData: { @@ -125,7 +127,7 @@ describe("projectData", () => { assertProjectType( { "nativescript-vue": "*" }, { typescript: "*" }, - "Vue.js" + "Vue.js", ); }); @@ -141,7 +143,7 @@ describe("projectData", () => { assertProjectType( null, { "nativescript-dev-typescript": "*" }, - "Pure TypeScript" + "Pure TypeScript", ); }); @@ -195,13 +197,13 @@ describe("projectData", () => { const projectData = prepareTest(); assert.equal( projectData.webpackConfigPath, - path.join(projectDir, "webpack.config.js") + path.join(projectDir, "webpack.config.js"), ); }); it("returns correct path when full path is set in nsconfig.json", () => { const pathToConfig = path.resolve( - path.join("/testDir", "innerDir", "mywebpack.config.js") + path.join("/testDir", "innerDir", "mywebpack.config.js"), ); const projectData = prepareTest({ configData: { webpackConfigPath: pathToConfig }, @@ -211,7 +213,7 @@ describe("projectData", () => { it("returns correct path when relative path is set in nsconfig.json", () => { const pathToConfig = path.resolve( - path.join("projectDir", "innerDir", "mywebpack.config.js") + path.join("projectDir", "innerDir", "mywebpack.config.js"), ); const projectData = prepareTest({ configData: { @@ -221,4 +223,81 @@ describe("projectData", () => { assert.equal(projectData.webpackConfigPath, pathToConfig); }); }); + + describe("bundlerConfigPath", () => { + it("default path to webpack.config.js is set when nsconfig.json does not set value", () => { + const projectData = prepareTest(); + assert.equal( + projectData.bundlerConfigPath, + path.join(projectDir, "webpack.config.js"), + ); + }); + + it("should use webpackConfigPath property when bundlerConfigPath is not defined", () => { + const pathToConfig = path.resolve( + path.join("/testDir", "innerDir", "mywebpack.config.js"), + ); + const projectData = prepareTest({ + configData: { webpackConfigPath: pathToConfig }, + }); + assert.equal(projectData.bundlerConfigPath, pathToConfig); + }); + + it("returns correct path when full path is set in nsconfig.json", () => { + const pathToConfig = path.resolve( + path.join("/testDir", "innerDir", "mywebpack.config.js"), + ); + const projectData = prepareTest({ + configData: { bundlerConfigPath: pathToConfig }, + }); + assert.equal(projectData.bundlerConfigPath, pathToConfig); + }); + + it("returns correct path when relative path is set in nsconfig.json", () => { + const pathToConfig = path.resolve( + path.join("projectDir", "innerDir", "mywebpack.config.js"), + ); + const projectData = prepareTest({ + configData: { + bundlerConfigPath: path.join("./innerDir", "mywebpack.config.js"), + }, + }); + assert.equal(projectData.bundlerConfigPath, pathToConfig); + }); + + it("should use bundlerConfigPath instead of webpackConfigPath if both are defined.", () => { + const pathToConfig = path.resolve( + path.join("projectDir", "innerDir", "myrspack.config.js"), + ); + const projectData = prepareTest({ + configData: { + webpackConfigPath: path.join("./innerDir", "mywebpack.config.js"), + bundlerConfigPath: path.join("./innerDir", "myrspack.config.js"), + }, + }); + assert.equal(projectData.bundlerConfigPath, pathToConfig); + }); + }); + + describe("bundler", () => { + it("sets bundler to 'webpack' by default when nsconfig.json does not specify a bundler", () => { + const projectData = prepareTest(); + assert.equal(projectData.bundler, "webpack"); + }); + + it("sets bundler to 'webpack' when explicitly defined in nsconfig.json", () => { + const projectData = prepareTest({ configData: { bundler: "webpack" } }); + assert.equal(projectData.bundler, "webpack"); + }); + + it("sets bundler to 'rspack' when explicitly defined in nsconfig.json", () => { + const projectData = prepareTest({ configData: { bundler: "rspack" } }); + assert.equal(projectData.bundler, "rspack"); + }); + + it("sets bundler to 'vite' when explicitly defined in nsconfig.json", () => { + const projectData = prepareTest({ configData: { bundler: "vite" } }); + assert.equal(projectData.bundler, "vite"); + }); + }); }); diff --git a/test/services/webpack/webpack-compiler-service.ts b/test/services/bundler/bundler-compiler-service.ts similarity index 62% rename from test/services/webpack/webpack-compiler-service.ts rename to test/services/bundler/bundler-compiler-service.ts index d15cccc430..49d69a55f4 100644 --- a/test/services/webpack/webpack-compiler-service.ts +++ b/test/services/bundler/bundler-compiler-service.ts @@ -1,5 +1,5 @@ import { Yok } from "../../../lib/common/yok"; -import { WebpackCompilerService } from "../../../lib/services/webpack/webpack-compiler-service"; +import { BundlerCompilerService } from "../../../lib/services/bundler/bundler-compiler-service"; import { assert } from "chai"; import { ErrorsStub } from "../../stubs"; import { IInjector } from "../../../lib/common/definitions/yok"; @@ -23,7 +23,7 @@ function createTestInjector(): IInjector { testInjector.register("packageManager", { getPackageManagerName: async () => "npm", }); - testInjector.register("webpackCompilerService", WebpackCompilerService); + testInjector.register("bundlerCompilerService", BundlerCompilerService); testInjector.register("childProcess", {}); testInjector.register("hooksService", {}); testInjector.register("hostInfo", {}); @@ -33,6 +33,9 @@ function createTestInjector(): IInjector { testInjector.register("packageInstallationManager", {}); testInjector.register("mobileHelper", {}); testInjector.register("cleanupService", {}); + testInjector.register("projectConfigService", { + getValue: (key: string, defaultValue?: string) => defaultValue, + }); testInjector.register("fs", { exists: (filePath: string) => true, }); @@ -40,23 +43,23 @@ function createTestInjector(): IInjector { return testInjector; } -describe("WebpackCompilerService", () => { +describe("BundlerCompilerService", () => { let testInjector: IInjector = null; - let webpackCompilerService: WebpackCompilerService = null; + let bundlerCompilerService: BundlerCompilerService = null; beforeEach(() => { testInjector = createTestInjector(); - webpackCompilerService = testInjector.resolve(WebpackCompilerService); + bundlerCompilerService = testInjector.resolve(BundlerCompilerService); }); describe("getUpdatedEmittedFiles", () => { // backwards compatibility with old versions of nativescript-dev-webpack it("should return only hot updates when nextHash is not provided", async () => { - const result = webpackCompilerService.getUpdatedEmittedFiles( + const result = bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash1"), chunkFiles, null, - iOSPlatformName + iOSPlatformName, ); const expectedEmittedFiles = [ "bundle.hash1.hot-update.js", @@ -65,19 +68,19 @@ describe("WebpackCompilerService", () => { assert.deepStrictEqual(result.emittedFiles, expectedEmittedFiles); }); - // 2 successful webpack compilations + // 2 successful bundler compilations it("should return only hot updates when nextHash is provided", async () => { - webpackCompilerService.getUpdatedEmittedFiles( + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash1"), chunkFiles, "hash2", - iOSPlatformName + iOSPlatformName, ); - const result = webpackCompilerService.getUpdatedEmittedFiles( + const result = bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash2"), chunkFiles, "hash3", - iOSPlatformName + iOSPlatformName, ); assert.deepStrictEqual(result.emittedFiles, [ @@ -85,19 +88,19 @@ describe("WebpackCompilerService", () => { "hash2.hot-update.json", ]); }); - // 1 successful webpack compilation, n compilations with no emitted files - it("should return all files when there is a webpack compilation with no emitted files", () => { - webpackCompilerService.getUpdatedEmittedFiles( + // 1 successful bundler compilation, n compilations with no emitted files + it("should return all files when there is a bundler compilation with no emitted files", () => { + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash1"), chunkFiles, "hash2", - iOSPlatformName + iOSPlatformName, ); - const result = webpackCompilerService.getUpdatedEmittedFiles( + const result = bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash4"), chunkFiles, "hash5", - iOSPlatformName + iOSPlatformName, ); assert.deepStrictEqual(result.emittedFiles, [ @@ -107,25 +110,25 @@ describe("WebpackCompilerService", () => { "hash4.hot-update.json", ]); }); - // 1 successful webpack compilation, n compilations with no emitted files, 1 successful webpack compilation + // 1 successful bundler compilation, n compilations with no emitted files, 1 successful bundler compilation it("should return only hot updates after fixing the compilation error", () => { - webpackCompilerService.getUpdatedEmittedFiles( + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash1"), chunkFiles, "hash2", - iOSPlatformName + iOSPlatformName, ); - webpackCompilerService.getUpdatedEmittedFiles( + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash5"), chunkFiles, "hash6", - iOSPlatformName + iOSPlatformName, ); - const result = webpackCompilerService.getUpdatedEmittedFiles( + const result = bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash6"), chunkFiles, "hash7", - iOSPlatformName + iOSPlatformName, ); assert.deepStrictEqual(result.emittedFiles, [ @@ -133,16 +136,16 @@ describe("WebpackCompilerService", () => { "hash6.hot-update.json", ]); }); - // 1 webpack compilation with no emitted files + // 1 bundler compilation with no emitted files it("should return all files when first compilation on livesync change is not successful", () => { - (webpackCompilerService).expectedHashes = { + (bundlerCompilerService).expectedHashes = { ios: "hash1", }; - const result = webpackCompilerService.getUpdatedEmittedFiles( + const result = bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash1"), chunkFiles, "hash2", - iOSPlatformName + iOSPlatformName, ); assert.deepStrictEqual(result.emittedFiles, [ @@ -151,48 +154,48 @@ describe("WebpackCompilerService", () => { ]); }); it("should return correct hashes when there are more than one platform", () => { - webpackCompilerService.getUpdatedEmittedFiles( + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash1"), chunkFiles, "hash2", - iOSPlatformName + iOSPlatformName, ); - webpackCompilerService.getUpdatedEmittedFiles( + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash3"), chunkFiles, "hash4", - androidPlatformName + androidPlatformName, ); - webpackCompilerService.getUpdatedEmittedFiles( + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash2"), chunkFiles, "hash5", - iOSPlatformName + iOSPlatformName, ); - webpackCompilerService.getUpdatedEmittedFiles( + bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash4"), chunkFiles, "hash6", - androidPlatformName + androidPlatformName, ); - const iOSResult = webpackCompilerService.getUpdatedEmittedFiles( + const iOSResult = bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash5"), chunkFiles, "hash7", - iOSPlatformName + iOSPlatformName, ); assert.deepStrictEqual(iOSResult.emittedFiles, [ "bundle.hash5.hot-update.js", "hash5.hot-update.json", ]); - const androidResult = webpackCompilerService.getUpdatedEmittedFiles( + const androidResult = bundlerCompilerService.getUpdatedEmittedFiles( getAllEmittedFiles("hash6"), chunkFiles, "hash8", - androidPlatformName + androidPlatformName, ); assert.deepStrictEqual(androidResult.emittedFiles, [ "bundle.hash6.hot-update.js", @@ -202,33 +205,33 @@ describe("WebpackCompilerService", () => { }); describe("compileWithWatch", () => { - it("fails when the value set for webpackConfigPath is not existant file", async () => { - const webpackConfigPath = "some path.js"; + it("fails when the value set for bundlerConfigPath is not existant file", async () => { + const bundlerConfigPath = "some path.js"; testInjector.resolve("fs").exists = (filePath: string) => - filePath !== webpackConfigPath; + filePath !== bundlerConfigPath; await assert.isRejected( - webpackCompilerService.compileWithWatch( + bundlerCompilerService.compileWithWatch( { platformNameLowerCase: "android" }, - { webpackConfigPath }, - {} + { bundlerConfigPath: bundlerConfigPath }, + {}, ), - `The webpack configuration file ${webpackConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}` + `The bundler configuration file ${bundlerConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}`, ); }); }); describe("compileWithoutWatch", () => { - it("fails when the value set for webpackConfigPath is not existant file", async () => { - const webpackConfigPath = "some path.js"; + it("fails when the value set for bundlerConfigPath is not existant file", async () => { + const bundlerConfigPath = "some path.js"; testInjector.resolve("fs").exists = (filePath: string) => - filePath !== webpackConfigPath; + filePath !== bundlerConfigPath; await assert.isRejected( - webpackCompilerService.compileWithoutWatch( + bundlerCompilerService.compileWithoutWatch( { platformNameLowerCase: "android" }, - { webpackConfigPath }, - {} + { bundlerConfigPath: bundlerConfigPath }, + {}, ), - `The webpack configuration file ${webpackConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}` + `The bundler configuration file ${bundlerConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}`, ); }); }); diff --git a/test/stubs.ts b/test/stubs.ts index fc4d687c15..7ec3580891 100644 --- a/test/stubs.ts +++ b/test/stubs.ts @@ -38,6 +38,7 @@ import { IProjectConfigInformation, IProjectBackupService, IBackup, + BundlerType, } from "../lib/definitions/project"; import { IPlatformData, @@ -658,6 +659,8 @@ export class ProjectDataStub implements IProjectData { projectDir: string; projectName: string; webpackConfigPath: string; + bundlerConfigPath: string; + bundler: BundlerType; get platformsDir(): string { return ( From 7dcca9732b715e02464c379713bcb8512ac26556 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 5 Sep 2025 10:26:15 -0700 Subject: [PATCH 021/136] chore: CodeQL Advanced workflow configuration --- .github/workflows/codeql-advanced.yml | 100 ++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 .github/workflows/codeql-advanced.yml diff --git a/.github/workflows/codeql-advanced.yml b/.github/workflows/codeql-advanced.yml new file mode 100644 index 0000000000..fff9451043 --- /dev/null +++ b/.github/workflows/codeql-advanced.yml @@ -0,0 +1,100 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL Advanced" + +on: + push: + branches: [ "main", "release" ] + pull_request: + branches: [ "main", "release" ] + schedule: + - cron: '21 2 * * 1' + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners (GitHub.com only) + # Consider using larger runners or machines with greater resources for possible analysis time improvements. + runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} + permissions: + # required for all workflows + security-events: write + + # required to fetch internal or private CodeQL packs + packages: read + + # only required for workflows in private repositories + actions: read + contents: read + + strategy: + fail-fast: false + matrix: + include: + - language: actions + build-mode: none + - language: javascript-typescript + build-mode: none + # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift' + # Use `c-cpp` to analyze code written in C, C++ or both + # Use 'java-kotlin' to analyze code written in Java, Kotlin or both + # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both + # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, + # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. + # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how + # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Add any setup steps before running the `github/codeql-action/init` action. + # This includes steps like installing compilers or runtimes (`actions/setup-node` + # or others). This is typically only required for manual builds. + # - name: Setup runtime (example) + # uses: actions/setup-example@v1 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + # If the analyze step fails for one of the languages you are analyzing with + # "We were unable to automatically build your code", modify the matrix above + # to set the build mode to "manual" for that language. Then modify this step + # to build your code. + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + - if: matrix.build-mode == 'manual' + shell: bash + run: | + echo 'If you are using a "manual" build mode for one or more of the' \ + 'languages you are analyzing, replace this with the commands to build' \ + 'your code, for example:' + echo ' make bootstrap' + echo ' make release' + exit 1 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" From 1daa5533d72408b2bba6773ddbd012f5284dc41f Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 5 Sep 2025 11:12:47 -0700 Subject: [PATCH 022/136] fix(android): livesync tool connect race condition (#5857) --- lib/services/livesync/android-livesync-tool.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/services/livesync/android-livesync-tool.ts b/lib/services/livesync/android-livesync-tool.ts index 4406a63114..9057a64c79 100644 --- a/lib/services/livesync/android-livesync-tool.ts +++ b/lib/services/livesync/android-livesync-tool.ts @@ -475,7 +475,9 @@ export class AndroidLivesyncTool implements IAndroidLivesyncTool { this.pendingConnectionData.socketTimer = setTimeout(tryConnect, 1000); }; - this.pendingConnectionData.socket = socket; + if (this.pendingConnectionData) { + this.pendingConnectionData.socket = socket; + } socket.once("data", (data) => { socket.removeListener("close", tryConnectAfterTimeout); From d9bced3427f620f78ca7da62066f836e4961b084 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 5 Sep 2025 11:14:28 -0700 Subject: [PATCH 023/136] fix: clear all deprecated dependencies (#5858) --- lib/common/mobile/device-log-provider.ts | 12 +- lib/common/test/unit-tests/file-system.ts | 18 +- .../mobile/project-files-manager.ts | 78 +- .../test/unit-tests/services/hook-service.ts | 31 +- lib/common/test/unit-tests/yok.ts | 272 +- lib/controllers/migrate-controller.ts | 9 +- lib/definitions/temp-service.d.ts | 8 +- lib/services/ios/spm-service.ts | 2 +- lib/services/temp-service.ts | 31 +- package-lock.json | 5686 +++++------------ package.json | 14 +- packages/doctor/package.json | 9 +- packages/doctor/src/declarations.d.ts | 4 +- packages/doctor/src/sys-info.ts | 287 +- packages/doctor/test/android-tools-info.ts | 4 +- test/ios-entitlements-service.ts | 34 +- test/ios-project-service.ts | 171 +- test/plugin-create.ts | 50 +- test/plugins-service.ts | 130 +- test/project-changes-service.ts | 50 +- test/services/android-plugin-build-service.ts | 57 +- .../android/gradle-build-args-service.ts | 23 +- .../livesync/android-livesync-tool.ts | 6 +- test/stubs.ts | 20 +- .../node-modules-dependencies-builder.ts | 1585 ++--- test/xcconfig-service.ts | 18 +- 26 files changed, 3070 insertions(+), 5539 deletions(-) diff --git a/lib/common/mobile/device-log-provider.ts b/lib/common/mobile/device-log-provider.ts index d1a786db9e..d5c548f780 100644 --- a/lib/common/mobile/device-log-provider.ts +++ b/lib/common/mobile/device-log-provider.ts @@ -14,7 +14,7 @@ export class DeviceLogProvider extends DeviceLogProviderBase { protected $logger: ILogger, protected $logSourceMapService: Mobile.ILogSourceMapService, protected $timelineProfilerService: ITimelineProfilerService, - protected $options: IOptions + protected $options: IOptions, ) { super($logFilter, $logger, $logSourceMapService); } @@ -22,7 +22,7 @@ export class DeviceLogProvider extends DeviceLogProviderBase { public logData( lineText: string, platform: string, - deviceIdentifier: string + deviceIdentifier: string, ): void { // console.log(lineText) const loggingOptions = this.getDeviceLogOptionsForDevice(deviceIdentifier); @@ -30,7 +30,7 @@ export class DeviceLogProvider extends DeviceLogProviderBase { data = this.$logSourceMapService.replaceWithOriginalFileLocations( platform, data, - loggingOptions + loggingOptions, ); if (data) { @@ -58,12 +58,12 @@ export class DeviceLogProvider extends DeviceLogProviderBase { private deviceColorMap = new Map(); private colorPool: StyleFormat[] = [ - "bgMagentaBright", + "bgGray", "bgBlueBright", "bgWhiteBright", "bgCyanBright", "bgYellowBright", - "bgGreenBright", + "bgMagentaBright", ]; private colorPoolIndex = 0; @@ -150,7 +150,7 @@ export class DeviceLogProvider extends DeviceLogProviderBase { toLog.split("\n").forEach((actualLine) => { this.printLine( color.styleText(this.getDeviceColor(deviceIdentifier), " "), - this.consoleLevelColor[level](actualLine) + this.consoleLevelColor[level](actualLine), ); }); } diff --git a/lib/common/test/unit-tests/file-system.ts b/lib/common/test/unit-tests/file-system.ts index 8ea252d41b..f9de36974f 100644 --- a/lib/common/test/unit-tests/file-system.ts +++ b/lib/common/test/unit-tests/file-system.ts @@ -1,6 +1,7 @@ import { Yok } from "../../yok"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import * as path from "path"; -import * as temp from "temp"; import * as hostInfoLib from "../../host-info"; import { assert, use } from "chai"; import "chai-as-promised"; @@ -28,7 +29,6 @@ function isOsCaseSensitive(testInjector: IInjector): boolean { const hostInfo = testInjector.resolve("hostInfo"); return hostInfo.isLinux; } -temp.track(); function createWriteJsonTestCases(): { exists: boolean; @@ -125,7 +125,7 @@ describe("FileSystem", () => { beforeEach(() => { testInjector = createTestInjector(); - tempDir = temp.mkdirSync("projectToUnzip"); + tempDir = mkdtempSync(path.join(tmpdir(), "projectToUnzip-")); fs = testInjector.resolve("fs"); file = path.join(tempDir, unzippedFileName); fs.writeFile(file, msg); @@ -188,7 +188,7 @@ describe("FileSystem", () => { const commandUnzipFailedMessage = "Command unzip failed with exit code 9"; it("is case sensitive when options is not defined", async () => { const testInjector = createTestInjector(); - const tempDir = temp.mkdirSync("projectToUnzip"); + const tempDir = mkdtempSync(path.join(tmpdir(), "projectToUnzip-")); const fs: IFileSystem = testInjector.resolve("fs"); if (isOsCaseSensitive(testInjector)) { await assert.isRejected( @@ -202,7 +202,7 @@ describe("FileSystem", () => { it("is case sensitive when caseSensitive option is not defined", async () => { const testInjector = createTestInjector(); - const tempDir = temp.mkdirSync("projectToUnzip"); + const tempDir = mkdtempSync(path.join(tmpdir(), "projectToUnzip-")); const fs: IFileSystem = testInjector.resolve("fs"); if (isOsCaseSensitive(testInjector)) { await assert.isRejected( @@ -216,7 +216,7 @@ describe("FileSystem", () => { it("is case sensitive when caseSensitive option is true", async () => { const testInjector = createTestInjector(); - const tempDir = temp.mkdirSync("projectToUnzip"); + const tempDir = mkdtempSync(path.join(tmpdir(), "projectToUnzip-")); const fs: IFileSystem = testInjector.resolve("fs"); if (isOsCaseSensitive(testInjector)) { await assert.isRejected( @@ -233,7 +233,7 @@ describe("FileSystem", () => { it("is case insensitive when caseSensitive option is false", async () => { const testInjector = createTestInjector(); - const tempDir = temp.mkdirSync("projectToUnzip"); + const tempDir = mkdtempSync(path.join(tmpdir(), "projectToUnzip-")); const fs: IFileSystem = testInjector.resolve("fs"); const file = path.join(tempDir, unzippedFileName); await fs.unzip( @@ -251,7 +251,7 @@ describe("FileSystem", () => { describe("renameIfExists", () => { it("returns true when file is renamed", () => { const testInjector = createTestInjector(); - const tempDir = temp.mkdirSync("renameIfExists"); + const tempDir = mkdtempSync(path.join(tmpdir(), "renameIfExists-")); const testFileName = path.join(tempDir, "testRenameIfExistsMethod"); const newFileName = path.join(tempDir, "newfilename"); @@ -287,7 +287,7 @@ describe("FileSystem", () => { beforeEach(() => { testInjector = createTestInjector(); - tempDir = temp.mkdirSync("copyFile"); + tempDir = mkdtempSync(path.join(tmpdir(), "copyFile-")); testFileName = path.join(tempDir, "testCopyFile"); newFileName = path.join(tempDir, "newfilename"); diff --git a/lib/common/test/unit-tests/mobile/project-files-manager.ts b/lib/common/test/unit-tests/mobile/project-files-manager.ts index 927dde9acd..1ab06e1a94 100644 --- a/lib/common/test/unit-tests/mobile/project-files-manager.ts +++ b/lib/common/test/unit-tests/mobile/project-files-manager.ts @@ -12,12 +12,12 @@ import * as path from "path"; import { Yok } from "../../../yok"; import { ProjectFilesProviderBase } from "../../../services/project-files-provider-base"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import { LiveSyncPaths } from "../../../constants"; import { TempServiceStub } from "../../../../../test/stubs"; import { IInjector } from "../../../definitions/yok"; import { IProjectFilesManager } from "../../../declarations"; -temp.track(); const testedApplicationIdentifier = "com.telerik.myApp"; const iOSDeviceProjectRootPath = "/Documents/AppBuilder/LiveSync/app"; @@ -44,7 +44,7 @@ function createTestInjector(): IInjector { testInjector.register("hostInfo", HostInfo); testInjector.register( "localToDevicePathDataFactory", - LocalToDevicePathDataFactory + LocalToDevicePathDataFactory, ); testInjector.register("mobileHelper", MobileHelper); testInjector.register("projectFilesProvider", ProjectFilesProviderBase); @@ -61,12 +61,14 @@ function createTestInjector(): IInjector { async function createFiles( testInjector: IInjector, - filesToCreate: string[] + filesToCreate: string[], ): Promise { - const directoryPath = temp.mkdirSync("Project Files Manager Tests"); + const directoryPath = mkdtempSync( + path.join(tmpdir(), "Project Files Manager Tests-"), + ); _.each(filesToCreate, (file) => - createFile(testInjector, file, "", directoryPath) + createFile(testInjector, file, "", directoryPath), ); return directoryPath; @@ -76,11 +78,11 @@ function createFile( testInjector: IInjector, fileToCreate: string, fileContent: string, - directoryPath?: string + directoryPath?: string, ): string { const fs = testInjector.resolve("fs"); directoryPath = !directoryPath - ? temp.mkdirSync("Project Files Manager Tests") + ? mkdtempSync(path.join(tmpdir(), "Project Files Manager Tests-")) : directoryPath; fs.writeFile(path.join(directoryPath, fileToCreate), fileContent); @@ -100,50 +102,52 @@ describe("Project Files Manager Tests", () => { it("maps non-platform specific files to device file paths for ios platform", async () => { const files = ["~/TestApp/app/test.js", "~/TestApp/app/myfile.js"]; - const localToDevicePaths = await projectFilesManager.createLocalToDevicePaths( - iOSDeviceAppData, - "~/TestApp/app", - files, - [] - ); + const localToDevicePaths = + await projectFilesManager.createLocalToDevicePaths( + iOSDeviceAppData, + "~/TestApp/app", + files, + [], + ); _.each(localToDevicePaths, (localToDevicePathData, index) => { assert.equal(files[index], localToDevicePathData.getLocalPath()); assert.equal( mobileHelper.buildDevicePath( iOSDeviceProjectRootPath, - path.basename(files[index]) + path.basename(files[index]), ), - localToDevicePathData.getDevicePath() + localToDevicePathData.getDevicePath(), ); assert.equal( path.basename(files[index]), - localToDevicePathData.getRelativeToProjectBasePath() + localToDevicePathData.getRelativeToProjectBasePath(), ); }); }); it("maps non-platform specific files to device file paths for android platform", async () => { const files = ["~/TestApp/app/test.js", "~/TestApp/app/myfile.js"]; - const localToDevicePaths = await projectFilesManager.createLocalToDevicePaths( - androidDeviceAppData, - "~/TestApp/app", - files, - [] - ); + const localToDevicePaths = + await projectFilesManager.createLocalToDevicePaths( + androidDeviceAppData, + "~/TestApp/app", + files, + [], + ); _.each(localToDevicePaths, (localToDevicePathData, index) => { assert.equal(files[index], localToDevicePathData.getLocalPath()); assert.equal( mobileHelper.buildDevicePath( androidDeviceProjectRootPath, - path.basename(files[index]) + path.basename(files[index]), ), - localToDevicePathData.getDevicePath() + localToDevicePathData.getDevicePath(), ); assert.equal( path.basename(files[index]), - localToDevicePathData.getRelativeToProjectBasePath() + localToDevicePathData.getRelativeToProjectBasePath(), ); }); }); @@ -155,18 +159,18 @@ describe("Project Files Manager Tests", () => { iOSDeviceAppData, "~/TestApp/app", [filePath], - [] + [], ) )[0]; assert.equal(filePath, localToDevicePathData.getLocalPath()); assert.equal( mobileHelper.buildDevicePath(iOSDeviceProjectRootPath, "test.js"), - localToDevicePathData.getDevicePath() + localToDevicePathData.getDevicePath(), ); assert.equal( "test.ios.js", - localToDevicePathData.getRelativeToProjectBasePath() + localToDevicePathData.getRelativeToProjectBasePath(), ); }); @@ -177,18 +181,18 @@ describe("Project Files Manager Tests", () => { androidDeviceAppData, "~/TestApp/app", [filePath], - [] + [], ) )[0]; assert.equal(filePath, localToDevicePathData.getLocalPath()); assert.equal( mobileHelper.buildDevicePath(androidDeviceProjectRootPath, "test.js"), - localToDevicePathData.getDevicePath() + localToDevicePathData.getDevicePath(), ); assert.equal( "test.android.js", - localToDevicePathData.getRelativeToProjectBasePath() + localToDevicePathData.getRelativeToProjectBasePath(), ); }); @@ -199,7 +203,7 @@ describe("Project Files Manager Tests", () => { projectFilesManager.processPlatformSpecificFiles( directoryPath, "android", - {} + {}, ); const fs = testInjector.resolve("fs"); @@ -228,7 +232,7 @@ describe("Project Files Manager Tests", () => { testInjector, "test.release.x", releaseFileContent, - directoryPath + directoryPath, ); projectFilesManager.processPlatformSpecificFiles(directoryPath, "android", { @@ -241,7 +245,7 @@ describe("Project Files Manager Tests", () => { assert.isFalse(fs.exists(path.join(directoryPath, "test.release.x"))); assert.isTrue( fs.readFile(path.join(directoryPath, "test.x")).toString() === - releaseFileContent + releaseFileContent, ); }); @@ -253,7 +257,7 @@ describe("Project Files Manager Tests", () => { projectFilesManager.processPlatformSpecificFiles( directoryPath, "android", - {} + {}, ); const fs = testInjector.resolve("fs"); @@ -262,7 +266,7 @@ describe("Project Files Manager Tests", () => { assert.isFalse(fs.exists(path.join(directoryPath, "test.release.x"))); assert.isTrue( fs.readFile(path.join(directoryPath, "test.x")).toString() === - debugFileContent + debugFileContent, ); }); diff --git a/lib/common/test/unit-tests/services/hook-service.ts b/lib/common/test/unit-tests/services/hook-service.ts index 7b5d935a9c..f0eb83fd3f 100644 --- a/lib/common/test/unit-tests/services/hook-service.ts +++ b/lib/common/test/unit-tests/services/hook-service.ts @@ -14,9 +14,8 @@ import * as FileSystemLib from "../../../file-system"; import * as ChildProcessLib from "../../../child-process"; import { IHooksService } from "../../../declarations"; import { HooksService } from "../../../services/hooks-service"; -import * as temp from "temp"; - -temp.track(); +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; function createTestInjector(opts?: { projectDir?: string }): IInjector { const testInjector = new Yok(); @@ -34,7 +33,7 @@ function createTestInjector(opts?: { projectDir?: string }): IInjector { testInjector.register("projectConfigService", ProjectConfigServiceStub); testInjector.register( "projectHelper", - new ProjectHelperStub("", opts && opts.projectDir) + new ProjectHelperStub("", opts && opts.projectDir), ); testInjector.register("performanceService", PerformanceService); testInjector.register("hooksService", HooksService); @@ -47,7 +46,7 @@ describe("hooks-service", () => { it("should run hooks from hooks folder", async () => { const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector({ projectDir: projectPath }); @@ -64,7 +63,7 @@ describe("hooks-service", () => { fs.mkdirSync(path.join(projectPath, "hooks/after-prepare")); fs.writeFileSync( path.join(projectPath, "hooks/after-prepare/hook.js"), - script + script, ); service = testInjector.resolve("$hooksService"); @@ -73,13 +72,13 @@ describe("hooks-service", () => { assert.equal( testInjector.resolve("$logger").output, - "after-prepare hook is running\n" + "after-prepare hook is running\n", ); }); it("should run custom hooks from nativescript config", async () => { const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector({ projectDir: projectPath }); @@ -99,7 +98,7 @@ describe("hooks-service", () => { "projectConfigService", ProjectConfigServiceStub.initWithConfig({ hooks: [{ type: "before-prepare", script: "scripts/custom-hook.js" }], - }) + }), ); service = testInjector.resolve("$hooksService"); @@ -108,13 +107,13 @@ describe("hooks-service", () => { assert.equal( testInjector.resolve("$logger").output, - "custom hook is running\n" + "custom hook is running\n", ); }); it("skip when missing hook args", async () => { const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector({ projectDir: projectPath }); @@ -131,7 +130,7 @@ describe("hooks-service", () => { fs.mkdirSync(path.join(projectPath, "hooks/after-prepare")); fs.writeFileSync( path.join(projectPath, "hooks/after-prepare/hook.js"), - script + script, ); service = testInjector.resolve("$hooksService"); @@ -140,13 +139,13 @@ describe("hooks-service", () => { expect(testInjector.resolve("$logger").warnOutput).to.have.string( "invalid arguments", - "$projectData should be missing" + "$projectData should be missing", ); }); it("should run non-hook files", async () => { const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector({ projectDir: projectPath }); @@ -160,7 +159,7 @@ describe("hooks-service", () => { fs.mkdirSync(path.join(projectPath, "hooks/after-prepare")); fs.writeFileSync( path.join(projectPath, "hooks/after-prepare/script.js"), - script + script, ); service = testInjector.resolve("$hooksService"); @@ -169,7 +168,7 @@ describe("hooks-service", () => { assert( fs.existsSync(path.join(projectPath, "js-test.txt")), - "javascript file did not run" + "javascript file did not run", ); }); }); diff --git a/lib/common/test/unit-tests/yok.ts b/lib/common/test/unit-tests/yok.ts index 880c66b012..5c63a18d08 100644 --- a/lib/common/test/unit-tests/yok.ts +++ b/lib/common/test/unit-tests/yok.ts @@ -2,16 +2,18 @@ import { assert } from "chai"; import { injector, setGlobalInjector, Yok } from "../../yok"; import * as path from "path"; import * as fs from "fs"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import * as _ from "lodash"; import { ICliGlobal } from "../../definitions/cli-global"; import { ICommandParameter } from "../../definitions/commands"; import { IInjector } from "../../definitions/yok"; -temp.track(); - class MyClass { - constructor(private x: string, public y: any) {} + constructor( + private x: string, + public y: any, + ) {} public checkX(): void { assert.strictEqual(this.x, "foo"); @@ -476,9 +478,10 @@ describe("yok", () => { const cliGlobal = (global); const injectorCache = cliGlobal.$injector; cliGlobal.$injector = injector; - const tmpPathA = temp.path({ - prefix: "overrideAlreadyRequiredModule_fileA", - }); + const tmpDirA = mkdtempSync( + path.join(tmpdir(), "overrideAlreadyRequiredModule_fileA-"), + ); + const tmpPathA = path.join(tmpDirA, "fileA.js"); fs.writeFileSync( tmpPathA, ` @@ -490,14 +493,15 @@ class A { } } $injector.register("a", A); - ` + `, ); injector.require("a", tmpPathA); - const tmpPathB = temp.path({ - prefix: "overrideAlreadyRequiredModule_fileB", - }); + const tmpDirB = mkdtempSync( + path.join(tmpdir(), "overrideAlreadyRequiredModule_fileB-"), + ); + const tmpPathB = path.join(tmpDirB, "fileB.js"); fs.writeFileSync( tmpPathB, ` @@ -509,7 +513,7 @@ class A { } } $injector.register("a", A); - ` + `, ); injector.overrideAlreadyRequiredModule = true; @@ -526,7 +530,7 @@ $injector.register("a", A); setGlobalInjector(new Yok()); injector.requirePublic("foo", "test"); assert.isTrue( - _.includes(Object.getOwnPropertyNames(injector.publicApi), "foo") + _.includes(Object.getOwnPropertyNames(injector.publicApi), "foo"), ); }); @@ -542,9 +546,10 @@ $injector.register("a", A); const injectorCache = injector; setGlobalInjector(new Yok()); - const testPublicApiFilePath = temp.path({ - prefix: "overrideAlreadyRequiredModule_fileA", - }); + const tempDir = mkdtempSync( + path.join(tmpdir(), "overrideAlreadyRequiredModule_fileA-"), + ); + const testPublicApiFilePath = path.join(tempDir, "public-api-mocks.js"); const pathToMock = path.join(__dirname, "mocks", "public-api-mocks.js"); const originalContent = fs.readFileSync(pathToMock).toString(); @@ -567,11 +572,11 @@ $injector.register("a", A); const result = 1; assert.ok( injector.publicApi.testPublicApi, - "The module testPublicApi must be resolved in its getter and the returned value should not be falsey." + "The module testPublicApi must be resolved in its getter and the returned value should not be falsey.", ); assert.deepStrictEqual( await injector.publicApi.testPublicApi.myMethod(result), - result + result, ); setGlobalInjector(injectorCache); @@ -589,14 +594,14 @@ $injector.register("a", A); it("and is valid", () => { localInjector.requireCommand("sample|command", "sampleFileName"); return assert.eventually.isTrue( - localInjector.isValidHierarchicalCommand("sample", ["command"]) + localInjector.isValidHierarchicalCommand("sample", ["command"]), ); }); it("and has default value and no arguments passed", () => { localInjector.requireCommand("sample|*default", "sampleFileName"); return assert.eventually.isTrue( - localInjector.isValidHierarchicalCommand("sample", []) + localInjector.isValidHierarchicalCommand("sample", []), ); }); @@ -607,7 +612,7 @@ $injector.register("a", A); localInjector.registerCommand("sample|*default", command); localInjector.requireCommand("sample|*default", "sampleFileName"); return assert.eventually.isTrue( - localInjector.isValidHierarchicalCommand("sample", ["arg"]) + localInjector.isValidHierarchicalCommand("sample", ["arg"]), ); }); @@ -621,21 +626,24 @@ $injector.register("a", A); localInjector.registerCommand("sample|*default", command); localInjector.requireCommand("sample|*default", "sampleFileName"); return assert.eventually.isTrue( - localInjector.isValidHierarchicalCommand("sample", ["arg"]) + localInjector.isValidHierarchicalCommand("sample", ["arg"]), ); }); it("and has default value and argument default passed", () => { localInjector.requireCommand("sample|*default", "sampleFileName"); return assert.eventually.isTrue( - localInjector.isValidHierarchicalCommand("sample", ["default"]) + localInjector.isValidHierarchicalCommand("sample", ["default"]), ); }); it("and has default value and some arguments passed", () => { localInjector.requireCommand("sample|*default", "sampleFileName"); return assert.eventually.isTrue( - localInjector.isValidHierarchicalCommand("sample", ["arg1", "arg2"]) + localInjector.isValidHierarchicalCommand("sample", [ + "arg1", + "arg2", + ]), ); }); }); @@ -644,50 +652,50 @@ $injector.register("a", A); it("and is valid", () => { localInjector.requireCommand( "sample|command|subcommand", - "sampleFileName" + "sampleFileName", ); return assert.eventually.isTrue( localInjector.isValidHierarchicalCommand("sample", [ "command", "subcommand", - ]) + ]), ); }); it("and has default value and no arguments passed", () => { localInjector.requireCommand( "sample|command|*default", - "sampleFileName" + "sampleFileName", ); return assert.eventually.isTrue( - localInjector.isValidHierarchicalCommand("sample", ["command"]) + localInjector.isValidHierarchicalCommand("sample", ["command"]), ); }); it("has default value and default argument passed", () => { localInjector.requireCommand( "sample|command|*default", - "sampleFileName" + "sampleFileName", ); return assert.eventually.isTrue( localInjector.isValidHierarchicalCommand("sample", [ "command", "default", - ]) + ]), ); }); it("has default value and some arguments passed", () => { localInjector.requireCommand( "sample|command|*default", - "sampleFileName" + "sampleFileName", ); return assert.eventually.isTrue( localInjector.isValidHierarchicalCommand("sample", [ "command", "arg1", "arg2", - ]) + ]), ); }); }); @@ -697,7 +705,7 @@ $injector.register("a", A); it("when command is invalid", () => { localInjector.requireCommand("sample|command", "sampleFileName"); return assert.eventually.isFalse( - localInjector.isValidHierarchicalCommand("wrong", ["command"]) + localInjector.isValidHierarchicalCommand("wrong", ["command"]), ); }); @@ -705,7 +713,7 @@ $injector.register("a", A); it("when arguments are invalid", () => { localInjector.requireCommand("sample|command", "sampleFileName"); return assert.isRejected( - localInjector.isValidHierarchicalCommand("sample", ["commandarg"]) + localInjector.isValidHierarchicalCommand("sample", ["commandarg"]), ); }); }); @@ -722,21 +730,21 @@ $injector.register("a", A); injector.requireCommand("sample|command", "sampleFileName"); assert.isUndefined( injector.buildHierarchicalCommand("command", ["subCommand"]), - "When there's no matching subcommand, buildHierarchicalCommand should return undefined." + "When there's no matching subcommand, buildHierarchicalCommand should return undefined.", ); }); it("when there's no hierarchical commands required", () => { assert.isUndefined( injector.buildHierarchicalCommand("command", ["subCommand"]), - "When there's no hierarchical commands required, buildHierarchicalCommand should return undefined." + "When there's no hierarchical commands required, buildHierarchicalCommand should return undefined.", ); }); it("when only one argument is passed", () => { assert.isUndefined( injector.buildHierarchicalCommand("command", []), - "When when only one argument is passed, buildHierarchicalCommand should return undefined." + "When when only one argument is passed, buildHierarchicalCommand should return undefined.", ); }); @@ -744,7 +752,7 @@ $injector.register("a", A); injector.requireCommand("command", "sampleFileName"); assert.isUndefined( injector.buildHierarchicalCommand("command", []), - "When there's matching command, but it is not hierarchical command, buildHierarchicalCommand should return undefined." + "When there's matching command, but it is not hierarchical command, buildHierarchicalCommand should return undefined.", ); }); }); @@ -753,19 +761,17 @@ $injector.register("a", A); it("when only command is passed, no arguments are returned", () => { const commandName = "sample|command"; injector.requireCommand(commandName, "sampleFileName"); - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command"] - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand("sample", ["command"]); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, [], - "There shouldn't be any arguments left." + "There shouldn't be any arguments left.", ); }); @@ -779,19 +785,20 @@ $injector.register("a", A); "to", "command", ]; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["command"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except first one should be returned." + "All arguments except first one should be returned.", ); }); @@ -805,38 +812,37 @@ $injector.register("a", A); "to", "command", ]; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["CoMmanD"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["CoMmanD"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except first one should be returned." + "All arguments except first one should be returned.", ); }); it("when only default command is passed, no arguments are returned", () => { const commandName = "sample|*command"; injector.requireCommand(commandName, "sampleFileName"); - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command"] - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand("sample", ["command"]); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, [], - "There shouldn't be any arguments left." + "There shouldn't be any arguments left.", ); }); @@ -850,19 +856,20 @@ $injector.register("a", A); "to", "command", ]; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["command"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except first one should be returned." + "All arguments except first one should be returned.", ); }); }); @@ -871,19 +878,22 @@ $injector.register("a", A); it("when only command is passed, no arguments are returned", () => { const commandName = "sample|command|with|more|pipes"; injector.requireCommand(commandName, "sampleFileName"); - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "with", "more", "pipes"] - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand("sample", [ + "command", + "with", + "more", + "pipes", + ]); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, [], - "There shouldn't be any arguments left." + "There shouldn't be any arguments left.", ); }); @@ -897,38 +907,37 @@ $injector.register("a", A); "to", "command", ]; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "pipes"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["command", "pipes"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except the ones used for commandName should be returned." + "All arguments except the ones used for commandName should be returned.", ); }); it("when only default command is passed, no arguments are returned", () => { const commandName = "sample|*command|pipes"; injector.requireCommand(commandName, "sampleFileName"); - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "pipes"] - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand("sample", ["command", "pipes"]); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, [], - "There shouldn't be any arguments left." + "There shouldn't be any arguments left.", ); }); @@ -942,19 +951,20 @@ $injector.register("a", A); "to", "command", ]; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "pipes"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["command", "pipes"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except the ones used for commandName should be returned." + "All arguments except the ones used for commandName should be returned.", ); }); @@ -972,114 +982,116 @@ $injector.register("a", A); injector.requireCommand("sample|command|with|more", "sampleFileName"); injector.requireCommand( "sample|command|with|more|pipes", - "sampleFileName" + "sampleFileName", ); }); it("when subcommand of subcommand is called", () => { const commandName = "sample|command|with|more|pipes"; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "with", "more", "pipes"] - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand("sample", [ + "command", + "with", + "more", + "pipes", + ]); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, [], - "There shouldn't be any arguments left." + "There shouldn't be any arguments left.", ); }); it("and correct arguments, when subcommand of subcommand is called", () => { const commandName = "sample|command|with|more|pipes"; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "with", "more", "pipes"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["command", "with", "more", "pipes"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except the ones used for commandName should be returned." + "All arguments except the ones used for commandName should be returned.", ); }); it("when top subcommand is called and it has its own subcommand", () => { const commandName = "sample|command"; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command"] - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand("sample", ["command"]); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, [], - "There shouldn't be any arguments left." + "There shouldn't be any arguments left.", ); }); it("and correct arguments, when top subcommand is called and it has its own subcommand", () => { const commandName = "sample|command"; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["command"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except the ones used for commandName should be returned." + "All arguments except the ones used for commandName should be returned.", ); }); it("when subcommand of subcommand is called and it has its own subcommand", () => { const commandName = "sample|command|with"; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "with"] - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand("sample", ["command", "with"]); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, [], - "There shouldn't be any arguments left." + "There shouldn't be any arguments left.", ); }); it("and correct arguments, when subcommand of subcommand is called and it has its own subcommand", () => { const commandName = "sample|command|with"; - const buildHierarchicalCommandResult = injector.buildHierarchicalCommand( - "sample", - ["command", "with"].concat(sampleArguments) - ); + const buildHierarchicalCommandResult = + injector.buildHierarchicalCommand( + "sample", + ["command", "with"].concat(sampleArguments), + ); assert.deepStrictEqual( buildHierarchicalCommandResult.commandName, commandName, - `The expected command name is ${commandName}` + `The expected command name is ${commandName}`, ); assert.deepStrictEqual( buildHierarchicalCommandResult.remainingArguments, sampleArguments, - "All arguments except the ones used for commandName should be returned." + "All arguments except the ones used for commandName should be returned.", ); }); }); @@ -1106,7 +1118,7 @@ $injector.register("a", A); const resultFooObject = injector.publicApi.foo; fs.unlinkSync(filepath); assert.isTrue( - _.includes(Object.getOwnPropertyNames(injector.publicApi), "foo") + _.includes(Object.getOwnPropertyNames(injector.publicApi), "foo"), ); assert.deepStrictEqual(resultFooObject, dataObject); }); diff --git a/lib/controllers/migrate-controller.ts b/lib/controllers/migrate-controller.ts index d83016803e..3206099583 100644 --- a/lib/controllers/migrate-controller.ts +++ b/lib/controllers/migrate-controller.ts @@ -40,7 +40,8 @@ import { IInjector } from "../common/definitions/yok"; import { injector } from "../common/yok"; import { IJsonFileSettingsService } from "../common/definitions/json-file-settings-service"; import { SupportedConfigValues } from "../tools/config-manipulation/config-transformer"; -import * as temp from "temp"; +import * as fs from "fs"; +import { tmpdir } from "os"; import { color } from "../color"; import { ITerminalSpinner, @@ -1285,9 +1286,9 @@ export class MigrateController return "./" + path.relative(projectDir, polyfillsPath); } - const tempDir = temp.mkdirSync({ - prefix: "migrate-angular-polyfills", - }); + const tempDir = fs.mkdtempSync( + path.join(tmpdir(), "migrate-angular-polyfills-"), + ); // get from default angular template await this.$pacoteService.extractPackage( diff --git a/lib/definitions/temp-service.d.ts b/lib/definitions/temp-service.d.ts index ea73b7737c..24038d9ec3 100644 --- a/lib/definitions/temp-service.d.ts +++ b/lib/definitions/temp-service.d.ts @@ -1,9 +1,13 @@ -import { AffixOptions } from "temp"; +export type AffixOptions = { + prefix?: string; + suffix?: string; + dir?: string; +}; /** * Declares wrapped functions of temp module */ -interface ITempService { +export interface ITempService { mkdirSync(affixes: string | AffixOptions): Promise; path(options: string | AffixOptions): Promise; } diff --git a/lib/services/ios/spm-service.ts b/lib/services/ios/spm-service.ts index d7d46107ff..ec6b68b2d5 100644 --- a/lib/services/ios/spm-service.ts +++ b/lib/services/ios/spm-service.ts @@ -1,6 +1,6 @@ import { injector } from "../../common/yok"; import { IProjectConfigService, IProjectData } from "../../definitions/project"; -import { MobileProject } from "@rigor789/trapezedev-project"; +import { MobileProject } from "@nstudio/trapezedev-project"; import { IPlatformData } from "../../definitions/platform"; import path = require("path"); diff --git a/lib/services/temp-service.ts b/lib/services/temp-service.ts index 988fe8a8c0..f82af5efdd 100644 --- a/lib/services/temp-service.ts +++ b/lib/services/temp-service.ts @@ -1,22 +1,39 @@ -import * as temp from "temp"; +import * as fs from "fs"; +import * as path from "path"; +import { tmpdir } from "os"; import { ICleanupService } from "../definitions/cleanup-service"; import { injector } from "../common/yok"; -import { AffixOptions } from "temp"; import { ITempService } from "../definitions/temp-service"; +type TempAffixOptions = { + prefix?: string; + suffix?: string; + dir?: string; +}; + export class TempService implements ITempService { constructor(private $cleanupService: ICleanupService) { - temp.track(); + // no-op } - public async mkdirSync(affixes: string | AffixOptions): Promise { - const pathToDir = temp.mkdirSync(affixes); + public async mkdirSync(affixes: string | TempAffixOptions): Promise { + const opts = typeof affixes === "string" ? { prefix: affixes } : affixes; + const baseDir = opts?.dir ? opts.dir : tmpdir(); + const prefix = (opts?.prefix ?? "ns-").replace(/\s+/g, "-"); + // fs.mkdtempSync requires the full path prefix + const pathToDir = fs.mkdtempSync(path.join(baseDir, prefix)); await this.$cleanupService.addCleanupDeleteAction(pathToDir); return pathToDir; } - public async path(options: string | AffixOptions): Promise { - const pathToFile = temp.path(options); + public async path(options: string | TempAffixOptions): Promise { + const opts = typeof options === "string" ? { prefix: options } : options; + const baseDir = opts?.dir ? opts.dir : tmpdir(); + const prefix = (opts?.prefix ?? "ns-").replace(/\s+/g, "-"); + const suffix = opts?.suffix ?? ""; + const unique = Math.random().toString(36).slice(2); + const filePath = path.join(baseDir, `${prefix}${unique}${suffix}`); + const pathToFile = filePath; await this.$cleanupService.addCleanupDeleteAction(pathToFile); return pathToFile; } diff --git a/package-lock.json b/package-lock.json index fe0a393e74..e34faa8f1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,20 @@ { "name": "nativescript", - "version": "9.0.0-alpha.5", + "version": "9.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nativescript", - "version": "9.0.0-alpha.5", + "version": "9.0.0", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@foxt/js-srp": "^0.0.3-patch2", - "@nativescript/doctor": "2.0.16-rc.0", - "@npmcli/arborist": "^9.0.0", + "@nativescript/doctor": "2.0.17", + "@npmcli/arborist": "^9.1.4", + "@nstudio/trapezedev-project": "7.2.3", "@rigor789/resolve-package-path": "1.0.7", - "@rigor789/trapezedev-project": "7.1.2", "archiver": "^7.0.1", "axios": "1.11.0", "byline": "5.0.0", @@ -47,16 +47,15 @@ "prettier": "3.5.2", "prompts": "2.4.2", "proper-lockfile": "4.1.2", - "proxy-lib": "0.4.0", + "proxy-lib": "0.4.1", "qr-image": "3.2.0", "qrcode-terminal": "0.12.0", "semver": "7.7.1", - "shelljs": "0.8.5", + "shelljs": "0.10.0", "simple-git": "3.27.0", "simple-plist": "1.4.0", "source-map": "0.7.4", "tar": "7.4.3", - "temp": "0.9.4", "ts-morph": "25.0.1", "tunnel": "0.0.6", "typescript": "5.7.3", @@ -95,7 +94,6 @@ "@types/sinon": "^17.0.3", "@types/tabtab": "^3.0.2", "@types/tar": "6.1.13", - "@types/temp": "0.9.4", "@types/tunnel": "0.0.7", "@types/universal-analytics": "0.4.8", "@types/uuid": "^10.0.0", @@ -132,6 +130,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -146,6 +145,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -161,6 +161,32 @@ "node": ">=0.1.90" } }, + "node_modules/@conventional-changelog/git-client": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-1.0.1.tgz", + "integrity": "sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/semver": "^7.5.5", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0" + }, + "peerDependenciesMeta": { + "conventional-commits-filter": { + "optional": true + }, + "conventional-commits-parser": { + "optional": true + } + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -180,12 +206,13 @@ "license": "ISC" }, "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-5.0.0.tgz", + "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=6.9.0" + "node": ">=10.13.0" } }, "node_modules/@ionic/utils-array": { @@ -883,23 +910,22 @@ "license": "MIT" }, "node_modules/@nativescript/doctor": { - "version": "2.0.16-rc.0", - "resolved": "https://registry.npmjs.org/@nativescript/doctor/-/doctor-2.0.16-rc.0.tgz", - "integrity": "sha512-ZZ85tIH56vRyt9A4NpFeKGgCGX5B312HgdvUNNWoxzGI7DzpRfB2E/niu6pF7ejvpyFGXVLntisL0f/XX69E7g==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@nativescript/doctor/-/doctor-2.0.17.tgz", + "integrity": "sha512-+S3nL9/OwsrQ75MkolXtLYOuzzjc2W9EEqys7hg8FLFJbcQc47TYmpGLf/v7bdwx6Rh8G3HTcKy0QSkjInL1WQ==", "license": "Apache-2.0", "dependencies": { "lodash": "4.17.21", - "semver": "7.6.3", - "shelljs": "0.8.5", - "temp": "0.9.4", + "semver": "7.7.2", + "shelljs": "0.10.0", "winreg": "1.2.5", "yauzl": "3.2.0" } }, "node_modules/@nativescript/doctor/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -908,18 +934,6 @@ "node": ">=10" } }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -979,9 +993,9 @@ } }, "node_modules/@npmcli/arborist": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.3.tgz", - "integrity": "sha512-PvwtZD1dipP5VByHyWX28tZfan1AkfBLenJTgr0rDdEbdovZc06Z5PHdGb5SEeN7EERl68wFH8lq6WvuUHmgrw==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.4.tgz", + "integrity": "sha512-2Co31oEFlzT9hYjGahGL4PqDXXpA18tX9yu55j5on+m2uDiyBoljQjHNnnNVCji4pFUjawlHi23tQ4j2A5gHow==", "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", @@ -1171,9 +1185,9 @@ } }, "node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", - "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", "license": "ISC", "dependencies": { "which": "^5.0.0" @@ -1220,54 +1234,17 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@prettier/plugin-xml": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz", - "integrity": "sha512-UWRmygBsyj4bVXvDiqSccwT1kmsorcwQwaIy30yVh8T+Gspx4OlC0shX1y+ZuwXZvgnafmpRYKks0bAu9urJew==", - "license": "MIT", - "dependencies": { - "@xml-tools/parser": "^1.0.11", - "prettier": ">=2.4.0" - } - }, - "node_modules/@rigor789/resolve-package-path": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@rigor789/resolve-package-path/-/resolve-package-path-1.0.7.tgz", - "integrity": "sha512-/JqGCvHpj0PxS9cyZPP5LpiEy1pYszgWor/JTyreHQwLPQQdxO1mUYTtRribYcVosxH7FFs0GJBtJ652nlwKyw==", - "license": "MIT" - }, - "node_modules/@rigor789/trapezedev-project": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@rigor789/trapezedev-project/-/trapezedev-project-7.1.2.tgz", - "integrity": "sha512-eFnyKmQD73uB+CA+mg2YODFM6EAlUV/ub57UnRAI9QmpsXZnPedbJH698hjWm5g6+KuR8La9rg4sxBEexPG6Ow==", + "node_modules/@nstudio/trapezedev-project": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@nstudio/trapezedev-project/-/trapezedev-project-7.2.3.tgz", + "integrity": "sha512-EIxEGjwPeMfBVkxvRvf8GY+pD3lfu8CP2sh/AD5eV4fgW/gpgRYE9WKbW4QJLj7WIRgQbn6Oos9NXq1OfTmzhA==", "license": "SEE LICENSE", "dependencies": { "@ionic/utils-fs": "^3.1.5", "@ionic/utils-subprocess": "^2.1.8", "@prettier/plugin-xml": "^2.2.0", - "@trapezedev/gradle-parse": "7.0.10", - "@xmldom/xmldom": "^0.7.5", - "conventional-changelog": "^3.1.4", - "cross-fetch": "^3.1.5", + "@trapezedev/gradle-parse": "7.1.3", + "@xmldom/xmldom": "^0.8.11", "cross-spawn": "^7.0.3", "diff": "^5.1.0", "env-paths": "^3.0.0", @@ -1275,13 +1252,10 @@ "ini": "^2.0.0", "kleur": "^4.1.5", "lodash": "^4.17.21", - "mergexml": "^1.2.3", - "npm-watch": "^0.11.0", "plist": "^3.0.4", "prettier": "^2.7.1", "prompts": "^2.4.2", "replace": "^1.1.0", - "tempy": "^1.0.1", "tmp": "^0.2.1", "ts-node": "^10.2.1", "xcode": "^3.0.1", @@ -1290,7 +1264,7 @@ "yargs": "^17.2.1" } }, - "node_modules/@rigor789/trapezedev-project/node_modules/ini": { + "node_modules/@nstudio/trapezedev-project/node_modules/ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", @@ -1299,7 +1273,7 @@ "node": ">=10" } }, - "node_modules/@rigor789/trapezedev-project/node_modules/prettier": { + "node_modules/@nstudio/trapezedev-project/node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", @@ -1314,6 +1288,32 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@prettier/plugin-xml": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz", + "integrity": "sha512-UWRmygBsyj4bVXvDiqSccwT1kmsorcwQwaIy30yVh8T+Gspx4OlC0shX1y+ZuwXZvgnafmpRYKks0bAu9urJew==", + "license": "MIT", + "dependencies": { + "@xml-tools/parser": "^1.0.11", + "prettier": ">=2.4.0" + } + }, + "node_modules/@rigor789/resolve-package-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@rigor789/resolve-package-path/-/resolve-package-path-1.0.7.tgz", + "integrity": "sha512-/JqGCvHpj0PxS9cyZPP5LpiEy1pYszgWor/JTyreHQwLPQQdxO1mUYTtRribYcVosxH7FFs0GJBtJ652nlwKyw==", + "license": "MIT" + }, "node_modules/@sigstore/bundle": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", @@ -1455,9 +1455,9 @@ "license": "MIT" }, "node_modules/@trapezedev/gradle-parse": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@trapezedev/gradle-parse/-/gradle-parse-7.0.10.tgz", - "integrity": "sha512-k822Is3jGroqOTKF0gAFm80LmhFJWBAyZvNtyuXq6uQUzDDe2fj/gHwixP6VFzlpaWKLP7IuR609Xv8gwJCXyg==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@trapezedev/gradle-parse/-/gradle-parse-7.1.3.tgz", + "integrity": "sha512-WQVF5pEJ5o/mUyvfGTG9nBKx9Te/ilKM3r2IT69GlbaooItT5ao7RyF1MUTBNjHLPk/xpGUY3c6PyVnjDlz0Vw==", "license": "SEE LICENSE" }, "node_modules/@ts-morph/common": { @@ -1674,19 +1674,6 @@ "marked": ">=6.0.0 <12" } }, - "node_modules/@types/marked-terminal/node_modules/chalk": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", - "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@types/marked-terminal/node_modules/marked": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/marked/-/marked-11.2.0.tgz", @@ -1700,16 +1687,10 @@ "node": ">= 18" } }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "license": "MIT" - }, "node_modules/@types/node": { - "version": "22.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.0.tgz", - "integrity": "sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==", + "version": "22.18.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.1.tgz", + "integrity": "sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -1730,6 +1711,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, "license": "MIT" }, "node_modules/@types/npm-package-arg": { @@ -1925,9 +1907,9 @@ } }, "node_modules/@types/shelljs/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz", + "integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==", "dev": true, "license": "ISC", "engines": { @@ -2031,16 +2013,6 @@ "minipass": "^4.0.0" } }, - "node_modules/@types/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@types/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-+VfWIwrlept2VBTj7Y2wQnI/Xfscy1u8Pyj/puYwss6V1IblXn1x7S0S9eFh6KyBolgLCm+rUFzhFAbdkR691g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/tunnel": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.7.tgz", @@ -2112,10 +2084,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", - "deprecated": "this version is no longer supported, please update to at least 0.8.*", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -2168,6 +2139,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true, "license": "MIT" }, "node_modules/agent-base": { @@ -2179,19 +2151,6 @@ "node": ">= 14" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -2526,6 +2485,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, "license": "MIT" }, "node_modules/array-slice": { @@ -2538,15 +2498,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -2557,21 +2508,6 @@ "node": ">=0.10.0" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -3036,32 +2972,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/chai": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", @@ -3093,16 +3003,12 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -3203,15 +3109,6 @@ "node": ">= 0.4" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -3249,6 +3146,22 @@ "npm": ">=5.0.0" } }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/cli-highlight/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3260,6 +3173,27 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -3345,9 +3279,9 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, "license": "MIT" }, @@ -3557,6 +3491,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, "license": "MIT", "dependencies": { "array-ify": "^1.0.0", @@ -3602,50 +3537,49 @@ "dev": true }, "node_modules/conventional-changelog": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", - "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-6.0.0.tgz", + "integrity": "sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w==", + "dev": true, "license": "MIT", "dependencies": { - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-atom": "^2.0.8", - "conventional-changelog-codemirror": "^2.0.8", - "conventional-changelog-conventionalcommits": "^4.5.0", - "conventional-changelog-core": "^4.2.1", - "conventional-changelog-ember": "^2.0.9", - "conventional-changelog-eslint": "^3.0.9", - "conventional-changelog-express": "^2.0.6", - "conventional-changelog-jquery": "^3.0.11", - "conventional-changelog-jshint": "^2.0.9", - "conventional-changelog-preset-loader": "^2.3.4" + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-atom": "^5.0.0", + "conventional-changelog-codemirror": "^5.0.0", + "conventional-changelog-conventionalcommits": "^8.0.0", + "conventional-changelog-core": "^8.0.0", + "conventional-changelog-ember": "^5.0.0", + "conventional-changelog-eslint": "^6.0.0", + "conventional-changelog-express": "^5.0.0", + "conventional-changelog-jquery": "^6.0.0", + "conventional-changelog-jshint": "^5.0.0", + "conventional-changelog-preset-loader": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz", + "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", + "dev": true, "license": "ISC", "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/conventional-changelog-atom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-5.0.0.tgz", + "integrity": "sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==", + "dev": true, "license": "ISC", - "dependencies": { - "q": "^1.5.1" - }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/conventional-changelog-cli": { @@ -3667,89 +3601,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/@conventional-changelog/git-client": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-1.0.1.tgz", - "integrity": "sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/semver": "^7.5.5", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0" - }, - "peerDependenciesMeta": { - "conventional-commits-filter": { - "optional": true - }, - "conventional-commits-parser": { - "optional": true - } - } - }, - "node_modules/conventional-changelog-cli/node_modules/@hutson/parse-repository-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-5.0.0.tgz", - "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-6.0.0.tgz", - "integrity": "sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-atom": "^5.0.0", - "conventional-changelog-codemirror": "^5.0.0", - "conventional-changelog-conventionalcommits": "^8.0.0", - "conventional-changelog-core": "^8.0.0", - "conventional-changelog-ember": "^5.0.0", - "conventional-changelog-eslint": "^6.0.0", - "conventional-changelog-express": "^5.0.0", - "conventional-changelog-jquery": "^6.0.0", - "conventional-changelog-jshint": "^5.0.0", - "conventional-changelog-preset-loader": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-angular": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz", - "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-atom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-5.0.0.tgz", - "integrity": "sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-codemirror": { + "node_modules/conventional-changelog-codemirror": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-5.0.0.tgz", "integrity": "sha512-8gsBDI5Y3vrKUCxN6Ue8xr6occZ5nsDEc4C7jO/EovFGozx8uttCAyfhRrvoUAWi2WMm3OmYs+0mPJU7kQdYWQ==", @@ -3759,7 +3611,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-conventionalcommits": { + "node_modules/conventional-changelog-conventionalcommits": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-8.0.0.tgz", "integrity": "sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==", @@ -3772,7 +3624,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-core": { + "node_modules/conventional-changelog-core": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-8.0.0.tgz", "integrity": "sha512-EATUx5y9xewpEe10UEGNpbSHRC6cVZgO+hXQjofMqpy+gFIrcGvH3Fl6yk2VFKh7m+ffenup2N7SZJYpyD9evw==", @@ -3794,7 +3646,20 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-ember": { + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/conventional-changelog-ember": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-5.0.0.tgz", "integrity": "sha512-RPflVfm5s4cSO33GH/Ey26oxhiC67akcxSKL8CLRT3kQX2W3dbE19sSOM56iFqUJYEwv9mD9r6k79weWe1urfg==", @@ -3804,7 +3669,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-eslint": { + "node_modules/conventional-changelog-eslint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-6.0.0.tgz", "integrity": "sha512-eiUyULWjzq+ybPjXwU6NNRflApDWlPEQEHvI8UAItYW/h22RKkMnOAtfCZxMmrcMO1OKUWtcf2MxKYMWe9zJuw==", @@ -3814,7 +3679,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-express": { + "node_modules/conventional-changelog-express": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-5.0.0.tgz", "integrity": "sha512-D8Q6WctPkQpvr2HNCCmwU5GkX22BVHM0r4EW8vN0230TSyS/d6VQJDAxGb84lbg0dFjpO22MwmsikKL++Oo/oQ==", @@ -3824,7 +3689,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-jquery": { + "node_modules/conventional-changelog-jquery": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-6.0.0.tgz", "integrity": "sha512-2kxmVakyehgyrho2ZHBi90v4AHswkGzHuTaoH40bmeNqUt20yEkDOSpw8HlPBfvEQBwGtbE+5HpRwzj6ac2UfA==", @@ -3834,7 +3699,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-jshint": { + "node_modules/conventional-changelog-jshint": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-5.0.0.tgz", "integrity": "sha512-gGNphSb/opc76n2eWaO6ma4/Wqu3tpa2w7i9WYqI6Cs2fncDSI2/ihOfMvXveeTTeld0oFvwMVNV+IYQIk3F3g==", @@ -3847,7 +3712,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-preset-loader": { + "node_modules/conventional-changelog-preset-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-5.0.0.tgz", "integrity": "sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==", @@ -3857,7 +3722,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-writer": { + "node_modules/conventional-changelog-writer": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz", "integrity": "sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==", @@ -3876,7 +3741,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-commits-filter": { + "node_modules/conventional-commits-filter": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", @@ -3886,7 +3751,7 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/conventional-commits-parser": { + "node_modules/conventional-commits-parser": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.0.tgz", "integrity": "sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==", @@ -3902,579 +3767,499 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-cli/node_modules/git-raw-commits": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-5.0.0.tgz", - "integrity": "sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, "license": "MIT", - "dependencies": { - "@conventional-changelog/git-client": "^1.0.0", - "meow": "^13.0.0" - }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", "bin": { - "git-raw-commits": "src/cli.js" + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">=18" + "node": ">=0.8" } }, - "node_modules/conventional-changelog-cli/node_modules/git-semver-tags": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-8.0.0.tgz", - "integrity": "sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==", - "dev": true, + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "license": "MIT", "dependencies": { - "@conventional-changelog/git-client": "^1.0.0", - "meow": "^13.0.0" - }, - "bin": { - "git-semver-tags": "src/cli.js" + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">= 14" } }, - "node_modules/conventional-changelog-cli/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { - "lru-cache": "^10.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/conventional-changelog-cli/node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/conventional-changelog-cli/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/csproj2ts": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/csproj2ts/-/csproj2ts-1.1.0.tgz", + "integrity": "sha512-sk0RTT51t4lUNQ7UfZrqjQx7q4g0m3iwNA6mvyh7gLsgQYvwKzfdyoAgicC9GqJvkoIkU0UmndV9c7VZ8pJ45Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "es6-promise": "^4.1.1", + "lodash": "^4.17.4", + "semver": "^5.4.1", + "xml2js": "^0.4.19" } }, - "node_modules/conventional-changelog-cli/node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "node_modules/csproj2ts/node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/csproj2ts/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/csproj2ts/node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/conventional-changelog-cli/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/csproj2ts/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/conventional-changelog-codemirror": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", - "license": "ISC", - "dependencies": { - "q": "^1.5.1" + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=4.0" } }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, "license": "MIT", - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/conventional-changelog-ember": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", - "license": "ISC", + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { - "q": "^1.5.1" + "ms": "^2.1.3" }, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-eslint": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", - "license": "ISC", - "dependencies": { - "q": "^1.5.1" + "node": ">=6.0" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/conventional-changelog-express": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", - "license": "ISC", - "dependencies": { - "q": "^1.5.1" - }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" - } - }, - "node_modules/conventional-changelog-jquery": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", - "license": "ISC", - "dependencies": { - "q": "^1.5.1" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-jshint": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "license": "MIT", "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" + "clone": "^1.0.2" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/conventional-changelog-writer/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/conventional-changelog-writer/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/conventional-changelog-writer/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-writer/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "repeating": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-writer/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg": { + "node_modules/diff": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "node_modules/email-validator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz", + "integrity": "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==", + "engines": { + "node": ">4.0" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/conventional-changelog-writer/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "license": "(MIT OR CC0-1.0)", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" + }, + "node_modules/error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dev": true, + "dependencies": { + "string-template": "~0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/es-object-atoms": { + "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==", "license": "MIT", "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "es-errors": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/conventional-commits-parser/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/conventional-commits-parser/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/conventional-commits-parser/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "node_modules/es6-promise": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-0.1.2.tgz", + "integrity": "sha512-FkHS6f1w/2Nj2kO8NsnLj2ZuCvcXHEMhZfmZSIBtY+DY2mPDDWxnSLG9CyygFW0hrb5RhOXVOvHpEUHS/6nkhQ==", + "dev": true, "license": "MIT" }, - "node_modules/conventional-commits-parser/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/conventional-commits-parser/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { "node": ">=10" }, @@ -4482,1948 +4267,499 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-commits-parser/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "p-try": "^2.0.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=6" + "node": ">=0.12.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/conventional-commits-parser/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" + "node_modules/escodegen/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/conventional-commits-parser/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "amdefine": ">=0.0.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/conventional-commits-parser/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/conventional-commits-parser/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-parser/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "license": "MIT" - }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/csproj2ts": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/csproj2ts/-/csproj2ts-1.1.0.tgz", - "integrity": "sha512-sk0RTT51t4lUNQ7UfZrqjQx7q4g0m3iwNA6mvyh7gLsgQYvwKzfdyoAgicC9GqJvkoIkU0UmndV9c7VZ8pJ45Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "es6-promise": "^4.1.1", - "lodash": "^4.17.4", - "semver": "^5.4.1", - "xml2js": "^0.4.19" - } - }, - "node_modules/csproj2ts/node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/csproj2ts/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/csproj2ts/node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/csproj2ts/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/del/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/del/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/del/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/email-validator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz", - "integrity": "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==", - "engines": { - "node": ">4.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "license": "MIT" - }, - "node_modules/error": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", - "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", - "dev": true, - "dependencies": { - "string-template": "~0.2.1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "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==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-0.1.2.tgz", - "integrity": "sha512-FkHS6f1w/2Nj2kO8NsnLj2ZuCvcXHEMhZfmZSIBtY+DY2mPDDWxnSLG9CyygFW0hrb5RhOXVOvHpEUHS/6nkhQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/escodegen/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "license": "Apache-2.0" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/file-type": { - "version": "16.5.4", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", - "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", - "license": "MIT", - "dependencies": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.2.4", - "token-types": "^4.1.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/font-finder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/font-finder/-/font-finder-1.1.0.tgz", - "integrity": "sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==", - "license": "MIT", - "dependencies": { - "get-system-fonts": "^2.0.0", - "promise-stream-reader": "^1.0.1" - }, - "engines": { - "node": ">8.0.0" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "license": "MIT", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", - "dependencies": { - "for-in": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", + "dev": true, + "license": "MIT" }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, "engines": { - "node": ">= 6" + "node": ">=0.8.x" } }, - "node_modules/formidable": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, "license": "MIT", "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.17" }, "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/execa/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "node_modules/execa/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", - "dependencies": { - "globule": "^1.0.0" - }, "engines": { - "node": ">= 4.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.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.1.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, "license": "MIT", "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node": ">=0.10.0" } }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "license": "ISC", + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, "license": "MIT" }, - "node_modules/get-pkg-repo/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==", + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0" }, - "node_modules/get-pkg-repo/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/get-pkg-repo/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, "engines": { - "node": ">=10" + "node": ">=0.10.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==", + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "is-descriptor": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", - "engines": { - "node": ">=16" + "dependencies": { + "is-extendable": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/get-system-fonts": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-system-fonts/-/get-system-fonts-2.0.2.tgz", - "integrity": "sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==", + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, "license": "MIT", "engines": { - "node": ">8.0.0" + "node": ">=0.10.0" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6.0" } }, - "node_modules/getobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/gifwrap": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", - "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "dev": true, "license": "MIT", "dependencies": { - "image-q": "^4.0.0", - "omggif": "^1.0.10" + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "node_modules/file-sync-cmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" }, "engines": { "node": ">=10" - } - }, - "node_modules/git-raw-commits/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/git-raw-commits/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/git-raw-commits/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT", + "optional": true }, - "node_modules/git-raw-commits/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/git-raw-commits/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" @@ -6432,435 +4768,414 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-raw-commits/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-raw-commits/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" } }, - "node_modules/git-raw-commits/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "node_modules/git-raw-commits/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/git-raw-commits/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/git-raw-commits/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "license": "BSD-2-Clause", + "node_modules/font-finder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/font-finder/-/font-finder-1.1.0.tgz", + "integrity": "sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "get-system-fonts": "^2.0.0", + "promise-stream-reader": "^1.0.1" + }, + "engines": { + "node": ">8.0.0" } }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "license": "(MIT OR CC0-1.0)", + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/git-raw-commits/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "for-in": "^1.0.1" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/git-raw-commits/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/git-raw-commits/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "license": "(MIT OR CC0-1.0)", + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=10" + "node": ">= 6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/git-raw-commits/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { "node": ">=10" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "license": "MIT", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "license": "MIT", - "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/git-semver-tags/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/git-semver-tags/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/git-semver-tags/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/git-semver-tags/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "globule": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 4.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/get-east-asian-width": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.1.tgz", + "integrity": "sha512-R1QfovbPsKmosqTnPoRFiJ7CF9MLRgb53ChvMZm+r4p76/+8yKDy17qLL2PKInORy2RkZZekuK0efYgmzTkXyQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.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.1.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-semver-tags/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "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==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/git-semver-tags/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/get-system-fonts": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-system-fonts/-/get-system-fonts-2.0.2.tgz", + "integrity": "sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==", "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, "engines": { - "node": ">=8" + "node": ">8.0.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", + "node_modules/getobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "license": "BSD-2-Clause", + "node_modules/gifwrap": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", + "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "image-q": "^4.0.0", + "omggif": "^1.0.10" } }, - "node_modules/git-semver-tags/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/git-raw-commits": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-5.0.0.tgz", + "integrity": "sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==", + "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@conventional-changelog/git-client": "^1.0.0", + "meow": "^13.0.0" }, "bin": { - "resolve": "bin/resolve" + "git-raw-commits": "src/cli.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18" } }, - "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", + "node_modules/git-semver-tags": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-8.0.0.tgz", + "integrity": "sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@conventional-changelog/git-client": "^1.0.0", + "meow": "^13.0.0" + }, "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/git-semver-tags/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "git-semver-tags": "src/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", "engines": { - "node": ">=10" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "license": "BSD", - "dependencies": { - "ini": "^1.3.2" + "node": ">=18" } }, - "node_modules/gitconfiglocal/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -6970,30 +5285,10 @@ "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" + "isexe": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "which": "bin/which" } }, "node_modules/globule": { @@ -7316,6 +5611,46 @@ "node": ">=10" } }, + "node_modules/grunt-legacy-log-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/grunt-legacy-util": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", @@ -7393,6 +5728,29 @@ "node": ">=8" } }, + "node_modules/grunt-shell/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-shell/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/grunt-template": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/grunt-template/-/grunt-template-1.0.0.tgz", @@ -7750,16 +6108,6 @@ "concat-map": "0.0.1" } }, - "node_modules/grunt/node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/grunt/node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -7812,6 +6160,7 @@ "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -7833,20 +6182,12 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -7871,12 +6212,13 @@ } }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/has-symbols": { @@ -8137,21 +6479,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "license": "ISC" - }, "node_modules/ignore-walk": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", @@ -8203,15 +6530,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/index-to-position": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", @@ -8230,6 +6548,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -8290,18 +6609,6 @@ "ios-mobileprovision-finder": "src/ios-mobileprovision-finder.js" } }, - "node_modules/ios-mobileprovision-finder/node_modules/chalk": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", - "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/ios-sim-portable": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/ios-sim-portable/-/ios-sim-portable-4.5.1.tgz", @@ -8531,9 +6838,9 @@ } }, "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "license": "MIT" }, "node_modules/is-binary-path": { @@ -8560,6 +6867,7 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -8691,24 +6999,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8762,18 +7053,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -8930,16 +7209,6 @@ "node": "*" } }, - "node_modules/istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul/node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -8986,19 +7255,6 @@ "nopt": "bin/nopt.js" } }, - "node_modules/istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/istanbul/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -9075,6 +7331,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -9098,12 +7355,6 @@ "dev": true, "license": "The Software shall be used for Good, not Evil. (see LICENSE)" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "license": "MIT" - }, "node_modules/json-parse-even-better-errors": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", @@ -9122,12 +7373,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC" - }, "node_modules/jsonfile": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", @@ -9149,22 +7394,6 @@ ], "license": "MIT" }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/just-diff": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", @@ -9188,6 +7417,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9202,35 +7432,6 @@ "node": ">=6" } }, - "node_modules/ky": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.9.1.tgz", - "integrity": "sha512-WGzpBn57klhxsqRTEABAqF4tqTtqCuxoTIv9m6nIZtMMFTVcrHp7bRDWblzFIfqkb47+OhTztOgHn6A4xItmqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "package-json": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -9357,12 +7558,6 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, "node_modules/lint-staged": { "version": "15.4.3", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.3.tgz", @@ -9391,19 +7586,6 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", - "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/listr2": { "version": "8.3.3", "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", @@ -9436,9 +7618,9 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, "license": "MIT" }, @@ -9501,39 +7683,6 @@ "dev": true, "license": "MIT" }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -9556,32 +7705,63 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/log-update": { @@ -9618,20 +7798,20 @@ } }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.0.0" + "get-east-asian-width": "^1.3.1" }, "engines": { "node": ">=18" @@ -9798,18 +7978,6 @@ "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -9856,18 +8024,6 @@ "marked": ">=1 <16" } }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", - "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -9894,7 +8050,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, "license": "MIT" }, "node_modules/merge2": { @@ -9906,26 +8061,6 @@ "node": ">= 8" } }, - "node_modules/mergexml": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/mergexml/-/mergexml-1.2.4.tgz", - "integrity": "sha512-yiOlDqcVCz7AG1eSboonc18FTlfqDEKYfGoAV3Lul98u6YRV/s0kjtf4bjk47t0hLTFJR0BSYMd6BpmX3xDjNQ==", - "license": "ISC", - "dependencies": { - "@xmldom/xmldom": "^0.7.0", - "formidable": "^3.5.1", - "xpath": "0.0.27" - } - }, - "node_modules/mergexml/node_modules/xpath": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", - "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==", - "license": "MIT", - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -9998,15 +8133,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", @@ -10026,34 +8152,12 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/minipass": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", @@ -10346,6 +8450,16 @@ "fsevents": "~2.3.2" } }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/mocha/node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -10414,15 +8528,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -10561,6 +8666,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, "license": "MIT" }, "node_modules/nice-try": { @@ -10571,228 +8677,64 @@ }, "node_modules/nise": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", - "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.1", - "@sinonjs/text-encoding": "^0.7.3", - "just-extend": "^6.2.0", - "path-to-regexp": "^8.1.0" - } - }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp": { - "version": "11.4.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", - "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp/node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/nodemon": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz", - "integrity": "sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==", - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/nodemon/node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/nodemon/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", + "just-extend": "^6.2.0", + "path-to-regexp": "^8.1.0" } }, - "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/nodemon/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/node-gyp": { + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", + "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=8.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/nopt": { @@ -10820,50 +8762,33 @@ } }, "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10997,19 +8922,6 @@ "node": ">=4" } }, - "node_modules/npm-watch": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.11.0.tgz", - "integrity": "sha512-wAOd0moNX2kSA2FNvt8+7ORwYaJpQ1ZoWjUYdb1bBCxq4nkWuU0IiJa9VpVxrj5Ks+FGXQd62OC/Bjk0aSr+dg==", - "license": "MIT", - "dependencies": { - "nodemon": "^2.0.7", - "through2": "^4.0.2" - }, - "bin": { - "npm-watch": "cli.js" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -11232,6 +9144,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/ora/node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -11244,6 +9172,15 @@ "node": ">=8" } }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/ora/node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -11281,10 +9218,23 @@ "node": ">=8" } }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11294,16 +9244,18 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha512-W6FhbLxEWdiyX2/fCl2YBZUJOYWaCHJa+jJwUVMX0iFYJmwyd0uzKx4NxFdj3xo9C0pumQ6G/fvd1MbNhsqQbQ==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "deprecated": "This package is no longer supported.", + "dev": true, "license": "ISC", "dependencies": { "os-homedir": "^1.0.0", @@ -11578,16 +9530,21 @@ } }, "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, "license": "MIT", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/parse-passwd": { @@ -11657,6 +9614,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11675,6 +9633,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, "license": "MIT" }, "node_modules/path-root": { @@ -11726,34 +9685,14 @@ } }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "license": "MIT", - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/pathval": { @@ -11795,6 +9734,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -11822,15 +9762,6 @@ "node": ">=0.10" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pixelmatch": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", @@ -11889,15 +9820,6 @@ "node": ">=6" } }, - "node_modules/plist/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/pngjs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", @@ -12067,19 +9989,10 @@ "license": "MIT" }, "node_modules/proxy-lib": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/proxy-lib/-/proxy-lib-0.4.0.tgz", - "integrity": "sha512-oUDDpf0NTtKPyXjBNUcKzwZhA9GjEdu8Z47GsxGv5rZvKyCqsSrHurJtlL1yp7uVzA2NOmxd4aX7qmB1ZOdCwQ==", - "license": "Apache-2.0", - "dependencies": { - "osenv": "0.1.4" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "license": "MIT" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/proxy-lib/-/proxy-lib-0.4.1.tgz", + "integrity": "sha512-PvdxnMi+iTIjv5CWDAv5JqWcXthPwVGJ5fp1uWwsCKLsSpjfBlLTFtKIBC5kQyH6EpzxqJuUoapYP25tOpxLWQ==", + "license": "Apache-2.0" }, "node_modules/pump": { "version": "3.0.3", @@ -12091,17 +10004,6 @@ "once": "^1.3.1" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, "node_modules/qr-image": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/qr-image/-/qr-image-3.2.0.tgz", @@ -12152,15 +10054,6 @@ ], "license": "MIT" }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -12190,86 +10083,40 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, - "license": "MIT" - }, - "node_modules/read-cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz", - "integrity": "sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", - "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/read-package-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-package-up/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, + "license": "MIT" + }, + "node_modules/read-cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz", + "integrity": "sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==", "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/read-package-up/node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "license": "ISC", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/read-package-up/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" }, "engines": { "node": ">=18" @@ -12278,7 +10125,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-up/node_modules/read-pkg": { + "node_modules/read-pkg": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", @@ -12298,160 +10145,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-up/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/readable-stream": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", @@ -12576,19 +10269,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -13274,74 +10954,105 @@ } }, "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.10.0.tgz", + "integrity": "sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==", "license": "BSD-3-Clause", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "execa": "^5.1.1", + "fast-glob": "^3.3.2" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/shelljs/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/shelljs/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "node_modules/shelljs/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shelljs/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/shelljs/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/shelljs/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/shelljs/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "path-key": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/shelljs/node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/shelljs/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", "dependencies": { - "resolve": "^1.1.6" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">= 0.10" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shelljs/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/side-channel": { @@ -13470,30 +11181,12 @@ } }, "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "license": "MIT", "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" + "is-arrayish": "^0.3.1" } }, "node_modules/simple-xml-to-json": { @@ -13534,6 +11227,29 @@ "node": ">=0.3.1" } }, + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -13552,15 +11268,6 @@ "node": ">=8" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -13852,18 +11559,6 @@ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "license": "CC0-1.0" }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -13877,29 +11572,6 @@ "node": ">=0.10.0" } }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -14169,18 +11841,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -14212,15 +11872,16 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, "node_modules/supports-hyperlinks": { @@ -14239,10 +11900,32 @@ "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -14288,19 +11971,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "license": "MIT", - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -14311,74 +11981,6 @@ "node": ">=14.16" } }, - "node_modules/temp/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/temp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/temp/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/tempfile": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-5.0.0.tgz", @@ -14395,34 +11997,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "license": "MIT", - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/text-decoder": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", @@ -14432,15 +12006,6 @@ "b4a": "^1.6.4" } }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -14462,35 +12027,6 @@ "node": ">=0.8" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "license": "MIT", - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/tiny-lr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", @@ -14647,21 +12183,6 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", - "license": "ISC", - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -14680,15 +12201,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ts-morph": { "version": "25.0.1", "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-25.0.1.tgz", @@ -14804,12 +12316,13 @@ } }, "node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14832,6 +12345,7 @@ "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, "license": "BSD-2-Clause", "optional": true, "bin": { @@ -14851,12 +12365,6 @@ "node": ">=0.10.0" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "license": "MIT" - }, "node_modules/underscore.string": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", @@ -14956,18 +12464,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/universal-analytics": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.5.3.tgz", @@ -15173,12 +12669,6 @@ "defaults": "^1.0.3" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -15204,16 +12694,6 @@ "node": ">=0.8.0" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", @@ -15255,6 +12735,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, "license": "MIT" }, "node_modules/workerpool": { @@ -15431,15 +12912,6 @@ "node": ">=0.6.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index b055efd158..5b5ccd76bc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.5", + "version": "9.0.0", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { @@ -55,10 +55,10 @@ ], "dependencies": { "@foxt/js-srp": "^0.0.3-patch2", - "@nativescript/doctor": "2.0.16-rc.0", - "@npmcli/arborist": "^9.0.0", + "@nativescript/doctor": "2.0.17", + "@npmcli/arborist": "^9.1.4", "@rigor789/resolve-package-path": "1.0.7", - "@rigor789/trapezedev-project": "7.1.2", + "@nstudio/trapezedev-project": "7.2.3", "archiver": "^7.0.1", "axios": "1.11.0", "byline": "5.0.0", @@ -91,16 +91,15 @@ "prettier": "3.5.2", "prompts": "2.4.2", "proper-lockfile": "4.1.2", - "proxy-lib": "0.4.0", + "proxy-lib": "0.4.1", "qr-image": "3.2.0", "qrcode-terminal": "0.12.0", "semver": "7.7.1", - "shelljs": "0.8.5", + "shelljs": "0.10.0", "simple-git": "3.27.0", "simple-plist": "1.4.0", "source-map": "0.7.4", "tar": "7.4.3", - "temp": "0.9.4", "ts-morph": "25.0.1", "tunnel": "0.0.6", "typescript": "5.7.3", @@ -133,7 +132,6 @@ "@types/sinon": "^17.0.3", "@types/tabtab": "^3.0.2", "@types/tar": "6.1.13", - "@types/temp": "0.9.4", "@types/tunnel": "0.0.7", "@types/universal-analytics": "0.4.8", "@types/uuid": "^10.0.0", diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 1b48afc27a..6ff547fdbc 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/doctor", - "version": "2.0.16-rc.0", + "version": "2.0.17", "description": "Library that helps identifying if the environment can be used for development of {N} apps.", "main": "src/index.js", "types": "./typings/nativescript-doctor.d.ts", @@ -45,7 +45,7 @@ "@types/lodash": "4.17.15", "@types/mocha": "10.0.10", "@types/semver": "7.5.8", - "@types/shelljs": "0.8.15", + "@types/shelljs": "0.8.17", "@types/temp": "0.9.4", "@types/winreg": "1.2.36", "@types/yauzl": "2.10.3", @@ -66,9 +66,8 @@ }, "dependencies": { "lodash": "4.17.21", - "semver": "7.6.3", - "shelljs": "0.8.5", - "temp": "0.9.4", + "semver": "7.7.2", + "shelljs": "0.10.0", "winreg": "1.2.5", "yauzl": "3.2.0" } diff --git a/packages/doctor/src/declarations.d.ts b/packages/doctor/src/declarations.d.ts index e678f05bd2..f800c683ad 100644 --- a/packages/doctor/src/declarations.d.ts +++ b/packages/doctor/src/declarations.d.ts @@ -5,12 +5,12 @@ interface IProcessInfo { /** * The stdout of the process. */ - stdout: string; + stdout: string | Buffer; /** * The stderr of the process. */ - stderr: string; + stderr: string | Buffer; /** * The exit code of the process. diff --git a/packages/doctor/src/sys-info.ts b/packages/doctor/src/sys-info.ts index 58d1719be5..7b470601f3 100644 --- a/packages/doctor/src/sys-info.ts +++ b/packages/doctor/src/sys-info.ts @@ -1,12 +1,12 @@ -import { ChildProcess } from "./wrappers/child-process"; -import { FileSystem } from "./wrappers/file-system"; -import { HostInfo } from "./host-info"; -import { ExecOptions } from "child_process"; -import { WinReg } from "./winreg"; -import { Helpers } from "./helpers"; -import { platform, EOL, homedir } from "os"; +import type { ChildProcess } from "./wrappers/child-process"; +import type { FileSystem } from "./wrappers/file-system"; +import type { HostInfo } from "./host-info"; +import type { ExecOptions } from "child_process"; +import type { WinReg } from "./winreg"; +import type { Helpers } from "./helpers"; +import { platform, EOL, homedir, tmpdir } from "os"; import * as path from "path"; -import * as temp from "temp"; +import * as fs from "fs"; import * as semver from "semver"; import { Constants } from "./constants"; @@ -58,8 +58,11 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { private helpers: Helpers, private hostInfo: HostInfo, private winReg: WinReg, - private androidToolsInfo: NativeScriptDoctor.IAndroidToolsInfo - ) {} + private androidToolsInfo: NativeScriptDoctor.IAndroidToolsInfo, + ) { + // keep reference to preserve constructor signature compatibility + void this.winReg; + } public getJavaCompilerVersion(): Promise { return this.getValueForProperty( @@ -68,15 +71,15 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { const javacVersion = process.env["JAVA_HOME"] ? await this.getVersionOfJavaExecutableFromJavaHome( Constants.JAVAC_EXECUTABLE_NAME, - SysInfo.JAVA_COMPILER_VERSION_REGEXP - ) + SysInfo.JAVA_COMPILER_VERSION_REGEXP, + ) : await this.getVersionOfJavaExecutableFromPath( Constants.JAVAC_EXECUTABLE_NAME, - SysInfo.JAVA_COMPILER_VERSION_REGEXP - ); + SysInfo.JAVA_COMPILER_VERSION_REGEXP, + ); return javacVersion; - } + }, ); } @@ -88,7 +91,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { (await this.getJavaVersionFromJavaHome()) || (await this.getJavaVersionFromPath()); return javaVersion; - } + }, ); } @@ -98,13 +101,13 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { async (): Promise => { const javaPath = (await this.getJavaExecutablePathFromJavaHome( - Constants.JAVA_EXECUTABLE_NAME + Constants.JAVA_EXECUTABLE_NAME, )) || (await this.getJavaExecutablePathFromPath( - Constants.JAVA_EXECUTABLE_NAME + Constants.JAVA_EXECUTABLE_NAME, )); return javaPath; - } + }, ); } @@ -114,9 +117,9 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { (): Promise => { return this.getVersionOfJavaExecutableFromPath( Constants.JAVA_EXECUTABLE_NAME, - SysInfo.JAVA_VERSION_REGEXP + SysInfo.JAVA_VERSION_REGEXP, ); - } + }, ); } @@ -126,9 +129,9 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { (): Promise => { return this.getVersionOfJavaExecutableFromJavaHome( Constants.JAVA_EXECUTABLE_NAME, - SysInfo.JAVA_VERSION_REGEXP + SysInfo.JAVA_VERSION_REGEXP, ); - } + }, ); } @@ -145,7 +148,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { return this.getVersionFromString(output); } } - } + }, ); } @@ -160,7 +163,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } return null; - } + }, ); } @@ -170,7 +173,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { async (): Promise => { const output = await this.execCommand("npm -v"); return output ? output.split("\n")[0] : null; - } + }, ); } @@ -180,7 +183,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { async (): Promise => { const output = await this.execCommand("node-gyp -v"); return output ? this.getVersionFromString(output) : null; - } + }, ); } @@ -190,7 +193,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { async (): Promise => { const output = await this.execCommand("which xcodeproj"); return output ? output.trim() : null; - } + }, ); } @@ -212,12 +215,12 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { coreFoundationDir = path.join( commonProgramFiles, "Apple", - "Apple Application Support" + "Apple Application Support", ); mobileDeviceDir = path.join( commonProgramFiles, "Apple", - "Mobile Device Support" + "Mobile Device Support", ); } else if (this.hostInfo.isDarwin) { coreFoundationDir = @@ -230,7 +233,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { (await this.fileSystem.exists(coreFoundationDir)) && (await this.fileSystem.exists(mobileDeviceDir)) ); - } + }, ); } @@ -249,7 +252,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } } } - } + }, ); } @@ -258,7 +261,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { () => this.osCache, async (): Promise => { return await (this.hostInfo.isWindows ? this.winVer() : this.unixVer()); - } + }, ); } @@ -276,14 +279,14 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { pathToAdb, ["version"], "close", - { ignoreError: true } + { ignoreError: true }, ); } return output && output.stdout - ? this.getVersionFromString(output.stdout) + ? this.getVersionFromString(output.stdout as string) : null; - } + }, ); } @@ -297,7 +300,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } catch (err) { return false; } - } + }, ); } @@ -309,11 +312,11 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { this.androidToolsInfo.getPathToEmulatorExecutable(), ["-help"], "close", - { ignoreError: true } + { ignoreError: true }, ); return output && output.stdout.indexOf("usage: emulator") >= 0; - } + }, ); } @@ -324,7 +327,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { const output = await this.execCommand("mono --version"); const match = this.monoVerRegExp.exec(output); return match ? match[1] : null; - } + }, ); } @@ -338,11 +341,11 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } const output = await this.execCommand( - `${this.helpers.quoteString(gitPath)} --version` + `${this.helpers.quoteString(gitPath)} --version`, ); const matches = SysInfo.GIT_VERSION_REGEXP.exec(output); return matches && matches[1]; - } + }, ); } @@ -354,12 +357,12 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { const matches = SysInfo.GRADLE_VERSION_REGEXP.exec(output); return matches && matches[1]; - } + }, ); } public async getSysInfo( - config?: NativeScriptDoctor.ISysInfoConfig + config?: NativeScriptDoctor.ISysInfoConfig, ): Promise { if ( config && @@ -370,7 +373,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { return ( Object.assign( await this.getCommonSysInfo(), - await this.getAndroidSysInfo(config) + await this.getAndroidSysInfo(config), ) ); } @@ -389,7 +392,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { return Object.assign( await this.getCommonSysInfo(), await this.getAndroidSysInfo(), - await this.getiOSSysInfo() + await this.getiOSSysInfo(), ); } @@ -397,52 +400,43 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { return this.getValueForProperty( () => this.isCocoaPodsWorkingCorrectlyCache, async (): Promise => { - if (this.hostInfo.isDarwin) { - if (!this.fileSystem.exists(path.join(homedir(), ".cocoapods"))) { - return true; - } - temp.track(); - const tempDirectory = temp.mkdirSync("nativescript-check-cocoapods"); - const pathToXCodeProjectZip = path.join( - __dirname, - "..", - "resources", - "cocoapods-verification", - "cocoapods.zip" - ); + if (!this.hostInfo.isDarwin) { + return false; + } + if (!this.fileSystem.exists(path.join(homedir(), ".cocoapods"))) { + return true; + } + + const tempDirectory = fs.mkdtempSync( + path.join(tmpdir(), "nativescript-check-cocoapods-"), + ); + const pathToXCodeProjectZip = path.join( + __dirname, + "..", + "resources", + "cocoapods-verification", + "cocoapods.zip", + ); + try { await this.fileSystem.extractZip( pathToXCodeProjectZip, - tempDirectory + tempDirectory, ); - const xcodeProjectDir = path.join(tempDirectory, "cocoapods"); - - try { - const spawnResult = await this.childProcess.spawnFromEvent( - "pod", - ["install"], - "exit", - { spawnOptions: { cwd: xcodeProjectDir } } - ); - if (spawnResult.exitCode) { - this.fileSystem.deleteEntry(tempDirectory); - return false; - } else { - const exists = this.fileSystem.exists( - path.join(xcodeProjectDir, "cocoapods.xcworkspace") - ); - this.fileSystem.deleteEntry(tempDirectory); - return exists; - } - } catch (err) { - this.fileSystem.deleteEntry(tempDirectory); - return null; - } - } else { + const spawnResult = await this.childProcess.spawnFromEvent( + "pod", + ["install"], + "exit", + { spawnOptions: { cwd: xcodeProjectDir } }, + ); + return !spawnResult.exitCode; + } catch (err) { return false; + } finally { + this.fileSystem.deleteEntry(tempDirectory); } - } + }, ); } @@ -452,7 +446,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { async (): Promise => { const output = await this.execCommand("tns --version"); return output ? this.getVersionFromCLIOutput(output.trim()) : output; - } + }, ); } @@ -483,7 +477,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } return { shouldUseXcproj, xcprojAvailable }; - } + }, ); } @@ -505,7 +499,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } return null; - } + }, ); } @@ -519,7 +513,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } else { return false; } - } + }, ); } @@ -563,7 +557,9 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } const children = this.fileSystem.readDirectory(github); - const git = children.filter((child) => /^PortableGit/.test(child))[0]; + const git = children.filter((child: string) => + /^PortableGit/.test(child), + )[0]; if (!this.fileSystem.exists(git)) { return null; } @@ -585,9 +581,28 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { return result && result.split("\n")[0].trim(); } + private async winVer(): Promise { + try { + // Using `ver` is sufficient for an OS string on Windows. + const output = await this.execCommand("ver"); + return output ? output.trim() : null; + } catch { + return null; + } + } + + private async unixVer(): Promise { + try { + const output = await this.execCommand("uname -a"); + return output ? output.trim() : null; + } catch { + return null; + } + } + private async getValueForProperty( property: Function, - getValueMethod: () => Promise + getValueMethod: () => Promise, ): Promise { if (this.shouldCache) { const propertyName = this.helpers.getPropertyName(property); @@ -607,7 +622,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { private async exec( cmd: string, - execOptions?: ExecOptions + execOptions?: ExecOptions, ): Promise { if (cmd) { try { @@ -622,50 +637,31 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { private async execCommand( cmd: string, - execOptions?: ExecOptions + execOptions?: ExecOptions, ): Promise { const output = await this.exec(cmd, execOptions); - return output && output.stdout; + return output && (output.stdout as string); } - private getVersionFromString(versionString: string): string { - const matches = versionString.match(SysInfo.VERSION_REGEXP); - if (matches) { - return `${matches[1]}.${matches[2]}.${matches[3] || 0}`; + private getVersionFromString(output: string): string { + if (!output) { + return null; } - - return null; + const match = SysInfo.VERSION_REGEXP.exec(output); + return match && match[0] ? match[0].trim() : null; } - private getVersionFromCLIOutput(commandOutput: string): string { - const matches = commandOutput.match(SysInfo.CLI_OUTPUT_VERSION_REGEXP); - return matches && matches[0]; - } - - private async winVer(): Promise { - let productName: string; - let currentVersion: string; - let currentBuild: string; - const hive = this.winReg.registryKeys.HKLM; - const key = "\\Software\\Microsoft\\Windows NT\\CurrentVersion"; - - productName = await this.winReg.getRegistryValue("ProductName", hive, key); - currentVersion = await this.winReg.getRegistryValue( - "CurrentVersion", - hive, - key - ); - currentBuild = await this.winReg.getRegistryValue( - "CurrentBuild", - hive, - key - ); - - return `${productName} ${currentVersion}.${currentBuild}`; - } - - private unixVer(): Promise { - return this.execCommand("uname -a"); + private getVersionFromCLIOutput(output: string): string { + if (!output) { + return null; + } + const lines = output.split(/\r?\n/); + for (const line of lines) { + if (SysInfo.CLI_OUTPUT_VERSION_REGEXP.test(line)) { + return line.trim(); + } + } + return null; } private getCommonSysInfo(): Promise { @@ -687,7 +683,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { result.gitVer = await this.getGitVersion(); return result; - } + }, ); } @@ -708,12 +704,12 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { result.pythonInfo = await this.getPythonInfo(); return result; - } + }, ); } private async getAndroidSysInfo( - config?: NativeScriptDoctor.ISysInfoConfig + config?: NativeScriptDoctor.ISysInfoConfig, ): Promise { return this.getValueForProperty( () => this.androidSysInfoCache, @@ -726,7 +722,9 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { result.javaVersion = await this.getJavaVersion(); result.javaPath = await this.getJavaPath(); result.adbVer = await this.getAdbVersion( - config && config.androidToolsInfo && config.androidToolsInfo.pathToAdb + config && + config.androidToolsInfo && + config.androidToolsInfo.pathToAdb, ); result.androidInstalled = await this.isAndroidInstalled(); result.monoVer = await this.getMonoVersion(); @@ -735,13 +733,13 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { await this.isAndroidSdkConfiguredCorrectly(); return result; - } + }, ); } private async getVersionOfJavaExecutableFromJavaHome( javaExecutableName: string, - regExp: RegExp + regExp: RegExp, ): Promise { let javaExecutableVersion: string = null; const javaExecutablePath = @@ -749,7 +747,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { if (javaExecutablePath) { javaExecutableVersion = await this.getVersionOfJavaExecutable( javaExecutablePath, - regExp + regExp, ); } @@ -757,7 +755,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } private getJavaExecutablePathFromJavaHome( - javaExecutableName: string + javaExecutableName: string, ): string { let javaExecutablePath: string = null; @@ -771,7 +769,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { const pathToJavaExecutable = path.join( javaHome, "bin", - javaExecutableFile + javaExecutableFile, ); if (this.fileSystem.exists(pathToJavaExecutable)) { javaExecutablePath = pathToJavaExecutable; @@ -786,17 +784,16 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { private async getVersionOfJavaExecutableFromPath( javaExecutableName: string, - regExp: RegExp + regExp: RegExp, ): Promise { let javaExecutableVersion: string = null; - const javaExecutablePath = await this.getJavaExecutablePathFromPath( - javaExecutableName - ); + const javaExecutablePath = + await this.getJavaExecutablePathFromPath(javaExecutableName); if (javaExecutablePath) { javaExecutableVersion = await this.getVersionOfJavaExecutable( javaExecutablePath, - regExp + regExp, ); } @@ -804,7 +801,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { } private async getJavaExecutablePathFromPath( - javaExecutableName: string + javaExecutableName: string, ): Promise { let javaExecutablePath: string = null; @@ -822,7 +819,7 @@ export class SysInfo implements NativeScriptDoctor.ISysInfo { private async getVersionOfJavaExecutable( executable: string, - regExp: RegExp + regExp: RegExp, ): Promise { try { const output = await this.childProcess.exec(`"${executable}" -version`); diff --git a/packages/doctor/test/android-tools-info.ts b/packages/doctor/test/android-tools-info.ts index 89d1eb3f31..f8121b0da6 100644 --- a/packages/doctor/test/android-tools-info.ts +++ b/packages/doctor/test/android-tools-info.ts @@ -106,7 +106,7 @@ describe("androidToolsInfo", () => { const androidToolsInfo = getAndroidToolsInfo("8.2.0"); const toolsInfo = androidToolsInfo.getToolsInfo({ projectDir: "test" }); - assert.equal(toolsInfo.compileSdkVersion, 35); + assert.equal(toolsInfo.compileSdkVersion, 36); }); }); @@ -140,7 +140,7 @@ describe("androidToolsInfo", () => { it("runtime 8.2.0 should support android-17 - android-34", () => { const min = 17; - const max = 35; + const max = 36; assertSupportedRange("8.2.0", min, max); assertSupportedRange("8.3.0", min, max); }); diff --git a/test/ios-entitlements-service.ts b/test/ios-entitlements-service.ts index 455e9900fe..282754705b 100644 --- a/test/ios-entitlements-service.ts +++ b/test/ios-entitlements-service.ts @@ -1,4 +1,5 @@ -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import { EOL } from "os"; import { assert } from "chai"; import { IOSEntitlementsService } from "../lib/services/ios-entitlements-service"; @@ -13,8 +14,7 @@ import { IProjectData } from "../lib/definitions/project"; import { IInjector } from "../lib/common/definitions/yok"; import { IFileSystem } from "../lib/common/declarations"; -// start tracking temporary folders/files -temp.track(); +// start temporary folders/files helpers describe("IOSEntitlements Service Tests", () => { const createTestInjector = (): IInjector => { @@ -29,7 +29,7 @@ describe("IOSEntitlements Service Tests", () => { testInjector.register("mobileHelper", MobileHelperLib.MobileHelper); testInjector.register( "devicePlatformsConstants", - DevicePlatformsConstantsLib.DevicePlatformsConstants + DevicePlatformsConstantsLib.DevicePlatformsConstants, ); testInjector.register("errors", ErrorsLib.Errors); @@ -56,8 +56,10 @@ describe("IOSEntitlements Service Tests", () => { projectData = injector.resolve("projectData"); projectData.projectName = "testApp"; - projectData.platformsDir = temp.mkdirSync("platformsDir"); - projectData.projectDir = temp.mkdirSync("projectDir"); + projectData.platformsDir = mkdtempSync( + path.join(tmpdir(), "platformsDir-"), + ); + projectData.projectDir = mkdtempSync(path.join(tmpdir(), "projectDir-")); projectData.appDirectoryPath = projectData.getAppDirectoryPath(); projectData.appResourcesDirectoryPath = projectData.getAppResourcesDirectoryPath(); @@ -74,7 +76,7 @@ describe("IOSEntitlements Service Tests", () => { const expected = path.join("testApp", "testApp.entitlements"); const actual = iOSEntitlementsService.getPlatformsEntitlementsRelativePath( - projectData + projectData, ); assert.equal(actual, expected); }); @@ -84,7 +86,7 @@ describe("IOSEntitlements Service Tests", () => { projectData.platformsDir, "ios", "testApp", - "testApp.entitlements" + "testApp.entitlements", ); const actual = iOSEntitlementsService.getPlatformsEntitlementsPath(projectData); @@ -149,7 +151,7 @@ describe("IOSEntitlements Service Tests", () => { )).getDefaultAppEntitlementsPath(projectData); fs.writeFile( appResourcesEntitlement, - defaultAppResourcesEntitlementsContent + defaultAppResourcesEntitlementsContent, ); // act @@ -162,7 +164,9 @@ describe("IOSEntitlements Service Tests", () => { it("Merge uses the entitlements file from a Plugin", async () => { const pluginsService = injector.resolve("pluginsService"); - const testPluginFolderPath = temp.mkdirSync("testPlugin"); + const testPluginFolderPath = mkdtempSync( + path.join(tmpdir(), "testPlugin-"), + ); pluginsService.getAllInstalledPlugins = async () => [ { pluginPlatformsFolderPath: (platform: string) => { @@ -172,7 +176,7 @@ describe("IOSEntitlements Service Tests", () => { ]; const pluginAppEntitlementsPath = path.join( testPluginFolderPath, - IOSEntitlementsService.DefaultEntitlementsName + IOSEntitlementsService.DefaultEntitlementsName, ); fs.writeFile(pluginAppEntitlementsPath, defaultPluginEntitlementsContent); @@ -191,12 +195,14 @@ describe("IOSEntitlements Service Tests", () => { )).getDefaultAppEntitlementsPath(projectData); fs.writeFile( appResourcesEntitlement, - namedAppResourcesEntitlementsContent + namedAppResourcesEntitlementsContent, ); // setup plugin entitlements const pluginsService = injector.resolve("pluginsService"); - const testPluginFolderPath = temp.mkdirSync("testPlugin"); + const testPluginFolderPath = mkdtempSync( + path.join(tmpdir(), "testPlugin-"), + ); pluginsService.getAllInstalledPlugins = async () => [ { pluginPlatformsFolderPath: (platform: string) => { @@ -206,7 +212,7 @@ describe("IOSEntitlements Service Tests", () => { ]; const pluginAppEntitlementsPath = path.join( testPluginFolderPath, - IOSEntitlementsService.DefaultEntitlementsName + IOSEntitlementsService.DefaultEntitlementsName, ); fs.writeFile(pluginAppEntitlementsPath, defaultPluginEntitlementsContent); diff --git a/test/ios-project-service.ts b/test/ios-project-service.ts index 330976a257..a8f7a9e1a1 100644 --- a/test/ios-project-service.ts +++ b/test/ios-project-service.ts @@ -38,7 +38,9 @@ import { ProjectConfigServiceStub, } from "./stubs"; import { xcode } from "../lib/node/xcode"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; +import * as path from "path"; import { CocoaPodsPlatformManager } from "../lib/services/cocoapods-platform-manager"; import { XcodebuildService } from "../lib/services/ios/xcodebuild-service"; import { XcodebuildCommandService } from "../lib/services/ios/xcodebuild-command-service"; @@ -51,7 +53,6 @@ import { IXcconfigService } from "../lib/declarations"; import { IInjector } from "../lib/common/definitions/yok"; import { IStringDictionary, IFileSystem } from "../lib/common/declarations"; import { DevicePlatformsConstants } from "../lib/common/mobile/device-platforms-constants"; -temp.track(); class IOSSimulatorDiscoveryMock extends DeviceDiscovery { public async startLookingForDevices(): Promise { @@ -66,7 +67,7 @@ class IOSSimulatorDiscoveryMock extends DeviceDiscovery { function createTestInjector( projectPath: string, projectName: string, - xCode?: IXcode + xCode?: IXcode, ): IInjector { const testInjector = new yok.Yok(); testInjector.register("childProcess", ChildProcessLib.ChildProcess); @@ -80,7 +81,7 @@ function createTestInjector( testInjector.register("cocoapodsService", CocoaPodsService); testInjector.register( "iOSProjectService", - iOSProjectServiceLib.IOSProjectService + iOSProjectServiceLib.IOSProjectService, ); testInjector.register("iOSProvisionService", {}); testInjector.register("xcconfigService", XcconfigService); @@ -103,11 +104,11 @@ function createTestInjector( overridePods: false, }, }); - projectData.projectDir = temp.mkdirSync("projectDir"); + projectData.projectDir = mkdtempSync(path.join(tmpdir(), "projectDir-")); projectData.appDirectoryPath = join(projectData.projectDir, "app"); projectData.appResourcesDirectoryPath = join( projectData.appDirectoryPath, - "App_Resources" + "App_Resources", ); testInjector.register("projectData", projectData); testInjector.register("projectHelper", {}); @@ -175,7 +176,7 @@ function createTestInjector( return ""; } }, - } + }, ); testInjector.register("userSettingsService", { getSettingValue: async (settingName: string): Promise => undefined, @@ -197,7 +198,7 @@ function createTestInjector( testInjector.register("filesHashService", { hasChangesInShasums: ( oldPluginNativeHashes: IStringDictionary, - currentPluginNativeHashes: IStringDictionary + currentPluginNativeHashes: IStringDictionary, ) => true, generateHashes: async (files: string[]): Promise => ({}), }); @@ -205,7 +206,7 @@ function createTestInjector( extractPackage: async ( packageName: string, destinationDirectory: string, - options?: IPacoteExtractOptions + options?: IPacoteExtractOptions, ): Promise => undefined, }); testInjector.register("iOSExtensionsService", { @@ -248,7 +249,7 @@ function createTestInjector( function createPackageJson( testInjector: IInjector, projectPath: string, - projectName: string + projectName: string, ) { const packageJsonData = { name: projectName, @@ -291,7 +292,7 @@ describe("Cocoapods support", () => { it("adds а base Podfile", async () => { const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector(projectPath, projectName); const fs: IFileSystem = testInjector.resolve("fs"); @@ -333,7 +334,7 @@ describe("Cocoapods support", () => { projectData.appDirectoryPath, "App_Resources", "iOS", - "Podfile" + "Podfile", ); const pluginPodfileContent = [ "source 'https://github.com/CocoaPods/Specs.git'", @@ -348,13 +349,13 @@ describe("Cocoapods support", () => { basePodfileModuleName, basePodfilePath, projectData, - iOSProjectService.getPlatformData(projectData) + iOSProjectService.getPlatformData(projectData), ); const projectPodfilePath = join(platformsFolderPath, "Podfile"); assert.isTrue( fs.exists(projectPodfilePath), - `File ${projectPodfilePath} must exist as we have already applied Podfile to it.` + `File ${projectPodfilePath} must exist as we have already applied Podfile to it.`, ); const actualProjectPodfileContent = fs.readText(projectPodfilePath); @@ -385,17 +386,17 @@ describe("Cocoapods support", () => { basePodfileModuleName, basePodfilePath, projectData, - iOSProjectService.getPlatformData(projectData) + iOSProjectService.getPlatformData(projectData), ); assert.isFalse( fs.exists(projectPodfilePath), - `The projectPodfilePath (${projectPodfilePath}) must not exist when all Podfiles have been deleted and project is prepared again. (i.e. CLI should delete the project Podfile in this case)` + `The projectPodfilePath (${projectPodfilePath}) must not exist when all Podfiles have been deleted and project is prepared again. (i.e. CLI should delete the project Podfile in this case)`, ); }); it("adds plugin with Podfile", async () => { const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector(projectPath, projectName); const fs: IFileSystem = testInjector.resolve("fs"); @@ -418,13 +419,13 @@ describe("Cocoapods support", () => { const iOSProjectService = testInjector.resolve("iOSProjectService"); iOSProjectService.prepareFrameworks = ( pluginPlatformsFolderPath: string, - pluginData: IPluginData + pluginData: IPluginData, ): Promise => { return Promise.resolve(); }; iOSProjectService.prepareStaticLibs = ( pluginPlatformsFolderPath: string, - pluginData: IPluginData + pluginData: IPluginData, ): Promise => { return Promise.resolve(); }; @@ -440,15 +441,15 @@ describe("Cocoapods support", () => { }; iOSProjectService.savePbxProj = (): Promise => Promise.resolve(); - const pluginPath = temp.mkdirSync("pluginDirectory"); + const pluginPath = mkdtempSync(path.join(tmpdir(), "pluginDirectory-")); const samplePluginPlatformsFolderPath = join( pluginPath, "platforms", - "ios" + "ios", ); const pluginPodfilePath = join( samplePluginPlatformsFolderPath, - "Podfile" + "Podfile", ); const pluginPodfileContent = [ "source 'https://github.com/CocoaPods/Specs.git'", @@ -505,7 +506,7 @@ describe("Cocoapods support", () => { }); it("adds and removes plugin with Podfile", async () => { const projectName = "projectDirectory2"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector(projectPath, projectName); const fs: IFileSystem = testInjector.resolve("fs"); @@ -528,25 +529,25 @@ describe("Cocoapods support", () => { const iOSProjectService = testInjector.resolve("iOSProjectService"); iOSProjectService.prepareFrameworks = ( pluginPlatformsPath: string, - pluginData: IPluginData + pluginData: IPluginData, ): Promise => { return Promise.resolve(); }; iOSProjectService.prepareStaticLibs = ( pluginPlatformsPath: string, - pluginData: IPluginData + pluginData: IPluginData, ): Promise => { return Promise.resolve(); }; iOSProjectService.removeFrameworks = ( pluginPlatformsPath: string, - pluginData: IPluginData + pluginData: IPluginData, ): Promise => { return Promise.resolve(); }; iOSProjectService.removeStaticLibs = ( pluginPlatformsPath: string, - pluginData: IPluginData + pluginData: IPluginData, ): Promise => { return Promise.resolve(); }; @@ -568,15 +569,15 @@ describe("Cocoapods support", () => { }; iOSProjectService.savePbxProj = (): Promise => Promise.resolve(); - const pluginPath = temp.mkdirSync("pluginDirectory"); + const pluginPath = mkdtempSync(path.join(tmpdir(), "pluginDirectory-")); const samplePluginPlatformsFolderPath = join( pluginPath, "platforms", - "ios" + "ios", ); const pluginPodfilePath = join( samplePluginPlatformsFolderPath, - "Podfile" + "Podfile", ); const pluginPodfileContent = [ "source 'https://github.com/CocoaPods/Specs.git'", @@ -633,7 +634,7 @@ describe("Cocoapods support", () => { await iOSProjectService.removePluginNativeCode( samplePluginData, - projectData + projectData, ); assert.isFalse(fs.exists(projectPodfilePath)); @@ -658,13 +659,13 @@ describe("Cocoapods support", () => { describe("Source code support", () => { if (require("os").platform() !== "darwin") { console.log( - "Skipping Source code in plugin tests. They cannot work on windows" + "Skipping Source code in plugin tests. They cannot work on windows", ); } else { const getProjectWithoutPlugins = async (files: string[]) => { // Arrange const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector(projectPath, projectName, xcode); const fs: IFileSystem = testInjector.resolve("fs"); @@ -699,7 +700,7 @@ describe("Source code support", () => { const platformSpecificAppResourcesPath = join( projectData.appResourcesDirectoryPath, - iOSProjectService.getPlatformData(projectData).normalizedPlatformName + iOSProjectService.getPlatformData(projectData).normalizedPlatformName, ); files.forEach((file) => { @@ -711,7 +712,7 @@ describe("Source code support", () => { await iOSProjectService.prepareNativeSourceCode( "src", platformSpecificAppResourcesPath, - projectData + projectData, ); return pbxProj; @@ -719,11 +720,11 @@ describe("Source code support", () => { const preparePluginWithFiles = async ( files: string[], - prepareMethodToCall: string + prepareMethodToCall: string, ) => { // Arrange const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector(projectPath, projectName, xcode); const fs: IFileSystem = testInjector.resolve("fs"); @@ -756,7 +757,7 @@ describe("Source code support", () => { .forEach((methodName) => { iOSProjectService[methodName] = ( pluginPlatformsFolderPath: string, - pluginData: IPluginData + pluginData: IPluginData, ): Promise => { return Promise.resolve(); }; @@ -773,11 +774,11 @@ describe("Source code support", () => { return Promise.resolve(); }; - const pluginPath = temp.mkdirSync("pluginDirectory"); + const pluginPath = mkdtempSync(path.join(tmpdir(), "pluginDirectory-")); const samplePluginPlatformsFolderPath = join( pluginPath, "platforms", - "ios" + "ios", ); files.forEach((file) => { const fullPath = join(samplePluginPlatformsFolderPath, file); @@ -797,7 +798,7 @@ describe("Source code support", () => { // Act await iOSProjectService.preparePluginNativeCode( samplePluginData, - projectData + projectData, ); return pbxProj; @@ -817,7 +818,7 @@ describe("Source code support", () => { ]; const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const testInjector = createTestInjector(projectPath, projectName, xcode); const fs: IFileSystem = testInjector.resolve("fs"); @@ -828,7 +829,7 @@ describe("Source code support", () => { const pbxFileReference = pbxProj.hash.project.objects.PBXFileReference; const pbxFileReferenceValues = Object.keys(pbxFileReference).map( - (key) => pbxFileReference[key] + (key) => pbxFileReference[key], ); const buildPhaseFiles = pbxProj.hash.project.objects.PBXSourcesBuildPhase[ @@ -843,26 +844,26 @@ describe("Source code support", () => { assert.notEqual( pbxFileReferenceValues.indexOf(baseName), -1, - `${baseName} not added to PBXFileRefereces` + `${baseName} not added to PBXFileRefereces`, ); const buildPhaseFile = buildPhaseFiles.find((fileObject: any) => - fileObject.comment.startsWith(baseName) + fileObject.comment.startsWith(baseName), ); if (shouldBeAdded && !extname(baseName).startsWith(".h")) { assert.isDefined( buildPhaseFile, - `${baseName} not added to PBXSourcesBuildPhase` + `${baseName} not added to PBXSourcesBuildPhase`, ); assert.include( buildPhaseFile.comment, "in Sources", - `${baseName} must be added to Sources group` + `${baseName} must be added to Sources group`, ); } else { assert.isUndefined( buildPhaseFile, - `${baseName} is added to PBXSourcesBuildPhase, but it shouldn't have been.` + `${baseName} is added to PBXSourcesBuildPhase, but it shouldn't have been.`, ); } }); @@ -883,12 +884,12 @@ describe("Source code support", () => { const pbxProj = await preparePluginWithFiles( sourceFileNames, - "prepareNativeSourceCode" + "prepareNativeSourceCode", ); const pbxFileReference = pbxProj.hash.project.objects.PBXFileReference; const pbxFileReferenceValues = Object.keys(pbxFileReference).map( - (key) => pbxFileReference[key] + (key) => pbxFileReference[key], ); const buildPhaseFiles = pbxProj.hash.project.objects.PBXSourcesBuildPhase[ @@ -903,26 +904,26 @@ describe("Source code support", () => { assert.notEqual( pbxFileReferenceValues.indexOf(baseName), -1, - `${baseName} not added to PBXFileRefereces` + `${baseName} not added to PBXFileRefereces`, ); const buildPhaseFile = buildPhaseFiles.find((fileObject: any) => - fileObject.comment.startsWith(baseName) + fileObject.comment.startsWith(baseName), ); if (shouldBeAdded && !extname(baseName).startsWith(".h")) { assert.isDefined( buildPhaseFile, - `${baseName} not added to PBXSourcesBuildPhase` + `${baseName} not added to PBXSourcesBuildPhase`, ); assert.include( buildPhaseFile.comment, "in Sources", - `${baseName} must be added to Sources group` + `${baseName} must be added to Sources group`, ); } else { assert.isUndefined( buildPhaseFile, - `${baseName} was added to PBXSourcesBuildPhase, but it shouldn't have been` + `${baseName} was added to PBXSourcesBuildPhase, but it shouldn't have been`, ); } }); @@ -937,12 +938,12 @@ describe("Source code support", () => { const pbxProj = await preparePluginWithFiles( resFileNames, - "prepareResources" + "prepareResources", ); const pbxFileReference = pbxProj.hash.project.objects.PBXFileReference; const pbxFileReferenceValues = Object.keys(pbxFileReference).map( - (key) => pbxFileReference[key] + (key) => pbxFileReference[key], ); const buildPhaseFiles = pbxProj.hash.project.objects.PBXResourcesBuildPhase[ @@ -956,20 +957,20 @@ describe("Source code support", () => { assert.isTrue( pbxFileReferenceValues.indexOf(fileName) !== -1, - `Resource ${filename} not added to PBXFileRefereces` + `Resource ${filename} not added to PBXFileRefereces`, ); const buildPhaseFile = buildPhaseFiles.find((fileObject: any) => - fileObject.comment.startsWith(fileName) + fileObject.comment.startsWith(fileName), ); assert.isDefined( buildPhaseFile, - `${fileToCheck} not added to PBXResourcesBuildPhase` + `${fileToCheck} not added to PBXResourcesBuildPhase`, ); assert.include( buildPhaseFile.comment, "in Resources", - `${fileToCheck} must be added to Resources group` + `${fileToCheck} must be added to Resources group`, ); }); }); @@ -983,18 +984,22 @@ describe("Static libraries support", () => { } const projectName = "TNSApp"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const libraryName = "testLibrary1"; const headers = ["TestHeader1.h", "TestHeader2.h"]; const testInjector = createTestInjector(projectPath, projectName); const fs: IFileSystem = testInjector.resolve("fs"); const staticLibraryPath = join( - join(temp.mkdirSync("pluginDirectory"), "platforms", "ios") + join( + mkdtempSync(path.join(tmpdir(), "pluginDirectory-")), + "platforms", + "ios", + ), ); const staticLibraryHeadersPath = join( staticLibraryPath, "include", - libraryName + libraryName, ); it("checks validation of header files", async () => { @@ -1010,7 +1015,7 @@ describe("Static libraries support", () => { let error: any; try { await iOSProjectService.validateStaticLibrary( - join(staticLibraryPath, libraryName + ".a") + join(staticLibraryPath, libraryName + ".a"), ); } catch (err) { error = err; @@ -1019,7 +1024,7 @@ describe("Static libraries support", () => { assert.instanceOf( error, Error, - "Expect to fail, the .a file is not a static library." + "Expect to fail, the .a file is not a static library.", ); }); @@ -1033,11 +1038,11 @@ describe("Static libraries support", () => { iOSProjectService.generateModulemap(staticLibraryHeadersPath, libraryName); // Read the generated modulemap and verify it. let modulemap = fs.readFile( - join(staticLibraryHeadersPath, "module.modulemap") + join(staticLibraryHeadersPath, "module.modulemap"), ); const headerCommands = _.map(headers, (value) => `header "${value}"`); const modulemapExpectation = `module ${libraryName} { explicit module ${libraryName} { ${headerCommands.join( - " " + " ", )} } }`; assert.equal(modulemap, modulemapExpectation); @@ -1051,7 +1056,7 @@ describe("Static libraries support", () => { let error: any; try { modulemap = fs.readFile( - join(staticLibraryHeadersPath, "module.modulemap") + join(staticLibraryHeadersPath, "module.modulemap"), ); } catch (err) { error = err; @@ -1060,7 +1065,7 @@ describe("Static libraries support", () => { assert.instanceOf( error, Error, - "Expect to fail, there shouldn't be a module.modulemap file." + "Expect to fail, there shouldn't be a module.modulemap file.", ); }); }); @@ -1068,7 +1073,7 @@ describe("Static libraries support", () => { describe("Relative paths", () => { it("checks for correct calculation of relative paths", () => { const projectName = "projectDirectory"; - const projectPath = temp.mkdirSync(projectName); + const projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); const subpath = join(projectPath, "sub", "path"); const testInjector = createTestInjector(projectPath, projectName); @@ -1078,7 +1083,7 @@ describe("Relative paths", () => { const result = iOSProjectService.getLibSubpathRelativeToProjectPath( subpath, - projectData + projectData, ); assert.equal(result, join("..", "..", "sub", "path")); }); @@ -1087,14 +1092,14 @@ describe("Relative paths", () => { describe("Merge Project XCConfig files", () => { if (require("os").platform() !== "darwin") { console.log( - "Skipping 'Merge Project XCConfig files' tests. They can work only on macOS" + "Skipping 'Merge Project XCConfig files' tests. They can work only on macOS", ); return; } const assertPropertyValues = ( expected: any, xcconfigPath: string, - injector: IInjector + injector: IInjector, ) => { const service = injector.resolve("xcconfigService"); _.forOwn(expected, (value, key) => { @@ -1117,7 +1122,7 @@ describe("Merge Project XCConfig files", () => { beforeEach(() => { projectName = "projectDirectory"; - projectPath = temp.mkdirSync(projectName); + projectPath = mkdtempSync(path.join(tmpdir(), `${projectName}-`)); testInjector = createTestInjector(projectPath, projectName); iOSProjectService = testInjector.resolve("iOSProjectService"); @@ -1126,7 +1131,7 @@ describe("Merge Project XCConfig files", () => { projectData.appResourcesDirectoryPath = join( projectData.projectDir, "app", - "App_Resources" + "App_Resources", ); iOSEntitlementsService = testInjector.resolve("iOSEntitlementsService"); @@ -1134,7 +1139,7 @@ describe("Merge Project XCConfig files", () => { appResourcesXcconfigPath = join( projectData.appResourcesDirectoryPath, "iOS", - BUILD_XCCONFIG_FILE_NAME + BUILD_XCCONFIG_FILE_NAME, ); appResourceXCConfigContent = `CODE_SIGN_IDENTITY = iPhone Distribution // To build for device with XCode you need to specify your development team. More info: https://developer.apple.com/library/prerelease/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html @@ -1166,7 +1171,7 @@ describe("Merge Project XCConfig files", () => { _.each(destinationFilePaths, (destinationFilePath) => { assert.isTrue( fs.exists(destinationFilePath), - "Target build xcconfig is missing for release: " + release + "Target build xcconfig is missing for release: " + release, ); const expected = { ASSETCATALOG_COMPILER_APPICON_NAME: "AppIcon", @@ -1203,12 +1208,12 @@ describe("Merge Project XCConfig files", () => { _.each(destinationFilePaths, (destinationFilePath) => { assert.isTrue( fs.exists(destinationFilePath), - "Target build xcconfig is missing for release: " + release + "Target build xcconfig is missing for release: " + release, ); const expected = { CODE_SIGN_ENTITLEMENTS: iOSEntitlementsService.getPlatformsEntitlementsRelativePath( - projectData + projectData, ), }; assertPropertyValues(expected, destinationFilePath, testInjector); @@ -1232,7 +1237,7 @@ describe("Merge Project XCConfig files", () => { _.each(destinationFilePaths, (destinationFilePath) => { assert.isTrue( fs.exists(destinationFilePath), - `Target build xcconfig ${destinationFilePath} is missing.` + `Target build xcconfig ${destinationFilePath} is missing.`, ); const expected = { ASSETCATALOG_COMPILER_APPICON_NAME: "AppIcon", @@ -1253,7 +1258,7 @@ describe("Merge Project XCConfig files", () => { _.each(destinationFilePaths, (destinationFilePath) => { assert.isTrue( fs.exists(destinationFilePath), - `Target build xcconfig ${destinationFilePath} is missing.` + `Target build xcconfig ${destinationFilePath} is missing.`, ); const content = fs.readFile(destinationFilePath).toString(); assert.equal(content, ""); @@ -1265,7 +1270,7 @@ describe("handleNativeDependenciesChange", () => { it("ensure the correct order of pod install and merging pod's xcconfig file", async () => { const executedCocoapodsMethods: string[] = []; const projectPodfilePath = "my/test/project/platforms/ios/Podfile"; - const dir = temp.mkdirSync("myTestProjectPath"); + const dir = mkdtempSync(path.join(tmpdir(), "myTestProjectPath-")); const testInjector = createTestInjector(dir, "myTestProjectName"); const iOSProjectService = testInjector.resolve("iOSProjectService"); diff --git a/test/plugin-create.ts b/test/plugin-create.ts index af0f36a028..fdb9e68a93 100644 --- a/test/plugin-create.ts +++ b/test/plugin-create.ts @@ -4,13 +4,13 @@ import { CreatePluginCommand } from "../lib/commands/plugin/create-plugin"; import { assert } from "chai"; import * as helpers from "../lib/common/helpers"; import * as sinon from "sinon"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import * as path from "path"; import * as util from "util"; import { IOptions } from "../lib/declarations"; import { IInjector } from "../lib/common/definitions/yok"; import { IDictionary } from "../lib/common/declarations"; -temp.track(); interface IPacoteOutput { packageName: string; @@ -123,12 +123,10 @@ describe("Plugin create command tests", () => { const confirmQuestions: IDictionary = {}; strings[createPluginCommand.userMessage] = dummyUser; strings[createPluginCommand.nameMessage] = dummyName; - confirmQuestions[ - createPluginCommand.includeTypeScriptDemoMessage - ] = createDemoProjectAnswer; - confirmQuestions[ - createPluginCommand.includeAngularDemoMessage - ] = createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeTypeScriptDemoMessage] = + createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeAngularDemoMessage] = + createDemoProjectAnswer; prompter.expect({ strings: strings, @@ -144,12 +142,10 @@ describe("Plugin create command tests", () => { const strings: IDictionary = {}; const confirmQuestions: IDictionary = {}; strings[createPluginCommand.nameMessage] = dummyName; - confirmQuestions[ - createPluginCommand.includeTypeScriptDemoMessage - ] = createDemoProjectAnswer; - confirmQuestions[ - createPluginCommand.includeAngularDemoMessage - ] = createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeTypeScriptDemoMessage] = + createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeAngularDemoMessage] = + createDemoProjectAnswer; prompter.expect({ strings: strings, @@ -166,12 +162,10 @@ describe("Plugin create command tests", () => { const confirmQuestions: IDictionary = {}; strings[createPluginCommand.userMessage] = dummyUser; - confirmQuestions[ - createPluginCommand.includeTypeScriptDemoMessage - ] = createDemoProjectAnswer; - confirmQuestions[ - createPluginCommand.includeAngularDemoMessage - ] = createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeTypeScriptDemoMessage] = + createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeAngularDemoMessage] = + createDemoProjectAnswer; prompter.expect({ strings, @@ -188,9 +182,8 @@ describe("Plugin create command tests", () => { const confirmQuestions: IDictionary = {}; strings[createPluginCommand.userMessage] = dummyUser; strings[createPluginCommand.nameMessage] = dummyName; - confirmQuestions[ - createPluginCommand.includeAngularDemoMessage - ] = createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeAngularDemoMessage] = + createDemoProjectAnswer; prompter.expect({ strings: strings, @@ -208,9 +201,8 @@ describe("Plugin create command tests", () => { strings[createPluginCommand.userMessage] = dummyUser; strings[createPluginCommand.nameMessage] = dummyName; - confirmQuestions[ - createPluginCommand.includeTypeScriptDemoMessage - ] = createDemoProjectAnswer; + confirmQuestions[createPluginCommand.includeTypeScriptDemoMessage] = + createDemoProjectAnswer; prompter.expect({ strings: strings, @@ -236,7 +228,7 @@ describe("Plugin create command tests", () => { beforeEach(() => { sandbox = sinon.createSandbox(); - const workingPath = temp.mkdirSync("test_plugin"); + const workingPath = mkdtempSync(path.join(tmpdir(), "test_plugin-")); options.path = workingPath; projectPath = path.join(workingPath, dummyProjectName); const fsService = testInjector.resolve("fs"); @@ -285,8 +277,8 @@ describe("Plugin create command tests", () => { executePromise, util.format( createPluginCommand.pathAlreadyExistsMessageTemplate, - projectPath - ) + projectPath, + ), ); assert(fsSpy.notCalled); }); diff --git a/test/plugins-service.ts b/test/plugins-service.ts index 99d3aede71..0ea539bfdd 100644 --- a/test/plugins-service.ts +++ b/test/plugins-service.ts @@ -31,8 +31,9 @@ import { ProjectFilesProvider } from "../lib/providers/project-files-provider"; import { DevicePlatformsConstants } from "../lib/common/mobile/device-platforms-constants"; import { SettingsService } from "../lib/common/test/unit-tests/stubs"; import * as StaticConfigLib from "../lib/config"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import * as path from "path"; -import * as temp from "temp"; import * as _ from "lodash"; import { PLUGINS_BUILD_DATA_FILENAME, PlatformTypes } from "../lib/constants"; // PACKAGE_JSON_FILE_NAME, CONFIG_FILE_NAME_JS, CONFIG_FILE_NAME_TS import { GradleCommandService } from "../lib/services/android/gradle-command-service"; @@ -51,7 +52,6 @@ import { import { FileSystem } from "../lib/common/file-system"; import { ProjectHelper } from "../lib/common/project-helper"; // import { basename } from 'path'; -temp.track(); let isErrorThrown = false; @@ -71,7 +71,7 @@ function createTestInjector() { testInjector.register("packageManager", PackageManager); testInjector.register( "projectConfigService", - stubs.PackageInstallationManagerStub + stubs.PackageInstallationManagerStub, ); testInjector.register("npm", NodePackageManager); testInjector.register("yarn", YarnPackageManager); @@ -149,17 +149,17 @@ function createTestInjector() { Promise.resolve(), interpolatePluginVariables: ( pluginData: IPluginData, - pluginConfigurationFileContent: string + pluginConfigurationFileContent: string, ) => Promise.resolve(pluginConfigurationFileContent), }); testInjector.register( "packageInstallationManager", - PackageInstallationManager + PackageInstallationManager, ); testInjector.register( "localToDevicePathDataFactory", - LocalToDevicePathDataFactory + LocalToDevicePathDataFactory, ); testInjector.register("mobileHelper", MobileHelper); testInjector.register("projectFilesProvider", ProjectFilesProvider); @@ -176,19 +176,19 @@ function createTestInjector() { testInjector.register("extensibilityService", {}); testInjector.register( "androidPluginBuildService", - stubs.AndroidPluginBuildServiceStub + stubs.AndroidPluginBuildServiceStub, ); testInjector.register("analyticsSettingsService", {}); testInjector.register( "androidResourcesMigrationService", - stubs.AndroidResourcesMigrationServiceStub + stubs.AndroidResourcesMigrationServiceStub, ); testInjector.register("platformEnvironmentRequirements", {}); testInjector.register("filesHashService", { hasChangesInShasums: ( oldPluginNativeHashes: IStringDictionary, - currentPluginNativeHashes: IStringDictionary + currentPluginNativeHashes: IStringDictionary, ) => true, generateHashes: async (files: string[]): Promise => ({}), }); @@ -208,7 +208,7 @@ function createTestInjector() { projectData.projectDir, "node_modules", packageToInstall, - "package.json" + "package.json", ); } @@ -221,7 +221,7 @@ function createTestInjector() { extractPackage: async ( packageName: string, destinationDirectory: string, - options?: IPacoteExtractOptions + options?: IPacoteExtractOptions, ): Promise => undefined, }); testInjector.register("gradleCommandService", GradleCommandService); @@ -236,7 +236,7 @@ function createTestInjector() { "projectConfigService", stubs.ProjectConfigServiceStub.initWithConfig({ id: "org.nativescript.Test", - }) + }), ); return testInjector; @@ -244,7 +244,7 @@ function createTestInjector() { function createProjectFile(testInjector: IInjector): string { const fs = testInjector.resolve("fs") as FileSystem; - const tempFolder = temp.mkdirSync("pluginsService"); + const tempFolder = mkdtempSync(path.join(tmpdir(), "pluginsService-")); const options = testInjector.resolve("options"); options.path = tempFolder; @@ -274,11 +274,11 @@ function createProjectFile(testInjector: IInjector): string { function mockBeginCommand( testInjector: IInjector, - expectedErrorMessage: string + expectedErrorMessage: string, ) { const errors = testInjector.resolve("errors"); errors.beginCommand = async ( - action: () => Promise + action: () => Promise, ): Promise => { try { return await action(); @@ -294,7 +294,7 @@ async function addPluginWhenExpectingToFail( testInjector: IInjector, plugin: string, expectedErrorMessage: string, - command?: string + command?: string, ) { createProjectFile(testInjector); @@ -332,7 +332,7 @@ describe("Plugins service", () => { testInjector, null, "You must specify plugin name.", - command + command, ); }); it("fails when invalid nativescript plugin name is specified", async () => { @@ -340,7 +340,7 @@ describe("Plugins service", () => { testInjector, "lodash", "lodash is not a valid NativeScript plugin. Verify that the plugin package.json file contains a nativescript key and try again.", - command + command, ); }); it("fails when the plugin is already installed", async () => { @@ -358,14 +358,14 @@ describe("Plugins service", () => { const pluginsService: IPluginsService = testInjector.resolve("pluginsService"); pluginsService.getAllInstalledPlugins = async ( - projData: IProjectData + projData: IProjectData, ) => { return [{ name: "plugin1" }]; }; mockBeginCommand( testInjector, - "Exception: " + 'Plugin "plugin1" is already installed.' + "Exception: " + 'Plugin "plugin1" is already installed.', ); isErrorThrown = false; @@ -397,14 +397,14 @@ describe("Plugins service", () => { const fs = testInjector.resolve("fs"); fs.writeJson( path.join(pluginFolderPath, "package.json"), - pluginJsonData + pluginJsonData, ); // Adds android platform fs.createDirectory(path.join(projectFolder, "platforms")); fs.createDirectory(path.join(projectFolder, "platforms", "android")); fs.createDirectory( - path.join(projectFolder, "platforms", "android", "app") + path.join(projectFolder, "platforms", "android", "app"), ); // Mock logger.warn @@ -420,21 +420,21 @@ describe("Plugins service", () => { const projectData: IProjectData = testInjector.resolve("projectData"); projectData.initializeProjectData(); pluginsService.getAllInstalledPlugins = async ( - projData: IProjectData + projData: IProjectData, ) => { return [{ name: "" }]; }; // Mock platformsDataService const platformsDataService = testInjector.resolve( - "platformsDataService" + "platformsDataService", ); platformsDataService.getPlatformData = (platform: string) => { return { appDestinationDirectoryPath: path.join( projectFolder, "platforms", - "android" + "android", ), frameworkPackageName: "tns-android", normalizedPlatformName: "Android", @@ -443,7 +443,7 @@ describe("Plugins service", () => { const projectDataService = testInjector.resolve("projectDataService"); projectDataService.getRuntimePackage = ( projectDir: string, - platform: PlatformTypes + platform: PlatformTypes, ) => { return { name: "tns-android", @@ -462,7 +462,7 @@ describe("Plugins service", () => { const pluginsService: IPluginsService = testInjector.resolve("pluginsService"); pluginsService.getAllInstalledPlugins = async ( - projectData: IProjectData + projectData: IProjectData, ) => { return [{ name: "" }]; }; @@ -488,14 +488,14 @@ describe("Plugins service", () => { // Asserts that the plugin is added in package.json file const packageJsonContent = fs.readJson( - path.join(projectFolder, "package.json") + path.join(projectFolder, "package.json"), ); const actualDependencies = packageJsonContent.dependencies; const expectedDependencies = { plugin1: "^1.0.3" }; const expectedDependenciesExact = { plugin1: "1.0.3" }; assert.isTrue( _.isEqual(actualDependencies, expectedDependencies) || - _.isEqual(actualDependencies, expectedDependenciesExact) + _.isEqual(actualDependencies, expectedDependenciesExact), ); }); it("adds plugin by name and version", async () => { @@ -505,7 +505,7 @@ describe("Plugins service", () => { const pluginsService: IPluginsService = testInjector.resolve("pluginsService"); pluginsService.getAllInstalledPlugins = async ( - projectData: IProjectData + projectData: IProjectData, ) => { return [{ name: "" }]; }; @@ -531,14 +531,14 @@ describe("Plugins service", () => { // Assert that the plugin is added in package.json file const packageJsonContent = fs.readJson( - path.join(projectFolder, "package.json") + path.join(projectFolder, "package.json"), ); const actualDependencies = packageJsonContent.dependencies; const expectedDependencies = { plugin1: "^1.0.0" }; const expectedDependenciesExact = { plugin1: "1.0.0" }; assert.isTrue( _.isEqual(actualDependencies, expectedDependencies) || - _.isEqual(actualDependencies, expectedDependenciesExact) + _.isEqual(actualDependencies, expectedDependenciesExact), ); }); it("adds plugin by local path", async () => { @@ -556,13 +556,13 @@ describe("Plugins service", () => { const fs = testInjector.resolve("fs"); fs.writeJson( path.join(pluginFolderPath, "package.json"), - pluginJsonData + pluginJsonData, ); const pluginsService: IPluginsService = testInjector.resolve("pluginsService"); pluginsService.getAllInstalledPlugins = async ( - projectData: IProjectData + projectData: IProjectData, ) => { return [{ name: "" }]; }; @@ -580,7 +580,7 @@ describe("Plugins service", () => { const pluginFiles = ["package.json"]; _.each(pluginFiles, (pluginFile) => { assert.isTrue( - fs.exists(path.join(nodeModulesFolderPath, pluginName, pluginFile)) + fs.exists(path.join(nodeModulesFolderPath, pluginName, pluginFile)), ); }); }); @@ -605,13 +605,13 @@ describe("Plugins service", () => { const fs = testInjector.resolve("fs"); fs.writeJson( path.join(pluginFolderPath, "package.json"), - pluginJsonData + pluginJsonData, ); const pluginsService: IPluginsService = testInjector.resolve("pluginsService"); pluginsService.getAllInstalledPlugins = async ( - projectData: IProjectData + projectData: IProjectData, ) => { return [{ name: "" }]; }; @@ -632,9 +632,9 @@ describe("Plugins service", () => { nodeModulesFolderPath, pluginName, "node_modules", - "grunt" - ) - ) + "grunt", + ), + ), ); }); it("install dev dependencies when --production option is not specified", async () => { @@ -658,13 +658,13 @@ describe("Plugins service", () => { const fs = testInjector.resolve("fs"); fs.writeJson( path.join(pluginFolderPath, "package.json"), - pluginJsonData + pluginJsonData, ); const pluginsService: IPluginsService = testInjector.resolve("pluginsService"); pluginsService.getAllInstalledPlugins = async ( - projectData: IProjectData + projectData: IProjectData, ) => { return [{ name: "" }]; }; @@ -702,7 +702,7 @@ describe("Plugins service", () => { platformProjectService: { preparePluginNativeCode: async ( pluginData: IPluginData, - projData: IProjectData + projData: IProjectData, ) => { testData.isPreparePluginNativeCodeCalled = true; }, @@ -723,7 +723,7 @@ describe("Plugins service", () => { unitTestsInjector.register("filesHashService", { hasChangesInShasums: ( oldPluginNativeHashes: IStringDictionary, - currentPluginNativeHashes: IStringDictionary + currentPluginNativeHashes: IStringDictionary, ) => !!opts.hasChangesInShasums, generateHashes: async (files: string[]): Promise => testData.isPreparePluginNativeCodeCalled && @@ -761,7 +761,7 @@ describe("Plugins service", () => { unitTestsInjector.register("mobileHelper", MobileHelper); unitTestsInjector.register( "devicePlatformsConstants", - DevicePlatformsConstants + DevicePlatformsConstants, ); unitTestsInjector.register("nodeModulesDependenciesBuilder", {}); unitTestsInjector.register("tempService", stubs.TempServiceStub); @@ -854,7 +854,7 @@ describe("Plugins service", () => { unitTestsInjector.register("mobileHelper", MobileHelper); unitTestsInjector.register( "devicePlatformsConstants", - DevicePlatformsConstants + DevicePlatformsConstants, ); unitTestsInjector.register("nodeModulesDependenciesBuilder", {}); unitTestsInjector.register("tempService", stubs.TempServiceStub); @@ -881,7 +881,7 @@ describe("Plugins service", () => { unitTestsInjector.resolve(PluginsService); const pluginData = (pluginsService).convertToPluginData( dataFromPluginPackageJson, - "my project dir" + "my project dir", ); // Remove the comparison of a function delete pluginData["pluginPlatformsFolderPath"]; @@ -901,35 +901,35 @@ describe("Plugins service", () => { unitTestsInjector.resolve(PluginsService); const pluginData = (pluginsService).convertToPluginData( dataFromPluginPackageJson, - "my project dir" + "my project dir", ); const expectediOSPath = path.join(pluginDir, "platforms", "ios"); const expectedAndroidPath = path.join(pluginDir, "platforms", "android"); assert.equal( pluginData.pluginPlatformsFolderPath("iOS"), - expectediOSPath + expectediOSPath, ); assert.equal( pluginData.pluginPlatformsFolderPath("ios"), - expectediOSPath + expectediOSPath, ); assert.equal( pluginData.pluginPlatformsFolderPath("IOS"), - expectediOSPath + expectediOSPath, ); assert.equal( pluginData.pluginPlatformsFolderPath("Android"), - expectedAndroidPath + expectedAndroidPath, ); assert.equal( pluginData.pluginPlatformsFolderPath("android"), - expectedAndroidPath + expectedAndroidPath, ); assert.equal( pluginData.pluginPlatformsFolderPath("ANDROID"), - expectedAndroidPath + expectedAndroidPath, ); }); }); @@ -1142,7 +1142,7 @@ describe("Plugins service", () => { This framework comes from nativescript-ui-core plugin, which is installed multiple times in node_modules:\n` + "* Path: /Users/username/projectDir/node_modules/nativescript-ui-core, version: 3.0.0\n" + "* Path: /Users/username/projectDir/node_modules/nativescript-ui-listview/node_modules/nativescript-ui-core, version: 4.0.0\n\n" + - `Probably you need to update your dependencies, remove node_modules and try again.` + `Probably you need to update your dependencies, remove node_modules and try again.`, ), }, { @@ -1182,13 +1182,13 @@ This framework comes from nativescript-ui-core plugin, which is installed multip `Detected the framework a.framework is installed from multiple plugins at locations:\n` + "/Users/username/projectDir/node_modules/nativescript-ui-core-forked/platforms/ios/a.framework\n".replace( /\//g, - path.sep + path.sep, ) + "/Users/username/projectDir/node_modules/nativescript-ui-core/platforms/ios/a.framework\n\n".replace( /\//g, - path.sep + path.sep, ) + - `Probably you need to update your dependencies, remove node_modules and try again.` + `Probably you need to update your dependencies, remove node_modules and try again.`, ), }, ]; @@ -1205,15 +1205,15 @@ This framework comes from nativescript-ui-core plugin, which is installed multip pluginsService.getAllProductionPlugins( { projectDir: "projectDir" }, "ios", - testCase.inputDependencies + testCase.inputDependencies, ), - testCase.expectedOutput.message + testCase.expectedOutput.message, ); } else { const plugins = pluginsService.getAllProductionPlugins( { projectDir: "projectDir" }, "ios", - testCase.inputDependencies + testCase.inputDependencies, ); if (testCase.expectedWarning) { @@ -1273,7 +1273,7 @@ This framework comes from nativescript-ui-core plugin, which is installed multip pluginsService.getAllProductionPlugins( { projectDir: "projectDir" }, "ios", - inputDependencies + inputDependencies, ); }); @@ -1284,20 +1284,20 @@ This framework comes from nativescript-ui-core plugin, which is installed multip assert.equal( logger.warnOutput, util.format(expectedWarnMessage, "6.3.0"), - "The warn message must be shown only once - the result of the private method must be cached as input dependencies have not changed" + "The warn message must be shown only once - the result of the private method must be cached as input dependencies have not changed", ); inputDependencies[0].version = "1.0.0"; inputDependencies[1].version = "1.0.0"; pluginsService.getAllProductionPlugins( { projectDir: "projectDir" }, "ios", - inputDependencies + inputDependencies, ); assert.equal( logger.warnOutput, util.format(expectedWarnMessage, "6.3.0") + util.format(expectedWarnMessage, "1.0.0"), - "When something in input dependencies change, the cached value shouldn't be taken into account" + "When something in input dependencies change, the cached value shouldn't be taken into account", ); }); }); diff --git a/test/project-changes-service.ts b/test/project-changes-service.ts index 97784fdd31..0085c763d4 100644 --- a/test/project-changes-service.ts +++ b/test/project-changes-service.ts @@ -1,6 +1,7 @@ -import * as path from "path"; import { BaseServiceTest } from "./base-service-test"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; +import * as path from "path"; import * as _ from "lodash"; import { assert } from "chai"; import { PlatformsDataService } from "../lib/services/platforms-data-service"; @@ -17,7 +18,6 @@ import { } from "../lib/definitions/project-changes"; // start tracking temporary folders/files -temp.track(); class ProjectChangesServiceTest extends BaseServiceTest { public projectDir: string; @@ -27,7 +27,7 @@ class ProjectChangesServiceTest extends BaseServiceTest { } initInjector(): void { - this.projectDir = temp.mkdirSync("projectDir"); + this.projectDir = mkdtempSync(path.join(tmpdir(), "projectDir-")); this.injector.register("projectData", { projectDir: this.projectDir, }); @@ -72,7 +72,7 @@ class ProjectChangesServiceTest extends BaseServiceTest { projectRoot: path.join( this.projectDir, "platforms", - platform.toLowerCase() + platform.toLowerCase(), ), platformProjectService: { checkForChanges: async (changesInfo: IProjectChangesInfo) => { @@ -90,11 +90,11 @@ describe("Project Changes Service Tests", () => { const platformsDir = path.join( serviceTest.projectDir, - Constants.PLATFORMS_DIR_NAME + Constants.PLATFORMS_DIR_NAME, ); serviceTest.getNativeProjectDataService.getPlatformData = ( - platform: string + platform: string, ) => { if (platform.toLowerCase() === "ios") { return { @@ -127,14 +127,14 @@ describe("Project Changes Service Tests", () => { for (const platform of ["ios", "android"]) { const actualPrepareInfoPath = serviceTest.projectChangesService.getPrepareInfoFilePath( - serviceTest.getPlatformData(platform) + serviceTest.getPlatformData(platform), ); const expectedPrepareInfoPath = path.join( serviceTest.projectDir, Constants.PLATFORMS_DIR_NAME, platform, - ".nsprepareinfo" + ".nsprepareinfo", ); assert.equal(actualPrepareInfoPath, expectedPrepareInfoPath); } @@ -145,7 +145,7 @@ describe("Project Changes Service Tests", () => { it("Returns empty if file path doesn't exists", () => { for (const platform of ["ios", "android"]) { const projectInfo = serviceTest.projectChangesService.getPrepareInfo( - serviceTest.getPlatformData(platform) + serviceTest.getPlatformData(platform), ); assert.isNull(projectInfo); @@ -160,7 +160,7 @@ describe("Project Changes Service Tests", () => { serviceTest.projectDir, Constants.PLATFORMS_DIR_NAME, platform, - ".nsprepareinfo" + ".nsprepareinfo", ); const expectedPrepareInfo: IPrepareInfo = { time: new Date().toString(), @@ -179,7 +179,7 @@ describe("Project Changes Service Tests", () => { // act const actualPrepareInfo = serviceTest.projectChangesService.getPrepareInfo( - serviceTest.getPlatformData(platform) + serviceTest.getPlatformData(platform), ); // assert @@ -197,11 +197,11 @@ describe("Project Changes Service Tests", () => { { provision: undefined, teamId: undefined, - } + }, ); assert.isTrue( !!iOSChanges.signingChanged, - "iOS signingChanged expected to be true" + "iOS signingChanged expected to be true", ); }); }); @@ -215,12 +215,12 @@ describe("Project Changes Service Tests", () => { { nativePlatformStatus: Constants.NativePlatformStatus.requiresPrepare, - } + }, ); const actualPrepareInfo = serviceTest.projectChangesService.getPrepareInfo( - serviceTest.getPlatformData(platform) + serviceTest.getPlatformData(platform), ); assert.deepStrictEqual(actualPrepareInfo, { @@ -234,15 +234,15 @@ describe("Project Changes Service Tests", () => { await serviceTest.projectChangesService.checkForChanges( serviceTest.getPlatformData(platform), serviceTest.projectData, - {} + {}, ); await serviceTest.projectChangesService.savePrepareInfo( serviceTest.getPlatformData(platform), serviceTest.projectData, - null + null, ); const prepareInfo = serviceTest.projectChangesService.getPrepareInfo( - serviceTest.getPlatformData(platform) + serviceTest.getPlatformData(platform), ); await serviceTest.projectChangesService.setNativePlatformStatus( @@ -251,12 +251,12 @@ describe("Project Changes Service Tests", () => { { nativePlatformStatus: Constants.NativePlatformStatus.alreadyPrepared, - } + }, ); const actualPrepareInfo = serviceTest.projectChangesService.getPrepareInfo( - serviceTest.getPlatformData(platform) + serviceTest.getPlatformData(platform), ); prepareInfo.nativePlatformStatus = Constants.NativePlatformStatus.alreadyPrepared; @@ -275,24 +275,24 @@ describe("Project Changes Service Tests", () => { await serviceTest.projectChangesService.checkForChanges( serviceTest.getPlatformData(platform), serviceTest.projectData, - {} + {}, ); await serviceTest.projectChangesService.setNativePlatformStatus( serviceTest.getPlatformData(platform), serviceTest.projectData, - { nativePlatformStatus: nativePlatformStatus } + { nativePlatformStatus: nativePlatformStatus }, ); const actualPrepareInfo = serviceTest.projectChangesService.getPrepareInfo( - serviceTest.getPlatformData(platform) + serviceTest.getPlatformData(platform), ); assert.deepStrictEqual(actualPrepareInfo, { nativePlatformStatus: nativePlatformStatus, }); } }); - } + }, ); }); }); diff --git a/test/services/android-plugin-build-service.ts b/test/services/android-plugin-build-service.ts index 8c67eebf3d..c2107cf4c1 100644 --- a/test/services/android-plugin-build-service.ts +++ b/test/services/android-plugin-build-service.ts @@ -9,7 +9,8 @@ import { getShortPluginName } from "../../lib/common/helpers"; import * as FsLib from "../../lib/common/file-system"; import * as path from "path"; import * as stubs from "../stubs"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import { IFileSystem, ISpawnResult, @@ -19,8 +20,6 @@ import { IPluginBuildOptions } from "../../lib/definitions/android-plugin-migrat import { IInjector } from "../../lib/common/definitions/yok"; import { IFilesHashService } from "../../lib/definitions/files-hash-service"; -temp.track(); - describe("androidPluginBuildService", () => { const pluginName = "my-plugin"; const shortPluginName = getShortPluginName(pluginName); @@ -47,8 +46,12 @@ describe("androidPluginBuildService", () => { }): IPluginBuildOptions { options = options || {}; spawnFromEventCalled = false; - tempFolder = temp.mkdirSync("androidPluginBuildService-temp"); - pluginFolder = temp.mkdirSync("androidPluginBuildService-plugin"); + tempFolder = mkdtempSync( + path.join(tmpdir(), "androidPluginBuildService-temp-"), + ); + pluginFolder = mkdtempSync( + path.join(tmpdir(), "androidPluginBuildService-plugin-"), + ); createTestInjector(options); setupPluginFolders(options); @@ -80,7 +83,7 @@ describe("androidPluginBuildService", () => { "build", "outputs", "aar", - finalAarName + finalAarName, ); fs.writeFile(aar, ""); spawnFromEventCalled = command.indexOf("gradlew") !== -1; @@ -91,15 +94,15 @@ describe("androidPluginBuildService", () => { testInjector.register("projectData", stubs.ProjectDataStub); testInjector.register("filesHashService", { generateHashes: async ( - files: string[] + files: string[], ): Promise => ({}), getChanges: async ( files: string[], - oldHashes: IStringDictionary + oldHashes: IStringDictionary, ): Promise => ({}), hasChangesInShasums: ( oldHashes: IStringDictionary, - newHashes: IStringDictionary + newHashes: IStringDictionary, ): boolean => !!options.hasChangesInShasums, }); @@ -109,7 +112,7 @@ describe("androidPluginBuildService", () => { fs = testInjector.resolve("fs"); androidBuildPluginService = testInjector.resolve( - AndroidPluginBuildService + AndroidPluginBuildService, ); // initialize dummy projectData @@ -219,7 +222,7 @@ dependencies { if (options.addManifest) { fs.writeFile( path.join(pluginFolder, "AndroidManifest.xml"), - validAndroidManifestContent + validAndroidManifestContent, ); } @@ -228,7 +231,7 @@ dependencies { fs.createDirectory(valuesFolder); fs.writeFile( path.join(valuesFolder, "strings.xml"), - validStringsXmlContent + validStringsXmlContent, ); } @@ -241,7 +244,7 @@ dependencies { if (options.addLegacyIncludeGradle || options.addIncludeGradle) { fs.writeFile( path.join(pluginFolder, INCLUDE_GRADLE_NAME), - validIncludeGradleContent + validIncludeGradleContent, ); } @@ -329,7 +332,7 @@ dependencies { await androidBuildPluginService.buildAar(config); const actualAndroidVersion = getGradleAndroidPluginVersion( - expectedAndroidVersion + expectedAndroidVersion, ); const actualGradleVersion = getGradleVersion(); @@ -353,7 +356,7 @@ dependencies { await androidBuildPluginService.buildAar(config); const actualAndroidVersion = getGradleAndroidPluginVersion( - expectedAndroidVersion + expectedAndroidVersion, ); const actualGradleVersion = getGradleVersion(); @@ -377,7 +380,7 @@ dependencies { await androidBuildPluginService.buildAar(config); const actualAndroidVersion = getGradleAndroidPluginVersion( - expectedAndroidVersion + expectedAndroidVersion, ); const actualGradleVersion = getGradleVersion(); @@ -399,14 +402,14 @@ dependencies { await androidBuildPluginService.buildAar(config); const actualAndroidVersion = getGradleAndroidPluginVersion( - AndroidBuildDefaults.GradleAndroidPluginVersion + AndroidBuildDefaults.GradleAndroidPluginVersion, ); const actualGradleVersion = getGradleVersion(); assert.equal(actualGradleVersion, AndroidBuildDefaults.GradleVersion); assert.equal( actualAndroidVersion, - AndroidBuildDefaults.GradleAndroidPluginVersion + AndroidBuildDefaults.GradleAndroidPluginVersion, ); assert.isTrue(spawnFromEventCalled); }); @@ -418,11 +421,10 @@ dependencies { addLegacyIncludeGradle: true, }); - const isMigrated = await androidBuildPluginService.migrateIncludeGradle( - config - ); + const isMigrated = + await androidBuildPluginService.migrateIncludeGradle(config); const includeGradleContent = fs.readText( - path.join(pluginFolder, INCLUDE_GRADLE_NAME).toString() + path.join(pluginFolder, INCLUDE_GRADLE_NAME).toString(), ); const areProductFlavorsRemoved = includeGradleContent.indexOf("productFlavors") === -1; @@ -436,9 +438,8 @@ dependencies { addIncludeGradle: true, }); - const isMigrated = await androidBuildPluginService.migrateIncludeGradle( - config - ); + const isMigrated = + await androidBuildPluginService.migrateIncludeGradle(config); assert.isFalse(isMigrated); }); @@ -446,7 +447,7 @@ dependencies { function getGradleAndroidPluginVersion(expected?: string) { const gradleWrappersContent = fs.readText( - path.join(tempFolder, shortPluginName, "build.gradle") + path.join(tempFolder, shortPluginName, "build.gradle"), ); const androidVersionRegex = /com\.android\.tools\.build\:gradle\:(.*)['"]/g; const androidVersion = androidVersionRegex.exec(gradleWrappersContent)[1]; @@ -466,8 +467,8 @@ dependencies { shortPluginName, "gradle", "wrapper", - "gradle-wrapper.properties" - ) + "gradle-wrapper.properties", + ), ); const gradleVersionRegex = /gradle\-(.*)\-bin\.zip\r?\n/g; const gradleVersion = gradleVersionRegex.exec(buildGradleContent)[1]; diff --git a/test/services/android/gradle-build-args-service.ts b/test/services/android/gradle-build-args-service.ts index a0e2ff5cd6..3f2a25f0af 100644 --- a/test/services/android/gradle-build-args-service.ts +++ b/test/services/android/gradle-build-args-service.ts @@ -2,12 +2,12 @@ import { Yok } from "../../../lib/common/yok"; import { GradleBuildArgsService } from "../../../lib/services/android/gradle-build-args-service"; import * as stubs from "../../stubs"; import { assert } from "chai"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import { IGradleBuildArgsService } from "../../../lib/definitions/gradle"; import { IAndroidBuildData } from "../../../lib/definitions/build"; import { IInjector } from "../../../lib/common/definitions/yok"; import * as path from "path"; -temp.track(); function createTestInjector(): IInjector { const injector = new Yok(); @@ -37,8 +37,8 @@ async function executeTests( testCases: any[], testFunction: ( gradleBuildArgsService: IGradleBuildArgsService, - buildData: IAndroidBuildData - ) => Promise + buildData: IAndroidBuildData, + ) => Promise, ) { for (const testCase of testCases) { it(testCase.name, async () => { @@ -51,21 +51,22 @@ async function executeTests( const gradleBuildArgsService = injector.resolve("gradleBuildArgsService"); const args = await testFunction( gradleBuildArgsService, - testCase.buildConfig + testCase.buildConfig, ); assert.deepStrictEqual(args, testCase.expectedResult); }); } } -const ksPath = temp.path({ prefix: "ksPath" }); +const ksDir = mkdtempSync(path.join(tmpdir(), "ksPath-")); +const ksPath = path.join(ksDir, "keystore.jks"); const expectedInfoLoggingArgs = ["--quiet"]; const expectedTraceLoggingArgs = ["--stacktrace", "--debug"]; const expectedDebugBuildArgs = [ "-PappPath=/path/to/projectDir/app".replace(/\//g, path.sep), "-PappResourcesPath=/path/to/projectDir/app/App_Resources".replace( /\//g, - path.sep + path.sep, ), ]; const expectedReleaseBuildArgs = expectedDebugBuildArgs.concat([ @@ -157,8 +158,8 @@ describe("GradleBuildArgsService", () => { testCases, ( gradleBuildArgsService: IGradleBuildArgsService, - buildData: IAndroidBuildData - ) => gradleBuildArgsService.getBuildTaskArgs(buildData) + buildData: IAndroidBuildData, + ) => gradleBuildArgsService.getBuildTaskArgs(buildData), ); }); @@ -234,8 +235,8 @@ describe("GradleBuildArgsService", () => { testCases, ( gradleBuildArgsService: IGradleBuildArgsService, - buildData: IAndroidBuildData - ) => Promise.resolve(gradleBuildArgsService.getCleanTaskArgs(buildData)) + buildData: IAndroidBuildData, + ) => Promise.resolve(gradleBuildArgsService.getCleanTaskArgs(buildData)), ); }); }); diff --git a/test/services/livesync/android-livesync-tool.ts b/test/services/livesync/android-livesync-tool.ts index e81384d317..712cecd59f 100644 --- a/test/services/livesync/android-livesync-tool.ts +++ b/test/services/livesync/android-livesync-tool.ts @@ -9,12 +9,12 @@ import { MobileHelper } from "../../../lib/common/mobile/mobile-helper"; import { FileSystem } from "../../../lib/common/file-system"; import { DevicePlatformsConstants } from "../../../lib/common/mobile/device-platforms-constants"; import * as path from "path"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; import * as crypto from "crypto"; import { IInjector } from "../../../lib/common/definitions/yok"; import { IDictionary } from "../../../lib/common/declarations"; -temp.track(); const protocolVersion = "0.2.0"; class TestSocket extends LiveSyncSocket { @@ -58,7 +58,7 @@ const fileContents = { }; const projectCreated = false; -const testAppPath = temp.mkdirSync("testsyncapp"); +const testAppPath = mkdtempSync(path.join(tmpdir(), "testsyncapp-")); const testAppPlatformPath = path.join( testAppPath, "platforms", diff --git a/test/stubs.ts b/test/stubs.ts index 7ec3580891..29545654d8 100644 --- a/test/stubs.ts +++ b/test/stubs.ts @@ -9,7 +9,9 @@ import { Yok } from "./../lib/common/yok"; import { HostInfo } from "./../lib/common/host-info"; import { DevicePlatformsConstants } from "./../lib/common/mobile/device-platforms-constants"; import { PrepareData } from "../lib/data/prepare-data"; -import * as temp from "temp"; +import { mkdtempSync } from "fs"; +import { tmpdir } from "os"; +import * as path from "path"; import { IPackageInstallationManager, INpmInstallOptions, @@ -87,16 +89,13 @@ import { } from "../lib/common/definitions/google-analytics"; import * as _ from "lodash"; import { SupportedConfigValues } from "../lib/tools/config-manipulation/config-transformer"; -import { AffixOptions } from "temp"; -import { ITempService } from "../lib/definitions/temp-service"; +import { AffixOptions, ITempService } from "../lib/definitions/temp-service"; import { ITerminalSpinner, ITerminalSpinnerOptions, ITerminalSpinnerService, } from "../lib/definitions/terminal-spinner-service"; -temp.track(); - export class LoggerStub implements ILogger { initialize(opts?: ILoggerOptions): void {} @@ -1518,10 +1517,17 @@ export class InjectorStub extends Yok implements IInjector { export class TempServiceStub implements ITempService { public async mkdirSync(affixes: string): Promise { - return temp.mkdirSync(affixes); + const prefix = typeof affixes === "string" ? affixes : "tmp"; + return mkdtempSync(path.join(tmpdir(), `${prefix}-`)); } public async path(options: string | AffixOptions): Promise { - return temp.path(options); + const opts: AffixOptions = + typeof options === "string" ? { prefix: options } : options || {}; + const dir = opts.dir || tmpdir(); + const prefix = opts.prefix || "tmp"; + const suffix = opts.suffix || ""; + const name = `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2)}${suffix}`; + return path.join(dir, name); } } diff --git a/test/tools/node-modules/node-modules-dependencies-builder.ts b/test/tools/node-modules/node-modules-dependencies-builder.ts index 5494b159bb..8ea64163ef 100644 --- a/test/tools/node-modules/node-modules-dependencies-builder.ts +++ b/test/tools/node-modules/node-modules-dependencies-builder.ts @@ -7,794 +7,813 @@ import * as constants from "../../../lib/constants"; import { IDependencyData } from "../../../lib/declarations"; import { INodeModulesDependenciesBuilder } from "../../../lib/definitions/platform"; import { IInjector } from "../../../lib/common/definitions/yok"; -import { IFileSystem, IStringDictionary, } from "../../../lib/common/declarations"; -import * as temp from 'temp' -import * as fs from 'fs'; +import { + IFileSystem, + IStringDictionary, +} from "../../../lib/common/declarations"; +import * as os from "os"; +import * as fs from "fs"; import { FileSystem } from "../../../lib/common/file-system"; interface IDependencyInfo { - name: string; - version: string; - depth: number; - dependencies?: IDependencyInfo[]; - nativescript?: any; - isDevDependency?: boolean; + name: string; + version: string; + depth: number; + dependencies?: IDependencyInfo[]; + nativescript?: any; + isDevDependency?: boolean; } // TODO: Add integration tests. // The tests assumes npm 3 or later is used, so all dependencies (and their dependencies) will be installed at the root node_modules describe("nodeModulesDependenciesBuilder", () => { - let pathToProject: string = 'test-project'; - - beforeEach(() => { - // we use realpath because os.tmpdir points to a symlink on macos - // and require.resolve resolves the symlink causing test failures - pathToProject = fs.realpathSync( - temp.mkdirSync("test-project") - ); - }) - - const getTestInjector = (): IInjector => { - const testInjector = new Yok(); - testInjector.register("fs", FileSystem); - - return testInjector; - }; - - describe("getProductionDependencies", () => { - describe("returns empty array", () => { - const validateResultIsEmpty = async (resultOfReadJson: any) => { - const testInjector = getTestInjector(); - const fs = testInjector.resolve("fs"); - fs.readJson = (filename: string, encoding?: string): any => { - return resultOfReadJson; - }; - - const nodeModulesDependenciesBuilder = testInjector.resolve(NodeModulesDependenciesBuilder); - const result = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - - assert.deepStrictEqual(result, []); - }; - - it("when package.json does not have any data", async () => { - await validateResultIsEmpty(null); - }); - - it("when package.json does not have dependencies section", async () => { - await validateResultIsEmpty({ - name: "some name", - devDependencies: { a: "1.0.0" }, - }); - }); - }); - - describe("returns correct dependencies", () => { - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Helper functions for easier writing of consecutive tests in the suite. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - const getPathToDependencyInNodeModules = ( - dependencyName: string, - parentDir?: string - ): string => { - return path.join( - parentDir ?? pathToProject, - constants.NODE_MODULES_FOLDER_NAME, - dependencyName - ); - }; - - const getNodeModuleInfoForExpectedDependency = ( - dir: string, - depth: number, - nativescript?: any, - dependencies?: string[], - name?: string, - version?: string - ): IDependencyData => { - const packageName = name ?? path.basename(dir); - const result: IDependencyData = { - name: packageName, - directory: getPathToDependencyInNodeModules(dir), - depth, - dependencies: dependencies || [], - version: version, - }; - - if (nativescript) { - result.nativescript = nativescript; - } - - return result; - }; - - const getPathToPackageJsonOfDependency = ( - dependencyName: string, - parentDir?: string - ): string => { - return path.join( - getPathToDependencyInNodeModules(dependencyName, parentDir), - constants.PACKAGE_JSON_FILE_NAME - ); - }; - - const getDependenciesObjectFromDependencyInfo = ( - depInfos: IDependencyInfo[], - nativescript: any, - version: string - ): { - dependencies: IStringDictionary; - nativescript?: any; - devDependencies: IStringDictionary; - version: string; - } => { - const dependencies: any = {}; - const devDependencies: any = {}; - _.each(depInfos, (innerDependency) => { - if (innerDependency.isDevDependency) { - devDependencies[innerDependency.name] = innerDependency.version; - } else { - dependencies[innerDependency.name] = innerDependency.version; - } - }); - - const result: any = { - dependencies, - devDependencies, - }; - - if (nativescript) { - result.nativescript = nativescript; - } - - if (version) { - result.version = version; - } - - return result; - }; - - const getDependenciesObject = ( - filename: string, - deps: IDependencyInfo[], - parentDir: string - ): { - dependencies: IStringDictionary; - nativescript?: any; - devDependencies: IStringDictionary; - } => { - let result: { - dependencies: IStringDictionary; - nativescript?: any; - devDependencies: IStringDictionary; - } = null; - for (const dependencyInfo of deps) { - const pathToPackageJson = getPathToPackageJsonOfDependency( - dependencyInfo.name, - parentDir - ); - if (filename === pathToPackageJson) { - return getDependenciesObjectFromDependencyInfo( - dependencyInfo.dependencies, - dependencyInfo.nativescript, - dependencyInfo.version - ); - } - - if (dependencyInfo.dependencies) { - result = getDependenciesObject( - filename, - dependencyInfo.dependencies, - path.join( - parentDir, - constants.NODE_MODULES_FOLDER_NAME, - dependencyInfo.name - ) - ); - if (result) { - break; - } - } - } - - return result; - }; - - const generatePackageJsonData = ( - dep: IDependencyInfo - ) => { - const data: any = { - name: dep.name, - version: dep.version, - dependencies: dep.dependencies?.reduce((deps, dep) => { - if (!dep.isDevDependency) { - deps[dep.name] = dep.version - } - return deps; - }, {} as { [name: string]: string }), - devDependencies: dep.dependencies?.reduce((deps, dep) => { - if (dep.isDevDependency) { - deps[dep.name] = dep.version - } - return deps; - }, {} as { [name: string]: string }) - } - - if(dep.nativescript) { - data.nativescript = dep.nativescript; - } - - return data; - } - - const generateNodeModules = ( - dep: IDependencyInfo, - rootPath: string) => { - // ensure dep directory - fs.mkdirSync(rootPath, { recursive: true }); - - // generate package.json contents - const packageJsonData = generatePackageJsonData(dep); - - // write package.json - fs.writeFileSync( - path.join(rootPath, 'package.json'), - JSON.stringify(packageJsonData) - ) - - // recurse into sub-dependencies if any - if (dep.dependencies) { - for (const subDep of dep.dependencies) { - generateNodeModules( - subDep, - path.join(rootPath, 'node_modules', subDep.name) - ); - } - } - } - - const generateTest = ( - rootDeps: IDependencyInfo[] - ): INodeModulesDependenciesBuilder => { - const testInjector = getTestInjector(); - const nodeModulesDependenciesBuilder = testInjector.resolve(NodeModulesDependenciesBuilder); - - generateNodeModules( - { - name: 'test-project', - version: '1.0.0', - depth: 0, - dependencies: rootDeps - }, - pathToProject - ); - - return nodeModulesDependenciesBuilder; - }; - - const generateDependency = ( - name: string, - version: string, - depth: number, - dependencies: IDependencyInfo[], - nativescript?: any, - opts?: { isDevDependency: boolean } - ): IDependencyInfo => { - return { - name, - version, - depth, - dependencies, - nativescript, - isDevDependency: !!(opts && opts.isDevDependency), - }; - }; - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * END of helper functions for easier writing of consecutive tests in the suite. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - const firstPackage = "firstPackage"; - const secondPackage = "secondPackage"; - const thirdPackage = "thirdPackage"; - - it("when there are both dependencies and devDependencies installed", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├── firstPackage@1.0.0 - // ├── secondPackage@1.1.0 - // └── thirdPackage@1.2.0 // this is devDependency - - const rootDeps: IDependencyInfo[] = [ - generateDependency(firstPackage, "1.0.0", 0, null), - generateDependency(secondPackage, "1.1.0", 0, null), - generateDependency(thirdPackage, "1.2.0", 0, null, null, { - isDevDependency: true, - }), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - firstPackage, - 0, - null, - null, - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - null, - null, - null, - "1.1.0" - ), - ]; - - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("when there are both dependencies and devDependencies installed, does not handle dependencies of devDependencies", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├─┬ firstPackage@1.0.0 // this is devDependency - // │ └── secondPackage@1.2.0 - // └── secondPackage@1.1.0 - - const rootDeps: IDependencyInfo[] = [ - generateDependency( - firstPackage, - "1.0.0", - 0, - [generateDependency(secondPackage, "1.2.0", 1, null)], - null, - { isDevDependency: true } - ), - generateDependency(secondPackage, "1.1.0", 0, null), - ]; - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - null, - null, - null, - "1.1.0" - ), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("when there are scoped dependencies", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├─┬ @scope/firstPackage@1.0.0 - // │ └── secondPackage@1.2.0 - // └── secondPackage@1.1.0 - - const scopedPackageName = `@scope/${firstPackage}`; - const rootDeps: IDependencyInfo[] = [ - generateDependency(scopedPackageName, "1.0.0", 0, [ - generateDependency(secondPackage, "1.2.0", 1, null), - ]), - generateDependency(secondPackage, "1.1.0", 0, null), - ]; - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - scopedPackageName, - 0, - null, - [secondPackage], - scopedPackageName, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - null, - null, - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - path.join( - scopedPackageName, - constants.NODE_MODULES_FOLDER_NAME, - secondPackage - ), - 1, - null, - null, - null, - "1.2.0" - ), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("when there are scoped dependencies as dependency of other non-scoped dependency", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├─┬ firstPackage@1.0.0 - // │ └── @scope/secondPackage@1.2.0 - // └── thirdPackage@1.1.0 - - const scopedPackageName = `@scope/${secondPackage}`; - const rootDeps: IDependencyInfo[] = [ - generateDependency(firstPackage, "1.0.0", 0, [ - generateDependency(scopedPackageName, "1.2.0", 1, null), - ]), - generateDependency(thirdPackage, "1.1.0", 0, null), - ]; - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - firstPackage, - 0, - null, - [scopedPackageName], - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - thirdPackage, - 0, - null, - null, - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - path.join( - firstPackage, - constants.NODE_MODULES_FOLDER_NAME, - scopedPackageName - ), - 1, - null, - null, - scopedPackageName, - "1.2.0" - ), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("when all dependencies are installed at the root level of the project", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├── firstPackage@1.0.0 - // ├── secondPackage@1.1.0 - // └── thirdPackage@1.2.0 - - const rootDeps: IDependencyInfo[] = [ - generateDependency(firstPackage, "1.0.0", 0, null), - generateDependency(secondPackage, "1.1.0", 0, null), - generateDependency(thirdPackage, "1.2.0", 0, null), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - firstPackage, - 0, - null, - null, - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - null, - null, - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - thirdPackage, - 0, - null, - null, - null, - "1.2.0" - ), - ]; - - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("when the project has a dependency to a package and one of the other packages has dependency to other version of this package", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├─┬ firstPackage@1.0.0 - // │ └── secondPackage@1.2.0 - // └── secondPackage@1.1.0 - - const rootDeps: IDependencyInfo[] = [ - generateDependency(firstPackage, "1.0.0", 0, [ - generateDependency(secondPackage, "1.2.0", 1, null), - ]), - generateDependency(secondPackage, "1.1.0", 0, null), - ]; - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - firstPackage, - 0, - null, - [secondPackage], - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - null, - null, - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - path.join( - firstPackage, - constants.NODE_MODULES_FOLDER_NAME, - secondPackage - ), - 1, - null, - null, - null, - "1.2.0" - ), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("when several package depend on different versions of other packages", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├─┬ firstPackage@1.0.0 - // │ ├─┬ secondPackage@1.1.0 - // │ │ └── thirdPackage@1.2.0 - // │ └── thirdPackage@1.1.0 - // ├── secondPackage@1.0.0 - // └── thirdPackage@1.0.0 - - const rootDeps: IDependencyInfo[] = [ - generateDependency(firstPackage, "1.0.0", 0, [ - generateDependency(secondPackage, "1.1.0", 1, [ - generateDependency(thirdPackage, "1.2.0", 2, null), - ]), - generateDependency(thirdPackage, "1.1.0", 1, null), - ]), - generateDependency(secondPackage, "1.0.0", 0, null), - generateDependency(thirdPackage, "1.0.0", 0, null), - ]; - - const pathToSecondPackageInsideFirstPackage = path.join( - firstPackage, - constants.NODE_MODULES_FOLDER_NAME, - secondPackage - ); - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - firstPackage, - 0, - null, - [secondPackage, thirdPackage], - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - null, - null, - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - thirdPackage, - 0, - null, - null, - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - pathToSecondPackageInsideFirstPackage, - 1, - null, - [thirdPackage], - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - path.join( - firstPackage, - constants.NODE_MODULES_FOLDER_NAME, - thirdPackage - ), - 1, - null, - null, - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - path.join( - pathToSecondPackageInsideFirstPackage, - constants.NODE_MODULES_FOLDER_NAME, - thirdPackage - ), - 2, - null, - null, - null, - "1.2.0" - ), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("when the installed packages have nativescript data in their package.json", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├── firstPackage@1.0.0 - // ├── secondPackage@1.1.0 - // └── thirdPackage@1.2.0 - - const getNativeScriptDataForPlugin = (pluginName: string): any => { - return { - platforms: { - "tns-android": "x.x.x", - "tns-ios": "x.x.x", - }, - - customPropertyUsedForThisTestOnly: pluginName, - }; - }; - - const rootDeps: IDependencyInfo[] = [ - generateDependency( - firstPackage, - "1.0.0", - 0, - null, - getNativeScriptDataForPlugin(firstPackage) - ), - generateDependency( - secondPackage, - "1.1.0", - 0, - null, - getNativeScriptDataForPlugin(secondPackage) - ), - generateDependency( - thirdPackage, - "1.2.0", - 0, - null, - getNativeScriptDataForPlugin(thirdPackage) - ), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject - ); - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - firstPackage, - 0, - getNativeScriptDataForPlugin(firstPackage), - null, - null, - "1.0.0" - ), - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - getNativeScriptDataForPlugin(secondPackage), - null, - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - thirdPackage, - 0, - getNativeScriptDataForPlugin(thirdPackage), - null, - null, - "1.2.0" - ), - ]; - - assert.deepStrictEqual(actualResult, expectedResult); - }); - - it("ignoring dependencies", async () => { - // The test validates the following dependency tree, when npm 3+ is used. - // - // ├── firstPackage@1.0.0 - // ├── secondPackage@1.1.0 - // └── thirdPackage@1.2.0 - - const rootDeps: IDependencyInfo[] = [ - generateDependency(firstPackage, "1.0.0", 0, null), - generateDependency(secondPackage, "1.1.0", 0, null), - generateDependency(thirdPackage, "1.2.0", 0, null), - ]; - - const nodeModulesDependenciesBuilder = generateTest(rootDeps); - const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( - pathToProject, [firstPackage] - ); - - const expectedResult: IDependencyData[] = [ - getNodeModuleInfoForExpectedDependency( - secondPackage, - 0, - null, - null, - null, - "1.1.0" - ), - getNodeModuleInfoForExpectedDependency( - thirdPackage, - 0, - null, - null, - null, - "1.2.0" - ), - ]; - - assert.deepStrictEqual(actualResult, expectedResult); - }); - }); - }) - ; -}) -; + let pathToProject: string = "test-project"; + + beforeEach(() => { + // we use realpath because os.tmpdir points to a symlink on macos + // and require.resolve resolves the symlink causing test failures + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "test-project-")); + pathToProject = fs.realpathSync(tmpDir); + }); + + const getTestInjector = (): IInjector => { + const testInjector = new Yok(); + testInjector.register("fs", FileSystem); + + return testInjector; + }; + + describe("getProductionDependencies", () => { + describe("returns empty array", () => { + const validateResultIsEmpty = async (resultOfReadJson: any) => { + const testInjector = getTestInjector(); + const fs = testInjector.resolve("fs"); + fs.readJson = (filename: string, encoding?: string): any => { + return resultOfReadJson; + }; + + const nodeModulesDependenciesBuilder = + testInjector.resolve( + NodeModulesDependenciesBuilder, + ); + const result = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + + assert.deepStrictEqual(result, []); + }; + + it("when package.json does not have any data", async () => { + await validateResultIsEmpty(null); + }); + + it("when package.json does not have dependencies section", async () => { + await validateResultIsEmpty({ + name: "some name", + devDependencies: { a: "1.0.0" }, + }); + }); + }); + + describe("returns correct dependencies", () => { + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Helper functions for easier writing of consecutive tests in the suite. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + const getPathToDependencyInNodeModules = ( + dependencyName: string, + parentDir?: string, + ): string => { + return path.join( + parentDir ?? pathToProject, + constants.NODE_MODULES_FOLDER_NAME, + dependencyName, + ); + }; + + const getNodeModuleInfoForExpectedDependency = ( + dir: string, + depth: number, + nativescript?: any, + dependencies?: string[], + name?: string, + version?: string, + ): IDependencyData => { + const packageName = name ?? path.basename(dir); + const result: IDependencyData = { + name: packageName, + directory: getPathToDependencyInNodeModules(dir), + depth, + dependencies: dependencies || [], + version: version, + }; + + if (nativescript) { + result.nativescript = nativescript; + } + + return result; + }; + + const getPathToPackageJsonOfDependency = ( + dependencyName: string, + parentDir?: string, + ): string => { + return path.join( + getPathToDependencyInNodeModules(dependencyName, parentDir), + constants.PACKAGE_JSON_FILE_NAME, + ); + }; + + const getDependenciesObjectFromDependencyInfo = ( + depInfos: IDependencyInfo[], + nativescript: any, + version: string, + ): { + dependencies: IStringDictionary; + nativescript?: any; + devDependencies: IStringDictionary; + version: string; + } => { + const dependencies: any = {}; + const devDependencies: any = {}; + _.each(depInfos, (innerDependency) => { + if (innerDependency.isDevDependency) { + devDependencies[innerDependency.name] = innerDependency.version; + } else { + dependencies[innerDependency.name] = innerDependency.version; + } + }); + + const result: any = { + dependencies, + devDependencies, + }; + + if (nativescript) { + result.nativescript = nativescript; + } + + if (version) { + result.version = version; + } + + return result; + }; + + const getDependenciesObject = ( + filename: string, + deps: IDependencyInfo[], + parentDir: string, + ): { + dependencies: IStringDictionary; + nativescript?: any; + devDependencies: IStringDictionary; + } => { + let result: { + dependencies: IStringDictionary; + nativescript?: any; + devDependencies: IStringDictionary; + } = null; + for (const dependencyInfo of deps) { + const pathToPackageJson = getPathToPackageJsonOfDependency( + dependencyInfo.name, + parentDir, + ); + if (filename === pathToPackageJson) { + return getDependenciesObjectFromDependencyInfo( + dependencyInfo.dependencies, + dependencyInfo.nativescript, + dependencyInfo.version, + ); + } + + if (dependencyInfo.dependencies) { + result = getDependenciesObject( + filename, + dependencyInfo.dependencies, + path.join( + parentDir, + constants.NODE_MODULES_FOLDER_NAME, + dependencyInfo.name, + ), + ); + if (result) { + break; + } + } + } + + return result; + }; + + const generatePackageJsonData = (dep: IDependencyInfo) => { + const data: any = { + name: dep.name, + version: dep.version, + dependencies: dep.dependencies?.reduce( + (deps, dep) => { + if (!dep.isDevDependency) { + deps[dep.name] = dep.version; + } + return deps; + }, + {} as { [name: string]: string }, + ), + devDependencies: dep.dependencies?.reduce( + (deps, dep) => { + if (dep.isDevDependency) { + deps[dep.name] = dep.version; + } + return deps; + }, + {} as { [name: string]: string }, + ), + }; + + if (dep.nativescript) { + data.nativescript = dep.nativescript; + } + + return data; + }; + + const generateNodeModules = (dep: IDependencyInfo, rootPath: string) => { + // ensure dep directory + fs.mkdirSync(rootPath, { recursive: true }); + + // generate package.json contents + const packageJsonData = generatePackageJsonData(dep); + + // write package.json + fs.writeFileSync( + path.join(rootPath, "package.json"), + JSON.stringify(packageJsonData), + ); + + // recurse into sub-dependencies if any + if (dep.dependencies) { + for (const subDep of dep.dependencies) { + generateNodeModules( + subDep, + path.join(rootPath, "node_modules", subDep.name), + ); + } + } + }; + + const generateTest = ( + rootDeps: IDependencyInfo[], + ): INodeModulesDependenciesBuilder => { + const testInjector = getTestInjector(); + const nodeModulesDependenciesBuilder = + testInjector.resolve( + NodeModulesDependenciesBuilder, + ); + + generateNodeModules( + { + name: "test-project", + version: "1.0.0", + depth: 0, + dependencies: rootDeps, + }, + pathToProject, + ); + + return nodeModulesDependenciesBuilder; + }; + + const generateDependency = ( + name: string, + version: string, + depth: number, + dependencies: IDependencyInfo[], + nativescript?: any, + opts?: { isDevDependency: boolean }, + ): IDependencyInfo => { + return { + name, + version, + depth, + dependencies, + nativescript, + isDevDependency: !!(opts && opts.isDevDependency), + }; + }; + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * END of helper functions for easier writing of consecutive tests in the suite. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + const firstPackage = "firstPackage"; + const secondPackage = "secondPackage"; + const thirdPackage = "thirdPackage"; + + it("when there are both dependencies and devDependencies installed", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├── firstPackage@1.0.0 + // ├── secondPackage@1.1.0 + // └── thirdPackage@1.2.0 // this is devDependency + + const rootDeps: IDependencyInfo[] = [ + generateDependency(firstPackage, "1.0.0", 0, null), + generateDependency(secondPackage, "1.1.0", 0, null), + generateDependency(thirdPackage, "1.2.0", 0, null, null, { + isDevDependency: true, + }), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + firstPackage, + 0, + null, + null, + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + null, + null, + null, + "1.1.0", + ), + ]; + + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("when there are both dependencies and devDependencies installed, does not handle dependencies of devDependencies", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├─┬ firstPackage@1.0.0 // this is devDependency + // │ └── secondPackage@1.2.0 + // └── secondPackage@1.1.0 + + const rootDeps: IDependencyInfo[] = [ + generateDependency( + firstPackage, + "1.0.0", + 0, + [generateDependency(secondPackage, "1.2.0", 1, null)], + null, + { isDevDependency: true }, + ), + generateDependency(secondPackage, "1.1.0", 0, null), + ]; + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + null, + null, + null, + "1.1.0", + ), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("when there are scoped dependencies", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├─┬ @scope/firstPackage@1.0.0 + // │ └── secondPackage@1.2.0 + // └── secondPackage@1.1.0 + + const scopedPackageName = `@scope/${firstPackage}`; + const rootDeps: IDependencyInfo[] = [ + generateDependency(scopedPackageName, "1.0.0", 0, [ + generateDependency(secondPackage, "1.2.0", 1, null), + ]), + generateDependency(secondPackage, "1.1.0", 0, null), + ]; + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + scopedPackageName, + 0, + null, + [secondPackage], + scopedPackageName, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + null, + null, + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + path.join( + scopedPackageName, + constants.NODE_MODULES_FOLDER_NAME, + secondPackage, + ), + 1, + null, + null, + null, + "1.2.0", + ), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("when there are scoped dependencies as dependency of other non-scoped dependency", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├─┬ firstPackage@1.0.0 + // │ └── @scope/secondPackage@1.2.0 + // └── thirdPackage@1.1.0 + + const scopedPackageName = `@scope/${secondPackage}`; + const rootDeps: IDependencyInfo[] = [ + generateDependency(firstPackage, "1.0.0", 0, [ + generateDependency(scopedPackageName, "1.2.0", 1, null), + ]), + generateDependency(thirdPackage, "1.1.0", 0, null), + ]; + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + firstPackage, + 0, + null, + [scopedPackageName], + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + thirdPackage, + 0, + null, + null, + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + path.join( + firstPackage, + constants.NODE_MODULES_FOLDER_NAME, + scopedPackageName, + ), + 1, + null, + null, + scopedPackageName, + "1.2.0", + ), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("when all dependencies are installed at the root level of the project", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├── firstPackage@1.0.0 + // ├── secondPackage@1.1.0 + // └── thirdPackage@1.2.0 + + const rootDeps: IDependencyInfo[] = [ + generateDependency(firstPackage, "1.0.0", 0, null), + generateDependency(secondPackage, "1.1.0", 0, null), + generateDependency(thirdPackage, "1.2.0", 0, null), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + firstPackage, + 0, + null, + null, + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + null, + null, + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + thirdPackage, + 0, + null, + null, + null, + "1.2.0", + ), + ]; + + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("when the project has a dependency to a package and one of the other packages has dependency to other version of this package", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├─┬ firstPackage@1.0.0 + // │ └── secondPackage@1.2.0 + // └── secondPackage@1.1.0 + + const rootDeps: IDependencyInfo[] = [ + generateDependency(firstPackage, "1.0.0", 0, [ + generateDependency(secondPackage, "1.2.0", 1, null), + ]), + generateDependency(secondPackage, "1.1.0", 0, null), + ]; + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + firstPackage, + 0, + null, + [secondPackage], + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + null, + null, + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + path.join( + firstPackage, + constants.NODE_MODULES_FOLDER_NAME, + secondPackage, + ), + 1, + null, + null, + null, + "1.2.0", + ), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("when several package depend on different versions of other packages", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├─┬ firstPackage@1.0.0 + // │ ├─┬ secondPackage@1.1.0 + // │ │ └── thirdPackage@1.2.0 + // │ └── thirdPackage@1.1.0 + // ├── secondPackage@1.0.0 + // └── thirdPackage@1.0.0 + + const rootDeps: IDependencyInfo[] = [ + generateDependency(firstPackage, "1.0.0", 0, [ + generateDependency(secondPackage, "1.1.0", 1, [ + generateDependency(thirdPackage, "1.2.0", 2, null), + ]), + generateDependency(thirdPackage, "1.1.0", 1, null), + ]), + generateDependency(secondPackage, "1.0.0", 0, null), + generateDependency(thirdPackage, "1.0.0", 0, null), + ]; + + const pathToSecondPackageInsideFirstPackage = path.join( + firstPackage, + constants.NODE_MODULES_FOLDER_NAME, + secondPackage, + ); + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + firstPackage, + 0, + null, + [secondPackage, thirdPackage], + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + null, + null, + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + thirdPackage, + 0, + null, + null, + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + pathToSecondPackageInsideFirstPackage, + 1, + null, + [thirdPackage], + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + path.join( + firstPackage, + constants.NODE_MODULES_FOLDER_NAME, + thirdPackage, + ), + 1, + null, + null, + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + path.join( + pathToSecondPackageInsideFirstPackage, + constants.NODE_MODULES_FOLDER_NAME, + thirdPackage, + ), + 2, + null, + null, + null, + "1.2.0", + ), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("when the installed packages have nativescript data in their package.json", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├── firstPackage@1.0.0 + // ├── secondPackage@1.1.0 + // └── thirdPackage@1.2.0 + + const getNativeScriptDataForPlugin = (pluginName: string): any => { + return { + platforms: { + "tns-android": "x.x.x", + "tns-ios": "x.x.x", + }, + + customPropertyUsedForThisTestOnly: pluginName, + }; + }; + + const rootDeps: IDependencyInfo[] = [ + generateDependency( + firstPackage, + "1.0.0", + 0, + null, + getNativeScriptDataForPlugin(firstPackage), + ), + generateDependency( + secondPackage, + "1.1.0", + 0, + null, + getNativeScriptDataForPlugin(secondPackage), + ), + generateDependency( + thirdPackage, + "1.2.0", + 0, + null, + getNativeScriptDataForPlugin(thirdPackage), + ), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + ); + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + firstPackage, + 0, + getNativeScriptDataForPlugin(firstPackage), + null, + null, + "1.0.0", + ), + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + getNativeScriptDataForPlugin(secondPackage), + null, + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + thirdPackage, + 0, + getNativeScriptDataForPlugin(thirdPackage), + null, + null, + "1.2.0", + ), + ]; + + assert.deepStrictEqual(actualResult, expectedResult); + }); + + it("ignoring dependencies", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├── firstPackage@1.0.0 + // ├── secondPackage@1.1.0 + // └── thirdPackage@1.2.0 + + const rootDeps: IDependencyInfo[] = [ + generateDependency(firstPackage, "1.0.0", 0, null), + generateDependency(secondPackage, "1.1.0", 0, null), + generateDependency(thirdPackage, "1.2.0", 0, null), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = + await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, + [firstPackage], + ); + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpectedDependency( + secondPackage, + 0, + null, + null, + null, + "1.1.0", + ), + getNodeModuleInfoForExpectedDependency( + thirdPackage, + 0, + null, + null, + null, + "1.2.0", + ), + ]; + + assert.deepStrictEqual(actualResult, expectedResult); + }); + }); + }); +}); diff --git a/test/xcconfig-service.ts b/test/xcconfig-service.ts index cb81c045f3..a43291f73d 100644 --- a/test/xcconfig-service.ts +++ b/test/xcconfig-service.ts @@ -1,4 +1,3 @@ -import * as temp from "temp"; import { assert } from "chai"; import * as _ from "lodash"; import { XcconfigService } from "../lib/services/xcconfig-service"; @@ -8,7 +7,6 @@ import { IInjector } from "../lib/common/definitions/yok"; import { IReadFileOptions } from "../lib/common/declarations"; // start tracking temporary folders/files -temp.track(); describe("XCConfig Service Tests", () => { const createTestInjector = (): IInjector => { @@ -62,7 +60,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return `// You can add custom settings here // for example you can uncomment the following line to force distribution code signing @@ -87,7 +85,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return `// You can add custom settings here // for example you can uncomment the following line to force distribution code signing @@ -112,7 +110,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return `// DEVELOPMENT_TEAM = YOUR_TEAM_ID; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;`; @@ -131,7 +129,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return ` ASSETCATALOG_COMPILER_APPICON_NAME = ; @@ -152,7 +150,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return `ASSETCATALOG_COMPILER_APPICON_NAME`; }; @@ -169,7 +167,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return `ASSETCATALOG_COMPILER_APPICON_NAME=`; }; @@ -186,7 +184,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return `ASSETCATALOG_COMPILER_APPICON_NAME= `; }; @@ -203,7 +201,7 @@ describe("XCConfig Service Tests", () => { const fs = getFileSystemMock(injector); fs.readText = ( filename: string, - options?: IReadFileOptions | string + options?: IReadFileOptions | string, ): string => { return `ASSETCATALOG_COMPILER_APPICON_NAME= ;`; }; From 93a214c093c3aa5d47df6b19371c12b26d3c97ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulises=20Gasc=C3=B3n?= Date: Mon, 8 Sep 2025 17:16:24 +0200 Subject: [PATCH 024/136] feat: add Dependabot configuration (#5859) --- .github/dependabot.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..2ac7ef3191 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,36 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthly + + - package-ecosystem: npm + directory: / + schedule: + interval: monthly + time: "23:00" + open-pull-requests-limit: 10 + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major"] + + - package-ecosystem: npm + directory: /packages/doctor + schedule: + interval: monthly + time: "23:00" + open-pull-requests-limit: 10 + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major"] + + - package-ecosystem: npm + directory: /packages/nativescript-envinfo + schedule: + interval: monthly + time: "23:00" + open-pull-requests-limit: 10 + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major"] From 1478ba9b8d6cd987833dbd7108a19ed37c0f041f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulises=20Gasc=C3=B3n?= Date: Mon, 8 Sep 2025 17:17:03 +0200 Subject: [PATCH 025/136] feat: add Dependency Review Action workflow (#5860) --- .github/workflows/dependency-review.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/dependency-review.yml diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000000..ac03c94261 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,22 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, +# surfacing known-vulnerable versions of the packages declared or updated in the PR. +# Once installed, if the workflow run is marked as required, +# PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - name: 'Dependency Review' + uses: actions/dependency-review-action@595b5aeba73380359d98a5e087f648dbb0edce1b # v4.7.3 From 1af226d786b4cd5e3204003a3b3a7e33bdeea75c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:56:09 -0700 Subject: [PATCH 026/136] chore(deps): bump prettier from 3.5.2 to 3.6.2 (#5861) [skip ci] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e34faa8f1b..3b2629fdb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "pbxproj-dom": "1.2.0", "plist": "3.1.0", "plist-merge-patch": "0.2.0", - "prettier": "3.5.2", + "prettier": "3.6.2", "prompts": "2.4.2", "proper-lockfile": "4.1.2", "proxy-lib": "0.4.1", @@ -9862,9 +9862,9 @@ } }, "node_modules/prettier": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", - "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" diff --git a/package.json b/package.json index 5b5ccd76bc..7853af542f 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "pbxproj-dom": "1.2.0", "plist": "3.1.0", "plist-merge-patch": "0.2.0", - "prettier": "3.5.2", + "prettier": "3.6.2", "prompts": "2.4.2", "proper-lockfile": "4.1.2", "proxy-lib": "0.4.1", From 3b8785b0f41d8c32d96aac945f00971d3007c9a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:56:52 -0700 Subject: [PATCH 027/136] chore(deps): bump semver and @types/semver (#5862) [skip ci] --- package-lock.json | 28 ++++++++-------------------- package.json | 4 ++-- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3b2629fdb5..136eff5cbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "proxy-lib": "0.4.1", "qr-image": "3.2.0", "qrcode-terminal": "0.12.0", - "semver": "7.7.1", + "semver": "7.7.2", "shelljs": "0.10.0", "simple-git": "3.27.0", "simple-plist": "1.4.0", @@ -89,7 +89,7 @@ "@types/proper-lockfile": "4.1.4", "@types/qr-image": "3.2.9", "@types/retry": "0.12.5", - "@types/semver": "7.5.8", + "@types/semver": "7.7.1", "@types/shelljs": "^0.8.11", "@types/sinon": "^17.0.3", "@types/tabtab": "^3.0.2", @@ -922,18 +922,6 @@ "yauzl": "3.2.0" } }, - "node_modules/@nativescript/doctor/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1849,9 +1837,9 @@ "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT" }, @@ -10866,9 +10854,9 @@ "license": "ISC" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" diff --git a/package.json b/package.json index 7853af542f..fe83a1a4f1 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "proxy-lib": "0.4.1", "qr-image": "3.2.0", "qrcode-terminal": "0.12.0", - "semver": "7.7.1", + "semver": "7.7.2", "shelljs": "0.10.0", "simple-git": "3.27.0", "simple-plist": "1.4.0", @@ -127,7 +127,7 @@ "@types/proper-lockfile": "4.1.4", "@types/qr-image": "3.2.9", "@types/retry": "0.12.5", - "@types/semver": "7.5.8", + "@types/semver": "7.7.1", "@types/shelljs": "^0.8.11", "@types/sinon": "^17.0.3", "@types/tabtab": "^3.0.2", From d0a51a976bdb35ac79b07d11ccee7bd25052dbb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:57:43 -0700 Subject: [PATCH 028/136] chore(deps-dev): bump chai and @types/chai (#5863) [skip ci] --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 136eff5cbc..d49e49370b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,7 @@ "devDependencies": { "@types/archiver": "^6.0.3", "@types/byline": "^4.2.36", - "@types/chai": "5.0.1", + "@types/chai": "5.2.2", "@types/chai-as-promised": "8.0.1", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", @@ -101,7 +101,7 @@ "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", "braces": ">=3.0.3", - "chai": "5.2.0", + "chai": "5.3.3", "chai-as-promised": "8.0.1", "conventional-changelog-cli": "^5.0.0", "grunt": "1.6.1", @@ -1573,9 +1573,9 @@ "license": "MIT" }, "node_modules/@types/chai": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.1.tgz", - "integrity": "sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", "dev": true, "license": "MIT", "dependencies": { @@ -2961,9 +2961,9 @@ } }, "node_modules/chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", "dependencies": { @@ -2974,7 +2974,7 @@ "pathval": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/chai-as-promised": { diff --git a/package.json b/package.json index fe83a1a4f1..d0ccac21cd 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "devDependencies": { "@types/archiver": "^6.0.3", "@types/byline": "^4.2.36", - "@types/chai": "5.0.1", + "@types/chai": "5.2.2", "@types/chai-as-promised": "8.0.1", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", @@ -139,7 +139,7 @@ "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", "braces": ">=3.0.3", - "chai": "5.2.0", + "chai": "5.3.3", "chai-as-promised": "8.0.1", "conventional-changelog-cli": "^5.0.0", "grunt": "1.6.1", From 46ad2be8d0ec61d0e143ea92414fb098586cfbb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:58:32 -0700 Subject: [PATCH 029/136] chore(deps): bump minimatch from 10.0.1 to 10.0.3 (#5864) [skip ci] --- package-lock.json | 45 +++++++-------------------------------------- package.json | 2 +- 2 files changed, 8 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index d49e49370b..6ef0d58b9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "log4js": "6.9.1", "marked": "15.0.7", "marked-terminal": "7.3.0", - "minimatch": "10.0.1", + "minimatch": "10.0.3", "mkdirp": "3.0.1", "mute-stream": "2.0.0", "nativescript-dev-xcode": "0.8.1", @@ -1863,7 +1863,7 @@ "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -1904,22 +1904,6 @@ "node": "20 || >=22" } }, - "node_modules/@types/shelljs/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@types/shelljs/node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -6473,27 +6457,12 @@ "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "license": "ISC", "dependencies": { - "minimatch": "^10.0.3" + "minimatch": "10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/image-q": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", @@ -8122,12 +8091,12 @@ } }, "node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" diff --git a/package.json b/package.json index d0ccac21cd..7f3770083b 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "log4js": "6.9.1", "marked": "15.0.7", "marked-terminal": "7.3.0", - "minimatch": "10.0.1", + "minimatch": "10.0.3", "mkdirp": "3.0.1", "mute-stream": "2.0.0", "nativescript-dev-xcode": "0.8.1", From edc74ca81f2d09ad16aeae9653848306483e9729 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:59:17 -0700 Subject: [PATCH 030/136] chore(deps-dev): bump lint-staged from 15.4.3 to 15.5.2 (#5865) [skip ci] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6ef0d58b9b..1bf16a5b92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,7 +113,7 @@ "grunt-ts": "6.0.0-beta.22", "husky": "9.1.7", "istanbul": "0.4.5", - "lint-staged": "~15.4.3", + "lint-staged": "~15.5.2", "mocha": "11.1.0", "sinon": "19.0.2", "source-map-support": "0.5.21", @@ -7516,9 +7516,9 @@ } }, "node_modules/lint-staged": { - "version": "15.4.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.3.tgz", - "integrity": "sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", + "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 7f3770083b..a7c1ba2d7a 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "grunt-ts": "6.0.0-beta.22", "husky": "9.1.7", "istanbul": "0.4.5", - "lint-staged": "~15.4.3", + "lint-staged": "~15.5.2", "mocha": "11.1.0", "sinon": "19.0.2", "source-map-support": "0.5.21", From f1db3c73309123100a1894bd67163b7462d60303 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:59:58 -0700 Subject: [PATCH 031/136] chore(deps-dev): bump sinon from 19.0.2 to 19.0.5 (#5866) [skip ci] --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1bf16a5b92..ed8a88804f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -115,7 +115,7 @@ "istanbul": "0.4.5", "lint-staged": "~15.5.2", "mocha": "11.1.0", - "sinon": "19.0.2", + "sinon": "19.0.5", "source-map-support": "0.5.21", "xml2js": ">=0.5.0" }, @@ -11156,14 +11156,14 @@ } }, "node_modules/sinon": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.2.tgz", - "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.5.tgz", + "integrity": "sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.2", + "@sinonjs/fake-timers": "^13.0.5", "@sinonjs/samsam": "^8.0.1", "diff": "^7.0.0", "nise": "^6.1.1", diff --git a/package.json b/package.json index a7c1ba2d7a..6700b141fc 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "istanbul": "0.4.5", "lint-staged": "~15.5.2", "mocha": "11.1.0", - "sinon": "19.0.2", + "sinon": "19.0.5", "source-map-support": "0.5.21", "xml2js": ">=0.5.0" }, From 67d4a3fed56d31e00bdbcf47b3c3c23fc0de01a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:00:45 -0700 Subject: [PATCH 032/136] chore(deps-dev): bump chai-as-promised and @types/chai-as-promised (#5867) [skip ci] --- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed8a88804f..70fe60e2cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -76,7 +76,7 @@ "@types/archiver": "^6.0.3", "@types/byline": "^4.2.36", "@types/chai": "5.2.2", - "@types/chai-as-promised": "8.0.1", + "@types/chai-as-promised": "8.0.2", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", "@types/lodash": "4.17.15", @@ -102,7 +102,7 @@ "@types/yargs": "17.0.33", "braces": ">=3.0.3", "chai": "5.3.3", - "chai-as-promised": "8.0.1", + "chai-as-promised": "8.0.2", "conventional-changelog-cli": "^5.0.0", "grunt": "1.6.1", "grunt-contrib-clean": "2.0.1", @@ -1583,9 +1583,9 @@ } }, "node_modules/@types/chai-as-promised": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-8.0.1.tgz", - "integrity": "sha512-dAlDhLjJlABwAVYObo9TPWYTRg9NaQM5CXeaeJYcYAkvzUf0JRLIiog88ao2Wqy/20WUnhbbUZcgvngEbJ3YXQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-8.0.2.tgz", + "integrity": "sha512-meQ1wDr1K5KRCSvG2lX7n7/5wf70BeptTKst0axGvnN6zqaVpRqegoIbugiAPSqOW9K9aL8gDVrm7a2LXOtn2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2962,16 +2962,16 @@ } }, "node_modules/chai-as-promised": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-8.0.1.tgz", - "integrity": "sha512-OIEJtOL8xxJSH8JJWbIoRjybbzR52iFuDHuF8eb+nTPD6tgXLjRqsgnUGqQfFODxYvq5QdirT0pN9dZ0+Gz6rA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-8.0.2.tgz", + "integrity": "sha512-1GadL+sEJVLzDjcawPM4kjfnL+p/9vrxiEUonowKOAzvVg0PixJUdtuDzdkDeQhK3zfOE76GqGkZIQ7/Adcrqw==", "dev": true, "license": "MIT", "dependencies": { - "check-error": "^2.0.0" + "check-error": "^2.1.1" }, "peerDependencies": { - "chai": ">= 2.1.2 < 6" + "chai": ">= 2.1.2 < 7" } }, "node_modules/chalk": { diff --git a/package.json b/package.json index 6700b141fc..db2a3e7084 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "@types/archiver": "^6.0.3", "@types/byline": "^4.2.36", "@types/chai": "5.2.2", - "@types/chai-as-promised": "8.0.1", + "@types/chai-as-promised": "8.0.2", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", "@types/lodash": "4.17.15", @@ -140,7 +140,7 @@ "@types/yargs": "17.0.33", "braces": ">=3.0.3", "chai": "5.3.3", - "chai-as-promised": "8.0.1", + "chai-as-promised": "8.0.2", "conventional-changelog-cli": "^5.0.0", "grunt": "1.6.1", "grunt-contrib-clean": "2.0.1", From fa5677898d53454a81893accd54e78caa0c7774e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:03:23 -0700 Subject: [PATCH 033/136] chore(deps): bump ws and @types/ws (#5868) [skip ci] Bumps [ws](https://github.com/websockets/ws) and [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws). These dependencies needed to be updated together. Updates `ws` from 8.18.1 to 8.18.3 - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.18.1...8.18.3) Updates `@types/ws` from 8.5.14 to 8.18.1 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ws) --- updated-dependencies: - dependency-name: ws dependency-version: 8.18.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: "@types/ws" dependency-version: 8.18.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- package.json | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 70fe60e2cf..2ed75c77e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,7 +62,7 @@ "universal-analytics": "0.5.3", "uuid": "11.1.0", "winreg": "1.2.5", - "ws": "8.18.1", + "ws": "8.18.3", "xml2js": "0.6.2", "yargs": "17.7.2" }, @@ -97,7 +97,7 @@ "@types/tunnel": "0.0.7", "@types/universal-analytics": "0.4.8", "@types/uuid": "^10.0.0", - "@types/ws": "8.5.14", + "@types/ws": "8.18.1", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", "braces": ">=3.0.3", @@ -2010,9 +2010,9 @@ "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", + "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": { @@ -12769,9 +12769,9 @@ } }, "node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index db2a3e7084..6cf5b09a39 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "universal-analytics": "0.5.3", "uuid": "11.1.0", "winreg": "1.2.5", - "ws": "8.18.1", + "ws": "8.18.3", "xml2js": "0.6.2", "yargs": "17.7.2" }, @@ -135,7 +135,7 @@ "@types/tunnel": "0.0.7", "@types/universal-analytics": "0.4.8", "@types/uuid": "^10.0.0", - "@types/ws": "8.5.14", + "@types/ws": "8.18.1", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", "braces": ">=3.0.3", From bc0e22f3b41c947552d0da3dea16ef54ff1d4121 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:04:22 -0700 Subject: [PATCH 034/136] chore(deps): bump marked from 15.0.7 to 15.0.12 (#5869) [skip ci] Bumps [marked](https://github.com/markedjs/marked) from 15.0.7 to 15.0.12. - [Release notes](https://github.com/markedjs/marked/releases) - [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json) - [Commits](https://github.com/markedjs/marked/compare/v15.0.7...v15.0.12) --- updated-dependencies: - dependency-name: marked dependency-version: 15.0.12 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ed75c77e7..afcb6e71ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "jimp": "1.6.0", "lodash": "4.17.21", "log4js": "6.9.1", - "marked": "15.0.7", + "marked": "15.0.12", "marked-terminal": "7.3.0", "minimatch": "10.0.3", "mkdirp": "3.0.1", @@ -7949,9 +7949,9 @@ } }, "node_modules/marked": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz", - "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "license": "MIT", "bin": { "marked": "bin/marked.js" diff --git a/package.json b/package.json index 6cf5b09a39..4b8a788671 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "jimp": "1.6.0", "lodash": "4.17.21", "log4js": "6.9.1", - "marked": "15.0.7", + "marked": "15.0.12", "marked-terminal": "7.3.0", "minimatch": "10.0.3", "mkdirp": "3.0.1", From fb3e1e5435b9d1648c9bddef40f653d73b8f5ca3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:05:52 -0700 Subject: [PATCH 035/136] chore(deps): bump source-map from 0.7.4 to 0.7.6 (#5870) [skip ci] Bumps [source-map](https://github.com/mozilla/source-map) from 0.7.4 to 0.7.6. - [Release notes](https://github.com/mozilla/source-map/releases) - [Changelog](https://github.com/mozilla/source-map/blob/master/CHANGELOG.md) - [Commits](https://github.com/mozilla/source-map/compare/v0.7.4...0.7.6) --- updated-dependencies: - dependency-name: source-map dependency-version: 0.7.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index afcb6e71ab..8b404d2676 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "shelljs": "0.10.0", "simple-git": "3.27.0", "simple-plist": "1.4.0", - "source-map": "0.7.4", + "source-map": "0.7.6", "tar": "7.4.3", "ts-morph": "25.0.1", "tunnel": "0.0.6", @@ -11432,12 +11432,12 @@ } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/source-map-resolve": { diff --git a/package.json b/package.json index 4b8a788671..2641073dca 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "shelljs": "0.10.0", "simple-git": "3.27.0", "simple-plist": "1.4.0", - "source-map": "0.7.4", + "source-map": "0.7.6", "tar": "7.4.3", "ts-morph": "25.0.1", "tunnel": "0.0.6", From 18d3cda6c9d62f86c58282a8b9f97f071ae03c1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:08:01 -0700 Subject: [PATCH 036/136] chore(deps-dev): bump chai and @types/chai in /packages/doctor (#5871) [skip ci] Bumps [chai](https://github.com/chaijs/chai) and [@types/chai](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chai). These dependencies needed to be updated together. Updates `chai` from 5.1.2 to 5.3.3 - [Release notes](https://github.com/chaijs/chai/releases) - [Changelog](https://github.com/chaijs/chai/blob/main/History.md) - [Commits](https://github.com/chaijs/chai/compare/v5.1.2...v5.3.3) Updates `@types/chai` from 5.0.1 to 5.2.2 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chai) --- updated-dependencies: - dependency-name: chai dependency-version: 5.3.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: "@types/chai" dependency-version: 5.2.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/doctor/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 6ff547fdbc..28dcdb6837 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -41,7 +41,7 @@ }, "homepage": "https://github.com/NativeScript/nativescript-doctor#readme", "devDependencies": { - "@types/chai": "5.0.1", + "@types/chai": "5.2.2", "@types/lodash": "4.17.15", "@types/mocha": "10.0.10", "@types/semver": "7.5.8", @@ -49,7 +49,7 @@ "@types/temp": "0.9.4", "@types/winreg": "1.2.36", "@types/yauzl": "2.10.3", - "chai": "5.1.2", + "chai": "5.3.3", "conventional-changelog-cli": "^5.0.0", "grunt": "1.6.1", "grunt-contrib-clean": "2.0.1", From 0dedbf18239225275b65883d298a49e94fc72e34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:08:35 -0700 Subject: [PATCH 037/136] chore(deps-dev): bump mocha from 11.1.0 to 11.7.2 in /packages/doctor (#5872) [skip ci] Bumps [mocha](https://github.com/mochajs/mocha) from 11.1.0 to 11.7.2. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/main/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v11.1.0...v11.7.2) --- updated-dependencies: - dependency-name: mocha dependency-version: 11.7.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/doctor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 28dcdb6837..3a02c66585 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -58,7 +58,7 @@ "grunt-ts": "6.0.0-beta.22", "grunt-tslint": "5.0.2", "istanbul": "0.4.5", - "mocha": "11.1.0", + "mocha": "11.7.2", "rimraf": "6.0.1", "tslint": "6.1.3", "tslint-microsoft-contrib": "6.2.0", From 2a1a8facd54aaf208e66d7e720954ba3ea958155 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:11:32 -0700 Subject: [PATCH 038/136] chore(deps-dev): bump @types/lodash from 4.17.15 to 4.17.20 in /packages/doctor (#5873) [skip ci] chore(deps-dev): bump @types/lodash in /packages/doctor Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.15 to 4.17.20. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash) --- updated-dependencies: - dependency-name: "@types/lodash" dependency-version: 4.17.20 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/doctor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 3a02c66585..fa753c8eb6 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -42,7 +42,7 @@ "homepage": "https://github.com/NativeScript/nativescript-doctor#readme", "devDependencies": { "@types/chai": "5.2.2", - "@types/lodash": "4.17.15", + "@types/lodash": "4.17.20", "@types/mocha": "10.0.10", "@types/semver": "7.5.8", "@types/shelljs": "0.8.17", From bde268534c147f7ecfb816a3ffa3038df54c770c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:12:39 -0700 Subject: [PATCH 039/136] chore(deps-dev): bump typescript from 5.4.5 to 5.9.2 in /packages/doctor (#5874) [skip ci] Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.4.5 to 5.9.2. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.4.5...v5.9.2) --- updated-dependencies: - dependency-name: typescript dependency-version: 5.9.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/doctor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index fa753c8eb6..67483a64b9 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -62,7 +62,7 @@ "rimraf": "6.0.1", "tslint": "6.1.3", "tslint-microsoft-contrib": "6.2.0", - "typescript": "~5.4.0" + "typescript": "~5.9.2" }, "dependencies": { "lodash": "4.17.21", From 6203221a7598debd1dc5dfa3ba2680a6f681a8ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:13:19 -0700 Subject: [PATCH 040/136] chore(deps-dev): bump @types/semver from 7.5.8 to 7.7.1 in /packages/doctor (#5875) chore(deps-dev): bump @types/semver in /packages/doctor Bumps [@types/semver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/semver) from 7.5.8 to 7.7.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/semver) --- updated-dependencies: - dependency-name: "@types/semver" dependency-version: 7.7.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- packages/doctor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 67483a64b9..59ac6b966f 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -44,7 +44,7 @@ "@types/chai": "5.2.2", "@types/lodash": "4.17.20", "@types/mocha": "10.0.10", - "@types/semver": "7.5.8", + "@types/semver": "7.7.1", "@types/shelljs": "0.8.17", "@types/temp": "0.9.4", "@types/winreg": "1.2.36", From c0728548c59c293ae1fd01a83bf6f42d9c48309c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:14:21 -0700 Subject: [PATCH 041/136] chore(deps): bump envinfo and @types/envinfo in /packages/nativescript-envinfo (#5876) chore(deps): bump envinfo and @types/envinfo Bumps [envinfo](https://github.com/tabrindle/envinfo) and [@types/envinfo](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/envinfo). These dependencies needed to be updated together. Updates `envinfo` from 7.8.1 to 7.14.0 - [Release notes](https://github.com/tabrindle/envinfo/releases) - [Changelog](https://github.com/tabrindle/envinfo/blob/main/CHANGELOG.md) - [Commits](https://github.com/tabrindle/envinfo/compare/7.8.1...v7.14.0) Updates `@types/envinfo` from 7.8.1 to 7.8.4 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/envinfo) --- updated-dependencies: - dependency-name: envinfo dependency-version: 7.14.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: "@types/envinfo" dependency-version: 7.8.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- packages/nativescript-envinfo/package.json | 4 ++-- packages/nativescript-envinfo/yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/nativescript-envinfo/package.json b/packages/nativescript-envinfo/package.json index 3599b65593..0dfe542565 100644 --- a/packages/nativescript-envinfo/package.json +++ b/packages/nativescript-envinfo/package.json @@ -9,7 +9,7 @@ "prepack": "tsc" }, "dependencies": { - "@types/envinfo": "^7.8.1", - "envinfo": "^7.8.1" + "@types/envinfo": "^7.8.4", + "envinfo": "^7.14.0" } } diff --git a/packages/nativescript-envinfo/yarn.lock b/packages/nativescript-envinfo/yarn.lock index 2bb724c50e..01b73dc01e 100644 --- a/packages/nativescript-envinfo/yarn.lock +++ b/packages/nativescript-envinfo/yarn.lock @@ -2,12 +2,12 @@ # yarn lockfile v1 -"@types/envinfo@^7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@types/envinfo/-/envinfo-7.8.1.tgz#1915df82c16d637e92146645c70db9360eb099c6" - integrity sha512-pTyshpmGxqB9lRwG75v2YR0oqKYpCrklOYlZWQ88z/JB0fimT8EVmYekuIwpU3IxPZDHSXCqXKzkCrtAcKY25g== +"@types/envinfo@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@types/envinfo/-/envinfo-7.8.4.tgz#f13ec1050b8e260d6d7c149ba5b99f65d2b74058" + integrity sha512-K5WaRgSlqjc408IyPbxOFnz7rVG9E8ELhj7XR3Ncui15EgeyIXTcCfmwrRnU4uEOCJQhzZRAQurYznEEc1dD2g== -envinfo@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +envinfo@^7.14.0: + version "7.14.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" + integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== From 8760c2c82a3feda89a174a53220d57fccb36ac9d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:14:53 -0700 Subject: [PATCH 042/136] chore(deps): bump ossf/scorecard-action from 2.4.0 to 2.4.2 (#5877) Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.0 to 2.4.2. - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/62b2cac7ed8198b15735ed49ab1e5cf35480ba46...05b42c624433fc40578a4040d5cf5e36ddca8cde) --- updated-dependencies: - dependency-name: ossf/scorecard-action dependency-version: 2.4.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index f330c1f444..dc81c096c7 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -38,7 +38,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2 with: results_file: results.sarif results_format: sarif From 7d08ff91ec5f3ef62be6aa13b5beb68ad8d1e895 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:15:27 -0700 Subject: [PATCH 043/136] chore(deps): bump actions/checkout from 2 to 5 (#5878) Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Commits](https://github.com/actions/checkout/compare/v2...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- .github/workflows/codeql-advanced.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/npm_release_cli.yml | 2 +- .github/workflows/npm_release_doctor.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/codeql-advanced.yml b/.github/workflows/codeql-advanced.yml index fff9451043..cb30eff64f 100644 --- a/.github/workflows/codeql-advanced.yml +++ b/.github/workflows/codeql-advanced.yml @@ -57,7 +57,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b3c9454a84..c0fb228961 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.3.0 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index ac03c94261..ffc42f0d8c 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,6 +17,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.3.0 - name: 'Dependency Review' uses: actions/dependency-review-action@595b5aeba73380359d98a5e087f648dbb0edce1b # v4.7.3 diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index b7fc03e487..d0ecbe0337 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -24,7 +24,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-node@v3 with: diff --git a/.github/workflows/npm_release_doctor.yml b/.github/workflows/npm_release_doctor.yml index d054ef2cf9..432334b3dd 100644 --- a/.github/workflows/npm_release_doctor.yml +++ b/.github/workflows/npm_release_doctor.yml @@ -28,7 +28,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - name: Setup run: npm install diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index dc81c096c7..f61fa6b6b9 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -33,7 +33,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.3.0 with: persist-credentials: false From b903cf944944b879a4f2935ffe23f16da5fe59f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:15:54 -0700 Subject: [PATCH 044/136] chore(deps): bump actions/setup-node from 3 to 5 (#5879) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 5. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v3...v5) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- .github/workflows/npm_release_cli.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index d0ecbe0337..fc54dbf601 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -26,7 +26,7 @@ jobs: - uses: actions/checkout@v5 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v5 with: node-version: 22.14.0 From 96ecae76bd636db134958e428b6a35c0aefdb520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulises=20Gasc=C3=B3n?= Date: Wed, 10 Sep 2025 22:57:34 +0200 Subject: [PATCH 045/136] Enhance Workflows Security (#5880) * chore: remove CodeQL workflow in favor of the advance one References: - https://github.com/NativeScript/nativescript-cli/actions/workflows/codeql-advanced.yml - https://github.com/NativeScript/nativescript-cli/actions/workflows/codeql.yml * feat: define workflow permissions * feat: pin dependencies in workflows --------- Co-authored-by: Nathan Walker --- .github/workflows/codeql-advanced.yml | 9 ++-- .github/workflows/codeql.yml | 62 ------------------------ .github/workflows/npm_release_cli.yml | 4 +- .github/workflows/npm_release_doctor.yml | 2 +- 4 files changed, 9 insertions(+), 68 deletions(-) delete mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql-advanced.yml b/.github/workflows/codeql-advanced.yml index cb30eff64f..d29a8e16ca 100644 --- a/.github/workflows/codeql-advanced.yml +++ b/.github/workflows/codeql-advanced.yml @@ -19,6 +19,9 @@ on: schedule: - cron: '21 2 * * 1' +permissions: + contents: read + jobs: analyze: name: Analyze (${{ matrix.language }}) @@ -57,7 +60,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` @@ -67,7 +70,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@d3678e237b9c32a6c9bffb3315c335f976f3549f # v3.30.2 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} @@ -95,6 +98,6 @@ jobs: exit 1 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@d3678e237b9c32a6c9bffb3315c335f976f3549f # v3.30.2 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index c0fb228961..0000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: "CodeQL" - -on: - push: - branches: ["main"] - pull_request: - branches: ["main"] - schedule: - - cron: "0 0 * * 1" - -permissions: - contents: read - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: ["javascript", "typescript"] - # CodeQL supports [ $supported-codeql-languages ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - - name: Checkout repository - uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.3.0 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 - with: - category: "/language:${{matrix.language}}" \ No newline at end of file diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index fc54dbf601..bb22e449ed 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -24,9 +24,9 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@v5 + - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1 with: node-version: 22.14.0 diff --git a/.github/workflows/npm_release_doctor.yml b/.github/workflows/npm_release_doctor.yml index 432334b3dd..7992167ebe 100644 --- a/.github/workflows/npm_release_doctor.yml +++ b/.github/workflows/npm_release_doctor.yml @@ -28,7 +28,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@v5 + - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 - name: Setup run: npm install From a1c39f6d7e9912b74c913a793adc3b6edf125574 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 16 Sep 2025 09:26:54 -0700 Subject: [PATCH 046/136] fix: remove lock from default clean (#5881) --- lib/commands/clean.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/commands/clean.ts b/lib/commands/clean.ts index 2d0608140d..62a00bf8ce 100644 --- a/lib/commands/clean.ts +++ b/lib/commands/clean.ts @@ -110,7 +110,6 @@ export class CleanCommand implements ICommand { constants.HOOKS_DIR_NAME, constants.PLATFORMS_DIR_NAME, constants.NODE_MODULES_FOLDER_NAME, - constants.PACKAGE_LOCK_JSON_FILE_NAME, ]; try { From 27e94e8bececb837ce901e37e9b1c0d4581603dd Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 16 Sep 2025 10:09:20 -0700 Subject: [PATCH 047/136] feat: config settings to use different bundlers (#5837) Introduces ability to configure other bundlers such as rspack, vite, etc. while still keeping a webpack default. --- lib/commands/embedding/embed.ts | 14 +- lib/commands/post-install.ts | 6 +- lib/commands/typings.ts | 30 +-- lib/common/header.ts | 4 +- lib/helpers/key-command-helper.ts | 6 +- lib/services/analytics-settings-service.ts | 8 +- .../bundler/bundler-compiler-service.ts | 178 ++++++++++++++---- 7 files changed, 180 insertions(+), 66 deletions(-) diff --git a/lib/commands/embedding/embed.ts b/lib/commands/embedding/embed.ts index f5c488cd46..fd3b58ac63 100644 --- a/lib/commands/embedding/embed.ts +++ b/lib/commands/embedding/embed.ts @@ -24,7 +24,7 @@ export class EmbedCommand extends PrepareCommand implements ICommand { private $logger: ILogger, private $fs: IFileSystem, - private $projectConfigService: IProjectConfigService + private $projectConfigService: IProjectConfigService, ) { super( $options, @@ -34,7 +34,7 @@ export class EmbedCommand extends PrepareCommand implements ICommand { $platformCommandParameter, $platformsDataService, $prepareDataService, - $migrateController + $migrateController, ); } @@ -59,8 +59,8 @@ export class EmbedCommand extends PrepareCommand implements ICommand { hostProjectPath, )} (resolved to: ${color.styleText( ["yellow", "dim"], - resolvedHostProjectPath - )}) does not exist.` + resolvedHostProjectPath, + )}) does not exist.`, ); return; } @@ -90,7 +90,7 @@ export class EmbedCommand extends PrepareCommand implements ICommand { if (!args[1]) { const hostProjectPath = this.getEmbedConfigForKey( "hostProjectPath", - platform + platform, ); if (hostProjectPath) { args[1] = hostProjectPath; @@ -100,7 +100,7 @@ export class EmbedCommand extends PrepareCommand implements ICommand { if (!args[2]) { const hostProjectModuleName = this.getEmbedConfigForKey( "hostProjectModuleName", - platform + platform, ); if (hostProjectModuleName) { args[2] = hostProjectModuleName; @@ -120,7 +120,7 @@ export class EmbedCommand extends PrepareCommand implements ICommand { // get the embed.. value, or fallback to embed. value return this.$projectConfigService.getValue( `embed.${platform}.${key}`, - this.$projectConfigService.getValue(`embed.${key}`) + this.$projectConfigService.getValue(`embed.${key}`), ); } } diff --git a/lib/commands/post-install.ts b/lib/commands/post-install.ts index c0a6ac8a45..6062467680 100644 --- a/lib/commands/post-install.ts +++ b/lib/commands/post-install.ts @@ -18,7 +18,7 @@ export class PostInstallCliCommand implements ICommand { private $settingsService: ISettingsService, private $analyticsService: IAnalyticsService, private $logger: ILogger, - private $hostInfo: IHostInfo + private $hostInfo: IHostInfo, ) {} public disableAnalytics = true; @@ -35,7 +35,7 @@ export class PostInstallCliCommand implements ICommand { // TODO: Check if this is the correct place, probably we should set this at the end of the command. await this.$fs.setCurrentUserAsOwner( this.$settingsService.getProfileDir(), - process.env.SUDO_USER + process.env.SUDO_USER, ); } } @@ -66,7 +66,7 @@ export class PostInstallCliCommand implements ICommand { this.$logger.info(""); this.$logger.printMarkdown( - "If you have any questions, check Stack Overflow: `https://stackoverflow.com/questions/tagged/nativescript` and our public Discord channel: `https://nativescript.org/discord`" + "If you have any questions, check Stack Overflow: `https://stackoverflow.com/questions/tagged/nativescript` and our public Discord channel: `https://nativescript.org/discord`", ); } } diff --git a/lib/commands/typings.ts b/lib/commands/typings.ts index 6811a247d8..9159e6f5f5 100644 --- a/lib/commands/typings.ts +++ b/lib/commands/typings.ts @@ -20,7 +20,7 @@ export class TypingsCommand implements ICommand { private $childProcess: IChildProcess, private $hostInfo: IHostInfo, private $staticConfig: IStaticConfig, - private $prompter: IPrompter + private $prompter: IPrompter, ) {} public async execute(args: string[]): Promise { @@ -35,7 +35,7 @@ export class TypingsCommand implements ICommand { if (this.$options.copyTo) { this.$fs.copyFile( path.resolve(this.$projectData.projectDir, "typings"), - this.$options.copyTo + this.$options.copyTo, ); typingsFolder = this.$options.copyTo; } @@ -43,7 +43,7 @@ export class TypingsCommand implements ICommand { if (result !== false) { this.$logger.info( "Typings have been generated in the following directory:", - typingsFolder + typingsFolder, ); } } @@ -56,7 +56,7 @@ export class TypingsCommand implements ICommand { private async resolveGradleDependencies(target: string) { const gradleHome = path.resolve( - process.env.GRADLE_USER_HOME ?? path.join(homedir(), `/.gradle`) + process.env.GRADLE_USER_HOME ?? path.join(homedir(), `/.gradle`), ); const gradleFiles = path.resolve(gradleHome, "caches/modules-2/files-2.1/"); @@ -92,7 +92,7 @@ export class TypingsCommand implements ICommand { const choices = await this.$prompter.promptForChoice( `Select dependencies to generate typings for (${color.greenBright( - target + target, )})`, items .sort((a, b) => { @@ -118,7 +118,7 @@ export class TypingsCommand implements ICommand { true, { optionsPerPage: process.stdout.rows - 6, // 6 lines are taken up by the instructions - } as Partial + } as Partial, ); this.$logger.clearScreen(); @@ -139,7 +139,7 @@ export class TypingsCommand implements ICommand { } catch (err) { this.$logger.trace( `Failed to resolve gradle dependencies for target "${target}"`, - err + err, ); } } @@ -151,13 +151,13 @@ export class TypingsCommand implements ICommand { "No .jar or .aar file specified. Please specify at least one of the following:", " - path to .jar file with --jar ", " - path to .aar file with --aar ", - ].join("\n") + ].join("\n"), ); return false; } this.$fs.ensureDirectoryExists( - path.resolve(this.$projectData.projectDir, "typings", "android") + path.resolve(this.$projectData.projectDir, "typings", "android"), ); const dtsGeneratorPath = path.resolve( @@ -165,7 +165,7 @@ export class TypingsCommand implements ICommand { "platforms", "android", "build-tools", - "dts-generator.jar" + "dts-generator.jar", ); if (!this.$fs.exists(dtsGeneratorPath)) { this.$logger.warn("No platforms folder found, preparing project now..."); @@ -173,7 +173,7 @@ export class TypingsCommand implements ICommand { this.$hostInfo.isWindows ? "ns.cmd" : "ns", ["prepare", "android"], "exit", - { stdio: "inherit", shell: this.$hostInfo.isWindows } + { stdio: "inherit", shell: this.$hostInfo.isWindows }, ); } @@ -206,7 +206,7 @@ export class TypingsCommand implements ICommand { path.resolve(this.$projectData.projectDir, "typings", "android"), ], "exit", - { stdio: "inherit" } + { stdio: "inherit" }, ); } @@ -216,7 +216,7 @@ export class TypingsCommand implements ICommand { } this.$fs.ensureDirectoryExists( - path.resolve(this.$projectData.projectDir, "typings", "ios") + path.resolve(this.$projectData.projectDir, "typings", "ios"), ); await this.$childProcess.spawnFromEvent( @@ -229,11 +229,11 @@ export class TypingsCommand implements ICommand { TNS_TYPESCRIPT_DECLARATIONS_PATH: path.resolve( this.$projectData.projectDir, "typings", - "ios" + "ios", ), }, stdio: "inherit", - } + }, ); } } diff --git a/lib/common/header.ts b/lib/common/header.ts index 6fb1f2c671..7c3d00643c 100644 --- a/lib/common/header.ts +++ b/lib/common/header.ts @@ -31,10 +31,10 @@ export function printHeader() { console.info(" " + color.dim("┌" + "─".repeat(width - 1) + "┐")); console.info( - " " + header + " ".repeat(width - headerLength) + color.dim("│") + " " + header + " ".repeat(width - headerLength) + color.dim("│"), ); console.info( - " " + tagLine + " ".repeat(width - tagLineLength) + color.dim("│") + " " + tagLine + " ".repeat(width - tagLineLength) + color.dim("│"), ); console.info(" " + color.dim("└" + "─".repeat(width - 1) + "┘")); } diff --git a/lib/helpers/key-command-helper.ts b/lib/helpers/key-command-helper.ts index 821a1ea113..59d9804e8c 100644 --- a/lib/helpers/key-command-helper.ts +++ b/lib/helpers/key-command-helper.ts @@ -115,18 +115,18 @@ export default class KeyCommandHelper implements IKeyCommandHelper { [ "", ` The CLI is ${color.underline( - `interactive` + `interactive`, )}, you can press the following keys any time (make sure the terminal has focus).`, "", ...commandHelp, "", - ].join("\n") + ].join("\n"), ); } public attachKeyCommands( platform: IKeyCommandPlatform, - processType: SupportedProcessType + processType: SupportedProcessType, ) { this.processType = processType; this.platform = platform; diff --git a/lib/services/analytics-settings-service.ts b/lib/services/analytics-settings-service.ts index 825ef0e682..1c44a8ffdf 100644 --- a/lib/services/analytics-settings-service.ts +++ b/lib/services/analytics-settings-service.ts @@ -19,7 +19,7 @@ class AnalyticsSettingsService implements IAnalyticsSettingsService { private $staticConfig: IStaticConfig, private $hostInfo: IHostInfo, private $osInfo: IOsInfo, - private $logger: ILogger + private $logger: ILogger, ) {} public async canDoRequest(): Promise { @@ -33,7 +33,7 @@ class AnalyticsSettingsService implements IAnalyticsSettingsService { @exported("analyticsSettingsService") public getClientId(): Promise { return this.getSettingValueOrDefault( - this.$staticConfig.ANALYTICS_INSTALLATION_ID_SETTING_NAME + this.$staticConfig.ANALYTICS_INSTALLATION_ID_SETTING_NAME, ); } @@ -54,11 +54,11 @@ class AnalyticsSettingsService implements IAnalyticsSettingsService { public async setUserSessionsCount( count: number, - projectName: string + projectName: string, ): Promise { return this.$userSettingsService.saveSetting( this.getSessionsProjectKey(projectName), - count + count, ); } diff --git a/lib/services/bundler/bundler-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts index 12f637b389..a888600bcf 100644 --- a/lib/services/bundler/bundler-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -50,6 +50,9 @@ interface IBundlerCompilation { staleAssets: string[]; } +/* for specific bundling debugging separate from logger */ +const debugLog = false; + export class BundlerCompilerService extends EventEmitter implements IBundlerCompilerService @@ -118,7 +121,9 @@ export class BundlerCompilerService (message as IBundlerEmitMessage).emittedFiles ) { message = message as IBundlerEmitMessage; - console.log("Received Vite IPC message:", message); + if (debugLog) { + console.log("Received Vite IPC message:", message); + } // Copy Vite output files directly to platform destination const distOutput = path.join(projectData.projectDir, "dist"); @@ -127,18 +132,19 @@ export class BundlerCompilerService this.$options.hostProjectModuleName, ); - console.log(`🔥 Copying from ${distOutput} to ${destDir}`); + if (debugLog) { + console.log(`🔥 Copying from ${distOutput} to ${destDir}`); + } - // For HMR updates, only copy changed files; for full builds, copy everything - if ( - message.isHMR && - message.changedFiles && - message.changedFiles.length > 0 - ) { - console.log( - "🔥 HMR update - copying only changed files for:", - message.changedFiles, - ); + // Determine which files to copy based on build type and changes + if (message.isHMR) { + // HMR updates: only copy changed files + if (debugLog) { + console.log( + "🔥 HMR update - copying only changed files for:", + message.changedFiles, + ); + } // For HTML template changes, we need to copy the component files that were rebuilt let filesToCopy = message.emittedFiles; @@ -155,24 +161,55 @@ export class BundlerCompilerService f === "bundle.mjs" || f === "bundle.mjs.map", ); + if (debugLog) { + console.log( + "🔥 HTML change detected - copying component files:", + filesToCopy, + ); + } + } + + this.copyViteBundleToNative(distOutput, destDir, filesToCopy); + } else if ( + message.buildType === "incremental" && + message.changedFiles && + message.changedFiles.length > 0 + ) { + // Incremental builds: only copy files that are likely affected by the changes + if (debugLog) { + console.log( + "🔥 Incremental build - copying only relevant files for:", + message.changedFiles, + ); + } + + const filesToCopy = this.getIncrementalFilesToCopy( + message.emittedFiles, + message.changedFiles, + ); + if (debugLog) { console.log( - "🔥 HTML change detected - copying component files:", + "🔥 Incremental build - files to copy:", filesToCopy, ); } this.copyViteBundleToNative(distOutput, destDir, filesToCopy); } else { - console.log("🔥 Full build - copying all files"); + if (debugLog) { + console.log("🔥 Full build - copying all files"); + } this.copyViteBundleToNative(distOutput, destDir); } // Resolve the promise on first build completion if (isFirstBundlerWatchCompilation) { isFirstBundlerWatchCompilation = false; - console.log( - "Vite first build completed, resolving compileWithWatch", - ); + if (debugLog) { + console.log( + "Vite first build completed, resolving compileWithWatch", + ); + } resolve(childProcess); } @@ -209,15 +246,19 @@ export class BundlerCompilerService }); if (message.isHMR) { - console.log( - "🔥 Skipping BUNDLER_COMPILATION_COMPLETE for HMR update - app will not restart", - ); + if (debugLog) { + console.log( + "🔥 Skipping BUNDLER_COMPILATION_COMPLETE for HMR update - app will not restart", + ); + } } else { // Only emit BUNDLER_COMPILATION_COMPLETE for non-HMR builds // This prevents the CLI from restarting the app during HMR updates - console.log( - "🔥 Emitting BUNDLER_COMPILATION_COMPLETE for full build", - ); + if (debugLog) { + console.log( + "🔥 Emitting BUNDLER_COMPILATION_COMPLETE for full build", + ); + } this.emit(BUNDLER_COMPILATION_COMPLETE, data); } return; @@ -522,7 +563,9 @@ export class BundlerCompilerService }); } - console.log("args:", args); + if (debugLog) { + console.log("args:", args); + } const childProcess = this.$childProcess.spawn( process.execPath, @@ -866,14 +909,21 @@ export class BundlerCompilerService specificFiles: string[] = null, ) { // Clean and copy Vite output to native platform folder - console.log(`Copying Vite bundle from "${distOutput}" to "${destDir}"`); + if (debugLog) { + console.log(`Copying Vite bundle from "${distOutput}" to "${destDir}"`); + } const fs = require("fs"); try { if (specificFiles) { - // HMR mode: only copy specific files - console.log("🔥 HMR: Copying specific files:", specificFiles); + // Selective mode: only copy specific files (HMR or incremental) + if (debugLog) { + console.log( + "🔥 Selective copy - copying specific files:", + specificFiles, + ); + } // Ensure destination directory exists fs.mkdirSync(destDir, { recursive: true }); @@ -890,11 +940,15 @@ export class BundlerCompilerService fs.copyFileSync(srcPath, destPath); - console.log(`🔥 HMR: Copied ${file}`); + if (debugLog) { + console.log(`🔥 Copied ${file}`); + } } } else { // Full build mode: clean and copy everything - console.log("🔥 Full build: Copying all files"); + if (debugLog) { + console.log("🔥 Full build: Copying all files"); + } // Clean destination directory if (fs.existsSync(destDir)) { @@ -916,6 +970,58 @@ export class BundlerCompilerService } } + private getIncrementalFilesToCopy( + emittedFiles: string[], + changedFiles: string[], + ): string[] { + // For incremental builds, we need to determine which emitted files are likely affected + // by the source file changes + + const filesToCopy: string[] = []; + + // Always copy bundle files as they contain the compiled source code + // ignoring vendor files as they are less likely to change frequently + const bundleFiles = emittedFiles.filter( + (file) => + !file.includes("vendor") && + (file.includes("bundle") || + file.includes("main") || + file.includes("app") || + file.endsWith(".mjs") || + file.endsWith(".js")), + ); + filesToCopy.push(...bundleFiles); + + // Always copy source maps for debugging + const sourceMapFiles = emittedFiles.filter( + (file) => !file.includes("vendor") && file.endsWith(".map"), + ); + filesToCopy.push(...sourceMapFiles); + + // Only handle assets if they're explicitly referenced in the changed files + const hasAssetChanges = changedFiles.some( + (file) => + file.includes("/assets/") || + file.includes("/static/") || + file.includes("/public/"), + ); + + if (hasAssetChanges) { + // Only copy assets if there are explicit asset-related changes + const assetFiles = emittedFiles.filter( + (file) => + file.includes("assets/") || + file.includes("static/") || + file.includes("fonts/") || + file.includes("images/"), + ); + filesToCopy.push(...assetFiles); + } + + // Remove duplicates and return + return [...new Set(filesToCopy)]; + } + private notifyHMRClients(message: any) { // Send WebSocket notification to HMR clients try { @@ -925,18 +1031,26 @@ export class BundlerCompilerService const ws = new WebSocket("ws://localhost:24678"); ws.on("open", () => { - console.log("🔥 Sending HMR notification to bridge:", message.type); + if (debugLog) { + console.log("🔥 Sending HMR notification to bridge:", message.type); + } ws.send(JSON.stringify(message)); ws.close(); }); ws.on("error", () => { // HMR bridge not available, which is fine - console.log("🔥 HMR bridge not available (this is normal without HMR)"); + if (debugLog) { + console.log( + "🔥 HMR bridge not available (this is normal without HMR)", + ); + } }); } catch (error) { // WebSocket not available, which is fine - console.log("🔥 WebSocket not available for HMR notifications"); + if (debugLog) { + console.log("🔥 WebSocket not available for HMR notifications"); + } } } From b09510f5c994226030097332b6f0996c21d1d96c Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 26 Sep 2025 12:05:38 -0700 Subject: [PATCH 048/136] fix(config): using set with undefined (#5883) --- lib/commands/config.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/commands/config.ts b/lib/commands/config.ts index 83f4c8369c..8689880fcd 100644 --- a/lib/commands/config.ts +++ b/lib/commands/config.ts @@ -91,7 +91,8 @@ export class ConfigSetCommand implements ICommand { const convertedValue = this.getConvertedValue(value); const existingKey = current !== undefined; const keyDisplay = color.green(key); - const currentDisplay = color.yellow(current); + // when current is undefined, return empty string to avoid throw + const currentDisplay = current ? color.yellow(current) : ""; const updatedDisplay = color.cyan(convertedValue); this.$logger.info( From 7c40e2e541363f4102fc6592c15190fddf96abc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 09:53:17 -0700 Subject: [PATCH 049/136] chore(deps): bump github/codeql-action from 3.30.0 to 3.30.5 (#5885) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.0 to 3.30.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v3.30.0...3599b3baa15b485a2e49ef411a7a4bb2452e7f93) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-advanced.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-advanced.yml b/.github/workflows/codeql-advanced.yml index d29a8e16ca..82a2e91ab7 100644 --- a/.github/workflows/codeql-advanced.yml +++ b/.github/workflows/codeql-advanced.yml @@ -70,7 +70,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@d3678e237b9c32a6c9bffb3315c335f976f3549f # v3.30.2 + uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} @@ -98,6 +98,6 @@ jobs: exit 1 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@d3678e237b9c32a6c9bffb3315c335f976f3549f # v3.30.2 + uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index f61fa6b6b9..110c3abea8 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -68,6 +68,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0 + uses: github/codeql-action/upload-sarif@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 with: sarif_file: results.sarif \ No newline at end of file From dc18d5f8e6f31e0ad0cd2d23b76601e9b081db0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 10:01:08 -0700 Subject: [PATCH 050/136] chore(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#5886) Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.2 to 2.4.3. - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/05b42c624433fc40578a4040d5cf5e36ddca8cde...4eaacf0543bb3f2c246792bd56e8cdeffafb205a) --- updated-dependencies: - dependency-name: ossf/scorecard-action dependency-version: 2.4.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 110c3abea8..67b5dc4a4f 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -38,7 +38,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2 + uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 with: results_file: results.sarif results_format: sarif From 259e1ecd4bd3719c50b3a7609afe9a2ab62cdfd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 10:01:23 -0700 Subject: [PATCH 051/136] chore(deps): bump step-security/harden-runner from 2.13.0 to 2.13.1 (#5887) Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.13.0 to 2.13.1. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/ec9f2d5744a09debf3a187a3f4f675c53b671911...f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-version: 2.13.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/npm_release_cli.yml | 2 +- .github/workflows/npm_release_doctor.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index bb22e449ed..e6a4935742 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 with: egress-policy: audit diff --git a/.github/workflows/npm_release_doctor.yml b/.github/workflows/npm_release_doctor.yml index 7992167ebe..f3a9d23970 100644 --- a/.github/workflows/npm_release_doctor.yml +++ b/.github/workflows/npm_release_doctor.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 with: egress-policy: audit From 143a776a654ce4876aaba4de06554bd6c4ce9093 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 11:32:49 -0700 Subject: [PATCH 052/136] chore(deps): bump actions/checkout from 2.7.0 to 5.0.0 (#5888) Bumps [actions/checkout](https://github.com/actions/checkout) from 2.7.0 to 5.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2.7.0...08c6903cd8c0fde910a37f88322edcfb5dd907a8) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-advanced.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/npm_release_cli.yml | 2 +- .github/workflows/npm_release_doctor.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/codeql-advanced.yml b/.github/workflows/codeql-advanced.yml index 82a2e91ab7..75b2731db8 100644 --- a/.github/workflows/codeql-advanced.yml +++ b/.github/workflows/codeql-advanced.yml @@ -60,7 +60,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index ffc42f0d8c..e7d1e78c5d 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,6 +17,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v4.3.0 - name: 'Dependency Review' uses: actions/dependency-review-action@595b5aeba73380359d98a5e087f648dbb0edce1b # v4.7.3 diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index e6a4935742..deaeac0126 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -24,7 +24,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1 with: diff --git a/.github/workflows/npm_release_doctor.yml b/.github/workflows/npm_release_doctor.yml index f3a9d23970..aad6142ed1 100644 --- a/.github/workflows/npm_release_doctor.yml +++ b/.github/workflows/npm_release_doctor.yml @@ -28,7 +28,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Setup run: npm install diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 67b5dc4a4f..54868076e0 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -33,7 +33,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v4.3.0 with: persist-credentials: false From 10cae64f2647c141c8465832a43530275f01b811 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 12:02:24 -0700 Subject: [PATCH 053/136] chore(deps): bump actions/setup-node from 3.9.1 to 5.0.0 (#5889) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3.9.1 to 5.0.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/3235b876344d2a9aa001b8d1453c930bba69e610...a0853c24544627f65ddf259abe73b1d18a591444) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/npm_release_cli.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index deaeac0126..d19bd589ac 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -26,7 +26,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version: 22.14.0 From f76b07ec4de9f4059656b95fc5287a52ed78a746 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 12:02:55 -0700 Subject: [PATCH 054/136] chore(deps-dev): bump mocha from 11.1.0 to 11.7.4 (#5890) Bumps [mocha](https://github.com/mochajs/mocha) from 11.1.0 to 11.7.4. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/main/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v11.1.0...v11.7.4) --- updated-dependencies: - dependency-name: mocha dependency-version: 11.7.4 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 134 ++++++++++++---------------------------------- package.json | 2 +- 2 files changed, 36 insertions(+), 100 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8b404d2676..196db77c88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,7 +114,7 @@ "husky": "9.1.7", "istanbul": "0.4.5", "lint-staged": "~15.5.2", - "mocha": "11.1.0", + "mocha": "11.7.4", "sinon": "19.0.5", "source-map-support": "0.5.21", "xml2js": ">=0.5.0" @@ -2134,16 +2134,6 @@ "node": ">=0.4.2" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", @@ -6962,6 +6952,16 @@ "node": ">=8" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -8313,29 +8313,30 @@ } }, "node_modules/mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", - "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "version": "11.7.4", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.4.tgz", + "integrity": "sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", + "chokidar": "^4.0.1", "debug": "^4.3.5", - "diff": "^5.2.0", + "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", + "minimatch": "^9.0.5", "ms": "^2.1.3", + "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", - "workerpool": "^6.5.1", + "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" @@ -8348,20 +8349,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/mocha/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -8369,42 +8356,14 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/mocha/node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/mocha/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=0.3.1" } }, "node_modules/mocha/node_modules/has-flag": { @@ -8417,19 +8376,6 @@ "node": ">=8" } }, - "node_modules/mocha/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -8444,29 +8390,19 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" + "node": ">=16 || 14 >=14.17" }, - "engines": { - "node": ">=8.10.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/supports-color": { @@ -12696,9 +12632,9 @@ "license": "MIT" }, "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, "license": "Apache-2.0" }, diff --git a/package.json b/package.json index 2641073dca..ae85390797 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "husky": "9.1.7", "istanbul": "0.4.5", "lint-staged": "~15.5.2", - "mocha": "11.1.0", + "mocha": "11.7.4", "sinon": "19.0.5", "source-map-support": "0.5.21", "xml2js": ">=0.5.0" From 2c079a85c4d7e520829abea4a9efd944b1658833 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:54:15 -0700 Subject: [PATCH 055/136] chore(deps): bump @npmcli/arborist from 9.1.4 to 9.1.5 (#5891) Bumps [@npmcli/arborist](https://github.com/npm/cli/tree/HEAD/workspaces/arborist) from 9.1.4 to 9.1.5. - [Release notes](https://github.com/npm/cli/releases) - [Changelog](https://github.com/npm/cli/blob/latest/workspaces/arborist/CHANGELOG.md) - [Commits](https://github.com/npm/cli/commits/arborist-v9.1.5/workspaces/arborist) --- updated-dependencies: - dependency-name: "@npmcli/arborist" dependency-version: 9.1.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 704 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 658 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index 196db77c88..bf0f530353 100644 --- a/package-lock.json +++ b/package-lock.json @@ -981,41 +981,40 @@ } }, "node_modules/@npmcli/arborist": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.4.tgz", - "integrity": "sha512-2Co31oEFlzT9hYjGahGL4PqDXXpA18tX9yu55j5on+m2uDiyBoljQjHNnnNVCji4pFUjawlHi23tQ4j2A5gHow==", + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.5.tgz", + "integrity": "sha512-aUaE3vMilrPUV4M98NGB0yHqAKGLIxfXMFbxMm2Aw66V35hfS3cx3SIuj1Ptf8sBwwvD/Gbp4KlGPZOfKCApfg==", "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^4.0.0", "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/metavuln-calculator": "^9.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", "@npmcli/name-from-folder": "^3.0.0", "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.1", + "@npmcli/package-json": "^7.0.0", "@npmcli/query": "^4.0.0", "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", + "@npmcli/run-script": "^10.0.0", "bin-links": "^5.0.0", - "cacache": "^19.0.1", + "cacache": "^20.0.1", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^8.0.0", + "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", "nopt": "^8.0.0", "npm-install-checks": "^7.1.0", - "npm-package-arg": "^12.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.1", - "pacote": "^21.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "proggy": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^4.0.0", "semver": "^7.3.7", "ssri": "^12.0.0", "treeverse": "^3.0.0", @@ -1028,7 +1027,164 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/minimatch": { + "node_modules/@npmcli/arborist/node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@npmcli/git": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.0.tgz", + "integrity": "sha512-vnz7BVGtOctJAIHouCJdvWBhsTVSICMeUgZo2c7XAi5d5Rrl80S1H7oPym7K03cRuinK5Q6s2dw36+PgXQTcMA==", + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@npmcli/package-json": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.1.tgz", + "integrity": "sha512-956YUeI0YITbk2+KnirCkD19HLzES0habV+Els+dyZaVsaM6VGSiNwnRu6t3CZaqDLz4KXy2zx+0N/Zy6YjlAA==", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^11.0.3", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@npmcli/run-script": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.0.tgz", + "integrity": "sha512-vaQj4nccJbAslopIvd49pQH2NhUp7G9pY4byUtmwhe37ZZuubGrx0eB9hW2F37uVNRuDDK6byFGXF+7JCuMSZg==", + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@sigstore/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.0.0.tgz", + "integrity": "sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg==", + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@sigstore/sign": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.0.1.tgz", + "integrity": "sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@sigstore/tuf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.0.tgz", + "integrity": "sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@sigstore/verify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.0.0.tgz", + "integrity": "sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@tufjs/models": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.0.0.tgz", + "integrity": "sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ==", + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/@tufjs/models/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", @@ -1043,6 +1199,245 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@npmcli/arborist/node_modules/cacache": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", + "integrity": "sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^11.0.3", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.0.tgz", + "integrity": "sha512-gEf705MZLrDPkbbhi8PnoO4ZwYgKoNL+ISZ3AjZMht2r3N5tuTwncyDi6Fv2/qDnMmZxgs0yI8WDOyR8q3G+SQ==", + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/arborist/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/arborist/node_modules/make-fetch-happen": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", + "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.0.tgz", + "integrity": "sha512-+t2etZAGcB7TbbLHfDwooV9ppB2LhhcT6A+L9cahsf9mEUAoQ6CktLEVvEnpD0N5CkX7zJqnPGaFtoQDy9EkHQ==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/npm-pick-manifest": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.1.tgz", + "integrity": "sha512-HnU7FYSWbo7dTVHtK0G+BXbZ0aIfxz/aUCVLN0979Ec6rGUX5cJ6RbgVx5fqb5G31ufz+BVFA7y1SkRTPVNoVQ==", + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/npm-registry-fetch": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.0.0.tgz", + "integrity": "sha512-DFxSAemHUwT/POaXAOY4NJmEWBPB0oKbwD6FFDE9hnt1nORkt/FXvgjD4hQjoKoHw9u0Ezws9SPXwV7xE/Gyww==", + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/pacote": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", + "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^12.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/arborist/node_modules/sigstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.0.0.tgz", + "integrity": "sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/tuf-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.0.0.tgz", + "integrity": "sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==", + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.0.0", + "debug": "^4.4.1", + "make-fetch-happen": "^15.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/@npmcli/fs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", @@ -1091,42 +1486,178 @@ } }, "node_modules/@npmcli/map-workspaces": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz", - "integrity": "sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-5.0.0.tgz", + "integrity": "sha512-+YJN6+BIQEC5QL4EqffJ2I1S9ySspwn7GP7uQINtZhf3uy7P0KnnIg+Ab5WeSUTZYpg+jn3GSfMme2FutB7qEQ==", "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0" + "@npmcli/package-json": "^7.0.0", + "glob": "^11.0.3", + "minimatch": "^10.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@npmcli/map-workspaces/node_modules/@npmcli/git": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.0.tgz", + "integrity": "sha512-vnz7BVGtOctJAIHouCJdvWBhsTVSICMeUgZo2c7XAi5d5Rrl80S1H7oPym7K03cRuinK5Q6s2dw36+PgXQTcMA==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/@npmcli/package-json": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.1.tgz", + "integrity": "sha512-956YUeI0YITbk2+KnirCkD19HLzES0habV+Els+dyZaVsaM6VGSiNwnRu6t3CZaqDLz4KXy2zx+0N/Zy6YjlAA==", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^11.0.3", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/hosted-git-info": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.0.tgz", + "integrity": "sha512-gEf705MZLrDPkbbhi8PnoO4ZwYgKoNL+ISZ3AjZMht2r3N5tuTwncyDi6Fv2/qDnMmZxgs0yI8WDOyR8q3G+SQ==", + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/npm-package-arg": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.0.tgz", + "integrity": "sha512-+t2etZAGcB7TbbLHfDwooV9ppB2LhhcT6A+L9cahsf9mEUAoQ6CktLEVvEnpD0N5CkX7zJqnPGaFtoQDy9EkHQ==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/npm-pick-manifest": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.1.tgz", + "integrity": "sha512-HnU7FYSWbo7dTVHtK0G+BXbZ0aIfxz/aUCVLN0979Ec6rGUX5cJ6RbgVx5fqb5G31ufz+BVFA7y1SkRTPVNoVQ==", + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.1.tgz", - "integrity": "sha512-B7ziEnkSmnauecEvFbg9h0d2CVa3uJudd9bTDc9vScfYdRETkQkCriFiYCV3PXE++igd5JRw35WJz902HnGrCg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.2.tgz", + "integrity": "sha512-eESzlCRLuD30qYefT2jYZTUepgu9DNJQdXABGGxjkir055x2UtnpNfDZCA6OJxButQNgxNKc9AeTchYxSgbMCw==", "license": "ISC", "dependencies": { - "cacache": "^19.0.0", + "cacache": "^20.0.0", "json-parse-even-better-errors": "^4.0.0", "pacote": "^21.0.0", "proc-log": "^5.0.0", @@ -1136,6 +1667,100 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/@npmcli/metavuln-calculator/node_modules/cacache": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", + "integrity": "sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^11.0.3", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/name-from-folder": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz", @@ -9987,19 +10612,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/read-package-json-fast": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", - "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/read-package-up": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", From 2c2354860fc7ff5b9e6f061fc988c7cef4384fc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:54:38 -0700 Subject: [PATCH 056/136] chore(deps): bump simple-git from 3.27.0 to 3.28.0 (#5892) Bumps [simple-git](https://github.com/steveukx/git-js/tree/HEAD/simple-git) from 3.27.0 to 3.28.0. - [Release notes](https://github.com/steveukx/git-js/releases) - [Changelog](https://github.com/steveukx/git-js/blob/main/simple-git/CHANGELOG.md) - [Commits](https://github.com/steveukx/git-js/commits/simple-git@3.28.0/simple-git) --- updated-dependencies: - dependency-name: simple-git dependency-version: 3.28.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf0f530353..a5b9950b10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "qrcode-terminal": "0.12.0", "semver": "7.7.2", "shelljs": "0.10.0", - "simple-git": "3.27.0", + "simple-git": "3.28.0", "simple-plist": "1.4.0", "source-map": "0.7.6", "tar": "7.4.3", @@ -11660,14 +11660,14 @@ } }, "node_modules/simple-git": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", - "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz", + "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==", "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.5" + "debug": "^4.4.0" }, "funding": { "type": "github", diff --git a/package.json b/package.json index ae85390797..9318fc41c8 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "qrcode-terminal": "0.12.0", "semver": "7.7.2", "shelljs": "0.10.0", - "simple-git": "3.27.0", + "simple-git": "3.28.0", "simple-plist": "1.4.0", "source-map": "0.7.6", "tar": "7.4.3", From ce7a6f61552ebca770770003ef20d94af062b1e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:54:52 -0700 Subject: [PATCH 057/136] chore(deps): bump pacote from 21.0.0 to 21.0.3 (#5893) Bumps [pacote](https://github.com/npm/pacote) from 21.0.0 to 21.0.3. - [Release notes](https://github.com/npm/pacote/releases) - [Changelog](https://github.com/npm/pacote/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/pacote/compare/v21.0.0...v21.0.3) --- updated-dependencies: - dependency-name: pacote dependency-version: 21.0.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 664 +++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 2 files changed, 533 insertions(+), 133 deletions(-) diff --git a/package-lock.json b/package-lock.json index a5b9950b10..ade0f3b8fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "nativescript-dev-xcode": "0.8.1", "open": "8.4.2", "ora": "5.4.1", - "pacote": "21.0.0", + "pacote": "21.0.3", "pbxproj-dom": "1.2.0", "plist": "3.1.0", "plist-merge-patch": "0.2.0", @@ -1928,77 +1928,209 @@ "license": "MIT" }, "node_modules/@sigstore/bundle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", - "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0" + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", - "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.0.0.tgz", + "integrity": "sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg==", "license": "Apache-2.0", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", - "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", "license": "Apache-2.0", "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/sign": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", - "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.0.1.tgz", + "integrity": "sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA==", "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "make-fetch-happen": "^14.0.2", + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", "proc-log": "^5.0.0", "promise-retry": "^2.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/sign/node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", + "integrity": "sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^11.0.3", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/sign/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", + "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@sigstore/tuf": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", - "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.0.tgz", + "integrity": "sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w==", "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.4.1", - "tuf-js": "^3.0.1" + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/verify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", - "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.0.0.tgz", + "integrity": "sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw==", "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sindresorhus/is": { @@ -2133,16 +2265,16 @@ } }, "node_modules/@tufjs/models": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", - "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.0.0.tgz", + "integrity": "sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ==", "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^9.0.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@tufjs/models/node_modules/minimatch": { @@ -9849,28 +9981,28 @@ "license": "BlueOak-1.0.0" }, "node_modules/pacote": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", - "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", + "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", "license": "ISC", "dependencies": { - "@npmcli/git": "^6.0.0", + "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", + "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^10.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", + "sigstore": "^4.0.0", "ssri": "^12.0.0", - "tar": "^6.1.11" + "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" @@ -9879,116 +10011,252 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/pacote/node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/pacote/node_modules/@npmcli/git": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.0.tgz", + "integrity": "sha512-vnz7BVGtOctJAIHouCJdvWBhsTVSICMeUgZo2c7XAi5d5Rrl80S1H7oPym7K03cRuinK5Q6s2dw36+PgXQTcMA==", "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", + "node_modules/pacote/node_modules/@npmcli/package-json": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.1.tgz", + "integrity": "sha512-956YUeI0YITbk2+KnirCkD19HLzES0habV+Els+dyZaVsaM6VGSiNwnRu6t3CZaqDLz4KXy2zx+0N/Zy6YjlAA==", + "license": "ISC", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "@npmcli/git": "^7.0.0", + "glob": "^11.0.3", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">= 8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/pacote/node_modules/@npmcli/run-script": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.0.tgz", + "integrity": "sha512-vaQj4nccJbAslopIvd49pQH2NhUp7G9pY4byUtmwhe37ZZuubGrx0eB9hW2F37uVNRuDDK6byFGXF+7JCuMSZg==", "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/pacote/node_modules/cacache": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", + "integrity": "sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^11.0.3", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "unique-filename": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "node_modules/pacote/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.0.tgz", + "integrity": "sha512-gEf705MZLrDPkbbhi8PnoO4ZwYgKoNL+ISZ3AjZMht2r3N5tuTwncyDi6Fv2/qDnMmZxgs0yI8WDOyR8q3G+SQ==", "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "lru-cache": "^11.1.0" }, "engines": { - "node": ">= 8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/pacote/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/pacote/node_modules/make-fetch-happen": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", + "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pacote/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/pacote/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/pacote/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.0.tgz", + "integrity": "sha512-+t2etZAGcB7TbbLHfDwooV9ppB2LhhcT6A+L9cahsf9mEUAoQ6CktLEVvEnpD0N5CkX7zJqnPGaFtoQDy9EkHQ==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/pacote/node_modules/npm-pick-manifest": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.1.tgz", + "integrity": "sha512-HnU7FYSWbo7dTVHtK0G+BXbZ0aIfxz/aUCVLN0979Ec6rGUX5cJ6RbgVx5fqb5G31ufz+BVFA7y1SkRTPVNoVQ==", + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/pacote/node_modules/npm-registry-fetch": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.0.0.tgz", + "integrity": "sha512-DFxSAemHUwT/POaXAOY4NJmEWBPB0oKbwD6FFDE9hnt1nORkt/FXvgjD4hQjoKoHw9u0Ezws9SPXwV7xE/Gyww==", + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/pacote/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/pako": { "version": "1.0.11", @@ -11643,20 +11911,20 @@ "license": "ISC" }, "node_modules/sigstore": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", - "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.0.0.tgz", + "integrity": "sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q==", "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "@sigstore/sign": "^3.1.0", - "@sigstore/tuf": "^3.1.0", - "@sigstore/verify": "^2.1.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/simple-git": { @@ -12775,17 +13043,149 @@ "license": "0BSD" }, "node_modules/tuf-js": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", - "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.0.0.tgz", + "integrity": "sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==", "license": "MIT", "dependencies": { - "@tufjs/models": "3.0.1", + "@tufjs/models": "4.0.0", "debug": "^4.4.1", - "make-fetch-happen": "^14.0.3" + "make-fetch-happen": "^15.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/tuf-js/node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/tuf-js/node_modules/cacache": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", + "integrity": "sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^11.0.3", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/tuf-js/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", + "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tunnel": { diff --git a/package.json b/package.json index 9318fc41c8..890e6382b1 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "nativescript-dev-xcode": "0.8.1", "open": "8.4.2", "ora": "5.4.1", - "pacote": "21.0.0", + "pacote": "21.0.3", "pbxproj-dom": "1.2.0", "plist": "3.1.0", "plist-merge-patch": "0.2.0", From 25ed9dbd66354c9eeeaaf542362b3b622dfaa569 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:55:05 -0700 Subject: [PATCH 058/136] chore(deps): bump axios from 1.11.0 to 1.12.2 (#5894) Bumps [axios](https://github.com/axios/axios) from 1.11.0 to 1.12.2. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.11.0...v1.12.2) --- updated-dependencies: - dependency-name: axios dependency-version: 1.12.2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index ade0f3b8fe..706e44f6ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@nstudio/trapezedev-project": "7.2.3", "@rigor789/resolve-package-path": "1.0.7", "archiver": "^7.0.1", - "axios": "1.11.0", + "axios": "1.12.2", "byline": "5.0.0", "chokidar": "4.0.3", "cli-table3": "0.6.5", @@ -3313,9 +3313,9 @@ } }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", diff --git a/package.json b/package.json index 890e6382b1..9b779b0cfb 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@rigor789/resolve-package-path": "1.0.7", "@nstudio/trapezedev-project": "7.2.3", "archiver": "^7.0.1", - "axios": "1.11.0", + "axios": "1.12.2", "byline": "5.0.0", "chokidar": "4.0.3", "cli-table3": "0.6.5", From 83e1f86422c486fff453bcf3af4c391340c6b49a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:55:24 -0700 Subject: [PATCH 059/136] chore(deps-dev): bump @types/lodash from 4.17.15 to 4.17.20 (#5895) Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.15 to 4.17.20. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash) --- updated-dependencies: - dependency-name: "@types/lodash" dependency-version: 4.17.20 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 706e44f6ed..a4312544cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,7 +79,7 @@ "@types/chai-as-promised": "8.0.2", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", - "@types/lodash": "4.17.15", + "@types/lodash": "4.17.20", "@types/marked-terminal": "^6.1.1", "@types/node": "^22.0.0", "@types/npmcli__arborist": "^6.3.0", @@ -2400,9 +2400,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==", + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 9b779b0cfb..d90f7bc583 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "@types/chai-as-promised": "8.0.2", "@types/color": "4.2.0", "@types/convert-source-map": "2.0.3", - "@types/lodash": "4.17.15", + "@types/lodash": "4.17.20", "@types/marked-terminal": "^6.1.1", "@types/node": "^22.0.0", "@types/npmcli__arborist": "^6.3.0", From 434606a34bc235fd1c3398171328e1119dc40a0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:55:48 -0700 Subject: [PATCH 060/136] chore(deps-dev): bump @types/node from 22.18.1 to 22.18.8 (#5897) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.18.1 to 22.18.8. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 22.18.8 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a4312544cb..213ede21c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2433,9 +2433,9 @@ } }, "node_modules/@types/node": { - "version": "22.18.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.1.tgz", - "integrity": "sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==", + "version": "22.18.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz", + "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" From a9c11ec4ce36df2b9ba7c653f0f22e61e6e0e0be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:56:14 -0700 Subject: [PATCH 061/136] chore(deps): bump tar from 7.4.3 to 7.5.1 (#5898) Bumps [tar](https://github.com/isaacs/node-tar) from 7.4.3 to 7.5.1. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.1) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 141 +++------------------------------------------- package.json | 2 +- 2 files changed, 9 insertions(+), 134 deletions(-) diff --git a/package-lock.json b/package-lock.json index 213ede21c7..658284897d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "simple-git": "3.28.0", "simple-plist": "1.4.0", "source-map": "0.7.6", - "tar": "7.4.3", + "tar": "7.5.1", "ts-morph": "25.0.1", "tunnel": "0.0.6", "typescript": "5.7.3", @@ -1450,25 +1450,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/git": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", - "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/@npmcli/installed-package-contents": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", @@ -1779,24 +1760,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/package-json": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", - "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/@npmcli/promise-spawn": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", @@ -1830,23 +1793,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/run-script": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", - "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/@nstudio/trapezedev-project": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@nstudio/trapezedev-project/-/trapezedev-project-7.2.3.tgz", @@ -7088,18 +7034,6 @@ "node": "*" } }, - "node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -9020,9 +8954,9 @@ "license": "ISC" }, "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -9481,21 +9415,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", - "license": "ISC", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/npm-packlist": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.1.tgz", @@ -9508,49 +9427,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-pick-manifest": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", - "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", - "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", - "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -12708,16 +12584,15 @@ } }, "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", "license": "ISC", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { diff --git a/package.json b/package.json index d90f7bc583..8b8a9a339a 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "simple-git": "3.28.0", "simple-plist": "1.4.0", "source-map": "0.7.6", - "tar": "7.4.3", + "tar": "7.5.1", "ts-morph": "25.0.1", "tunnel": "0.0.6", "typescript": "5.7.3", From e154b183051042c116612997d1fdb30bf28c574f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:56:29 -0700 Subject: [PATCH 062/136] chore(deps): bump envinfo from 7.14.0 to 7.15.0 in /packages/nativescript-envinfo (#5899) chore(deps): bump envinfo in /packages/nativescript-envinfo Bumps [envinfo](https://github.com/tabrindle/envinfo) from 7.14.0 to 7.15.0. - [Release notes](https://github.com/tabrindle/envinfo/releases) - [Changelog](https://github.com/tabrindle/envinfo/blob/main/CHANGELOG.md) - [Commits](https://github.com/tabrindle/envinfo/compare/v7.14.0...v7.15.0) --- updated-dependencies: - dependency-name: envinfo dependency-version: 7.15.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/nativescript-envinfo/package.json | 2 +- packages/nativescript-envinfo/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/nativescript-envinfo/package.json b/packages/nativescript-envinfo/package.json index 0dfe542565..cb83c1b571 100644 --- a/packages/nativescript-envinfo/package.json +++ b/packages/nativescript-envinfo/package.json @@ -10,6 +10,6 @@ }, "dependencies": { "@types/envinfo": "^7.8.4", - "envinfo": "^7.14.0" + "envinfo": "^7.15.0" } } diff --git a/packages/nativescript-envinfo/yarn.lock b/packages/nativescript-envinfo/yarn.lock index 01b73dc01e..071b293ca8 100644 --- a/packages/nativescript-envinfo/yarn.lock +++ b/packages/nativescript-envinfo/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.yarnpkg.com/@types/envinfo/-/envinfo-7.8.4.tgz#f13ec1050b8e260d6d7c149ba5b99f65d2b74058" integrity sha512-K5WaRgSlqjc408IyPbxOFnz7rVG9E8ELhj7XR3Ncui15EgeyIXTcCfmwrRnU4uEOCJQhzZRAQurYznEEc1dD2g== -envinfo@^7.14.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" - integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== +envinfo@^7.15.0: + version "7.15.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.15.0.tgz#7d5a6d464df38708ee5ac135289c88f0c9bffa7e" + integrity sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g== From 08b6375559e21a6905cd4c87ea867f4fa4a491e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:56:40 -0700 Subject: [PATCH 063/136] chore(deps-dev): bump mocha from 11.7.2 to 11.7.4 in /packages/doctor (#5900) Bumps [mocha](https://github.com/mochajs/mocha) from 11.7.2 to 11.7.4. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/main/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v11.7.2...v11.7.4) --- updated-dependencies: - dependency-name: mocha dependency-version: 11.7.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/doctor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 59ac6b966f..20b567f096 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -58,7 +58,7 @@ "grunt-ts": "6.0.0-beta.22", "grunt-tslint": "5.0.2", "istanbul": "0.4.5", - "mocha": "11.7.2", + "mocha": "11.7.4", "rimraf": "6.0.1", "tslint": "6.1.3", "tslint-microsoft-contrib": "6.2.0", From a9329b82f0e90786c72a3b6d789473a673b96547 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:49:13 -0800 Subject: [PATCH 064/136] chore(deps): bump actions/dependency-review-action from 4.7.3 to 4.8.1 (#5901) Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.7.3 to 4.8.1. - [Release notes](https://github.com/actions/dependency-review-action/releases) - [Commits](https://github.com/actions/dependency-review-action/compare/595b5aeba73380359d98a5e087f648dbb0edce1b...40c09b7dc99638e5ddb0bfd91c1673effc064d8a) --- updated-dependencies: - dependency-name: actions/dependency-review-action dependency-version: 4.8.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependency-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index e7d1e78c5d..6008389057 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -19,4 +19,4 @@ jobs: - name: 'Checkout Repository' uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v4.3.0 - name: 'Dependency Review' - uses: actions/dependency-review-action@595b5aeba73380359d98a5e087f648dbb0edce1b # v4.7.3 + uses: actions/dependency-review-action@40c09b7dc99638e5ddb0bfd91c1673effc064d8a # v4.8.1 From 552baee9e1f4a7828a2b8b688588dab64bb1b3e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:49:37 -0800 Subject: [PATCH 065/136] chore(deps): bump github/codeql-action from 3.30.5 to 4.31.2 (#5902) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.5 to 4.31.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/3599b3baa15b485a2e49ef411a7a4bb2452e7f93...0499de31b99561a6d14a36a5f662c2a54f91beee) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.2 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-advanced.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-advanced.yml b/.github/workflows/codeql-advanced.yml index 75b2731db8..71100719e1 100644 --- a/.github/workflows/codeql-advanced.yml +++ b/.github/workflows/codeql-advanced.yml @@ -70,7 +70,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} @@ -98,6 +98,6 @@ jobs: exit 1 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/analyze@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 54868076e0..f6955efd88 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -68,6 +68,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: sarif_file: results.sarif \ No newline at end of file From 54cd974849dc7e39caa18b2cbd75f8388cfef74e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:50:02 -0800 Subject: [PATCH 066/136] chore(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 (#5903) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.2 to 5.0.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/ea165f8d65b6e75b540449e92b4886f43607fa02...330a01c490aca151604b8cf639adc76d48f6c5d4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index f6955efd88..3326fad640 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,7 +60,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: SARIF file path: results.sarif From 8b14c6d91ddd98a047507e65a55efcb308bd152b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:50:26 -0800 Subject: [PATCH 067/136] chore(deps): bump actions/setup-node from 5.0.0 to 6.0.0 (#5904) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5.0.0 to 6.0.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/a0853c24544627f65ddf259abe73b1d18a591444...2028fbc5c25fe9cf00d9f06a71cc4710d4507903) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/npm_release_cli.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/npm_release_cli.yml b/.github/workflows/npm_release_cli.yml index d19bd589ac..489cb16378 100644 --- a/.github/workflows/npm_release_cli.yml +++ b/.github/workflows/npm_release_cli.yml @@ -26,7 +26,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: 22.14.0 From 8ff106e93136239e4bcc57397f5966e0bed5dedd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:50:52 -0800 Subject: [PATCH 068/136] chore(deps-dev): bump @types/node from 22.18.8 to 22.18.13 (#5905) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.18.8 to 22.18.13. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 22.18.13 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 658284897d..ed7e88c8bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2379,9 +2379,9 @@ } }, "node_modules/@types/node": { - "version": "22.18.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz", - "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==", + "version": "22.18.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.13.tgz", + "integrity": "sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" From d940fa34788892be0389e47f51de8ff325feb498 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:52:09 -0800 Subject: [PATCH 069/136] chore(deps): bump tar from 7.5.1 to 7.5.2 (#5906) Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.1 to 7.5.2. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.1...v7.5.2) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed7e88c8bc..af14e5249e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "simple-git": "3.28.0", "simple-plist": "1.4.0", "source-map": "0.7.6", - "tar": "7.5.1", + "tar": "7.5.2", "ts-morph": "25.0.1", "tunnel": "0.0.6", "typescript": "5.7.3", @@ -12584,10 +12584,10 @@ } }, "node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", - "license": "ISC", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", diff --git a/package.json b/package.json index 8b8a9a339a..22fdce5d30 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "simple-git": "3.28.0", "simple-plist": "1.4.0", "source-map": "0.7.6", - "tar": "7.5.1", + "tar": "7.5.2", "ts-morph": "25.0.1", "tunnel": "0.0.6", "typescript": "5.7.3", From 3324ebaad9dd1be40506c009e068b5ca0a18c675 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:52:42 -0800 Subject: [PATCH 070/136] chore(deps): bump semver from 7.7.2 to 7.7.3 (#5907) Bumps [semver](https://github.com/npm/node-semver) from 7.7.2 to 7.7.3. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.7.2...v7.7.3) --- updated-dependencies: - dependency-name: semver dependency-version: 7.7.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 20 ++++++++++++++++---- package.json | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index af14e5249e..c756aadc27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "proxy-lib": "0.4.1", "qr-image": "3.2.0", "qrcode-terminal": "0.12.0", - "semver": "7.7.2", + "semver": "7.7.3", "shelljs": "0.10.0", "simple-git": "3.28.0", "simple-plist": "1.4.0", @@ -922,6 +922,18 @@ "yauzl": "3.2.0" } }, + "node_modules/@nativescript/doctor/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -11515,9 +11527,9 @@ "license": "ISC" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" diff --git a/package.json b/package.json index 22fdce5d30..67b62760a5 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "proxy-lib": "0.4.1", "qr-image": "3.2.0", "qrcode-terminal": "0.12.0", - "semver": "7.7.2", + "semver": "7.7.3", "shelljs": "0.10.0", "simple-git": "3.28.0", "simple-plist": "1.4.0", From 6c80a8c94b2a3e64dd7b76cd0fb8777a388be09b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:53:11 -0800 Subject: [PATCH 071/136] chore(deps): bump @npmcli/arborist from 9.1.5 to 9.1.6 (#5908) Bumps [@npmcli/arborist](https://github.com/npm/cli/tree/HEAD/workspaces/arborist) from 9.1.5 to 9.1.6. - [Release notes](https://github.com/npm/cli/releases) - [Changelog](https://github.com/npm/cli/blob/latest/workspaces/arborist/CHANGELOG.md) - [Commits](https://github.com/npm/cli/commits/arborist-v9.1.6/workspaces/arborist) --- updated-dependencies: - dependency-name: "@npmcli/arborist" dependency-version: 9.1.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 170 +--------------------------------------------- 1 file changed, 3 insertions(+), 167 deletions(-) diff --git a/package-lock.json b/package-lock.json index c756aadc27..5b291c79c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -993,9 +993,9 @@ } }, "node_modules/@npmcli/arborist": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.5.tgz", - "integrity": "sha512-aUaE3vMilrPUV4M98NGB0yHqAKGLIxfXMFbxMm2Aw66V35hfS3cx3SIuj1Ptf8sBwwvD/Gbp4KlGPZOfKCApfg==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.6.tgz", + "integrity": "sha512-c5Pr3EG8UP5ollkJy2x+UdEQC5sEHe3H9whYn6hb2HJimAKS4zmoJkx5acCiR/g4P38RnCSMlsYQyyHnKYeLvQ==", "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", @@ -1109,108 +1109,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/@sigstore/bundle": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", - "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/@sigstore/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.0.0.tgz", - "integrity": "sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg==", - "license": "Apache-2.0", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/@sigstore/protobuf-specs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", - "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/@sigstore/sign": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.0.1.tgz", - "integrity": "sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA==", - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.0.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/@sigstore/tuf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.0.tgz", - "integrity": "sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w==", - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/@sigstore/verify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.0.0.tgz", - "integrity": "sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw==", - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.0.0", - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/@tufjs/models": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.0.0.tgz", - "integrity": "sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ==", - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/arborist/node_modules/cacache": { "version": "20.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", @@ -1372,37 +1270,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/pacote": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", - "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", - "license": "ISC", - "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^4.0.0", - "ssri": "^12.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@npmcli/arborist/node_modules/path-scurry": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", @@ -1419,37 +1286,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/arborist/node_modules/sigstore": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.0.0.tgz", - "integrity": "sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q==", - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.0.0", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.0.0", - "@sigstore/tuf": "^4.0.0", - "@sigstore/verify": "^3.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/tuf-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.0.0.tgz", - "integrity": "sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==", - "license": "MIT", - "dependencies": { - "@tufjs/models": "4.0.0", - "debug": "^4.4.1", - "make-fetch-happen": "^15.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@npmcli/fs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", From f61307f2911ada5d5b8f51e8cf0cdf64b00be26d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:54:57 -0800 Subject: [PATCH 072/136] chore(deps): bump simple-git from 3.28.0 to 3.29.0 (#5909) [skip ci] Bumps [simple-git](https://github.com/steveukx/git-js/tree/HEAD/simple-git) from 3.28.0 to 3.29.0. - [Release notes](https://github.com/steveukx/git-js/releases) - [Changelog](https://github.com/steveukx/git-js/blob/main/simple-git/CHANGELOG.md) - [Commits](https://github.com/steveukx/git-js/commits/HEAD/simple-git) --- updated-dependencies: - dependency-name: simple-git dependency-version: 3.29.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b291c79c1..4912899a57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "qrcode-terminal": "0.12.0", "semver": "7.7.3", "shelljs": "0.10.0", - "simple-git": "3.28.0", + "simple-git": "3.30.0", "simple-plist": "1.4.0", "source-map": "0.7.6", "tar": "7.5.2", @@ -11652,9 +11652,9 @@ } }, "node_modules/simple-git": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz", - "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==", + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", diff --git a/package.json b/package.json index 67b62760a5..3e4c88f5d4 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "qrcode-terminal": "0.12.0", "semver": "7.7.3", "shelljs": "0.10.0", - "simple-git": "3.28.0", + "simple-git": "3.30.0", "simple-plist": "1.4.0", "source-map": "0.7.6", "tar": "7.5.2", From c2a9dc67e3a52db574e6783cea408c3f06332bed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:56:03 -0800 Subject: [PATCH 073/136] chore(deps): bump axios from 1.12.2 to 1.13.1 (#5910) [skip ci] Bumps [axios](https://github.com/axios/axios) from 1.12.2 to 1.13.1. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.12.2...v1.13.1) --- updated-dependencies: - dependency-name: axios dependency-version: 1.13.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4912899a57..9e22fca985 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@nstudio/trapezedev-project": "7.2.3", "@rigor789/resolve-package-path": "1.0.7", "archiver": "^7.0.1", - "axios": "1.12.2", + "axios": "1.13.1", "byline": "5.0.0", "chokidar": "4.0.3", "cli-table3": "0.6.5", @@ -3107,9 +3107,9 @@ } }, "node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz", + "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", diff --git a/package.json b/package.json index 3e4c88f5d4..576c90c472 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@rigor789/resolve-package-path": "1.0.7", "@nstudio/trapezedev-project": "7.2.3", "archiver": "^7.0.1", - "axios": "1.12.2", + "axios": "1.13.1", "byline": "5.0.0", "chokidar": "4.0.3", "cli-table3": "0.6.5", From 8624f013303631cd6c87be58a54943b421199eea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:58:51 -0800 Subject: [PATCH 074/136] chore(deps-dev): bump @types/archiver from 6.0.3 to 6.0.4 (#5911) [skip ci] Bumps [@types/archiver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/archiver) from 6.0.3 to 6.0.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/archiver) --- updated-dependencies: - dependency-name: "@types/archiver" dependency-version: 6.0.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9e22fca985..139c212728 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2087,9 +2087,9 @@ } }, "node_modules/@types/archiver": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-6.0.3.tgz", - "integrity": "sha512-a6wUll6k3zX6qs5KlxIggs1P1JcYJaTCx2gnlr+f0S1yd2DoaEwoIK10HmBaLnZwWneBz+JBm0dwcZu0zECBcQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-6.0.4.tgz", + "integrity": "sha512-ULdQpARQ3sz9WH4nb98mJDYA0ft2A8C4f4fovvUcFwINa1cgGjY36JCAYuP5YypRq4mco1lJp1/7jEMS2oR0Hg==", "dev": true, "license": "MIT", "dependencies": { From 871f3df499e430999fe03643db00b245408f738c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 07:59:41 -0800 Subject: [PATCH 075/136] chore(deps): bump minimatch from 10.0.3 to 10.1.1 (#5912) [skip ci] Bumps [minimatch](https://github.com/isaacs/minimatch) from 10.0.3 to 10.1.1. - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v10.0.3...v10.1.1) --- updated-dependencies: - dependency-name: minimatch dependency-version: 10.1.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 41 ++++++++++++++++++++++++++++++++++++----- package.json | 2 +- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 139c212728..6699445947 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "log4js": "6.9.1", "marked": "15.0.12", "marked-terminal": "7.3.0", - "minimatch": "10.0.3", + "minimatch": "10.1.1", "mkdirp": "3.0.1", "mute-stream": "2.0.0", "nativescript-dev-xcode": "0.8.1", @@ -2455,6 +2455,22 @@ "node": "20 || >=22" } }, + "node_modules/@types/shelljs/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@types/shelljs/node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -6992,6 +7008,21 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/image-q": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", @@ -8630,10 +8661,10 @@ } }, "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, diff --git a/package.json b/package.json index 576c90c472..18690eba12 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "log4js": "6.9.1", "marked": "15.0.12", "marked-terminal": "7.3.0", - "minimatch": "10.0.3", + "minimatch": "10.1.1", "mkdirp": "3.0.1", "mute-stream": "2.0.0", "nativescript-dev-xcode": "0.8.1", From 8dc4a36ae899f2c7b7845bb1c0e164b9c389784b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 08:00:25 -0800 Subject: [PATCH 076/136] chore(deps): bump envinfo from 7.15.0 to 7.19.0 in /packages/nativescript-envinfo (#5913) [skip ci] chore(deps): bump envinfo in /packages/nativescript-envinfo Bumps [envinfo](https://github.com/tabrindle/envinfo) from 7.15.0 to 7.19.0. - [Release notes](https://github.com/tabrindle/envinfo/releases) - [Changelog](https://github.com/tabrindle/envinfo/blob/main/CHANGELOG.md) - [Commits](https://github.com/tabrindle/envinfo/compare/v7.15.0...v7.19.0) --- updated-dependencies: - dependency-name: envinfo dependency-version: 7.19.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/nativescript-envinfo/package.json | 2 +- packages/nativescript-envinfo/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/nativescript-envinfo/package.json b/packages/nativescript-envinfo/package.json index cb83c1b571..a5dad5ca5d 100644 --- a/packages/nativescript-envinfo/package.json +++ b/packages/nativescript-envinfo/package.json @@ -10,6 +10,6 @@ }, "dependencies": { "@types/envinfo": "^7.8.4", - "envinfo": "^7.15.0" + "envinfo": "^7.19.0" } } diff --git a/packages/nativescript-envinfo/yarn.lock b/packages/nativescript-envinfo/yarn.lock index 071b293ca8..8f4bc3a825 100644 --- a/packages/nativescript-envinfo/yarn.lock +++ b/packages/nativescript-envinfo/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.yarnpkg.com/@types/envinfo/-/envinfo-7.8.4.tgz#f13ec1050b8e260d6d7c149ba5b99f65d2b74058" integrity sha512-K5WaRgSlqjc408IyPbxOFnz7rVG9E8ELhj7XR3Ncui15EgeyIXTcCfmwrRnU4uEOCJQhzZRAQurYznEEc1dD2g== -envinfo@^7.15.0: - version "7.15.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.15.0.tgz#7d5a6d464df38708ee5ac135289c88f0c9bffa7e" - integrity sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g== +envinfo@^7.19.0: + version "7.19.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.19.0.tgz#b4b4507a27e9900b0175f556167fd3a95f8623f1" + integrity sha512-DoSM9VyG6O3vqBf+p3Gjgr/Q52HYBBtO3v+4koAxt1MnWr+zEnxE+nke/yXS4lt2P4SYCHQ4V3f1i88LQVOpAw== From 203ceb93ff79c98d81960f06905428aca509f803 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 08:00:52 -0800 Subject: [PATCH 077/136] chore(deps-dev): bump rimraf from 6.0.1 to 6.1.0 in /packages/doctor (#5914) [skip ci] Bumps [rimraf](https://github.com/isaacs/rimraf) from 6.0.1 to 6.1.0. - [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/rimraf/compare/v6.0.1...v6.1.0) --- updated-dependencies: - dependency-name: rimraf dependency-version: 6.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/doctor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 20b567f096..12603156ee 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -59,7 +59,7 @@ "grunt-tslint": "5.0.2", "istanbul": "0.4.5", "mocha": "11.7.4", - "rimraf": "6.0.1", + "rimraf": "6.1.0", "tslint": "6.1.3", "tslint-microsoft-contrib": "6.2.0", "typescript": "~5.9.2" From 7eb1d06aabd1fe762fb1f9bf4a165bfa08148fcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Nov 2025 08:01:17 -0800 Subject: [PATCH 078/136] chore(deps): bump semver from 7.7.2 to 7.7.3 in /packages/doctor (#5915) [skip ci] Bumps [semver](https://github.com/npm/node-semver) from 7.7.2 to 7.7.3. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.7.2...v7.7.3) --- updated-dependencies: - dependency-name: semver dependency-version: 7.7.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/doctor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 12603156ee..c74798ccb6 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -66,7 +66,7 @@ }, "dependencies": { "lodash": "4.17.21", - "semver": "7.7.2", + "semver": "7.7.3", "shelljs": "0.10.0", "winreg": "1.2.5", "yauzl": "3.2.0" From cc94b80328ac22828509e71313848bb10d444150 Mon Sep 17 00:00:00 2001 From: Osei Fortune Date: Sat, 8 Nov 2025 13:01:45 -0400 Subject: [PATCH 079/136] feat: android upgrades, bundletool to 1.18.2, kotlin to 2.2.20 (#5917) --- vendor/aab-tool/README.txt | 2 +- vendor/aab-tool/bundletool.jar | Bin 29105379 -> 32515387 bytes vendor/gradle-plugin/build.gradle | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/aab-tool/README.txt b/vendor/aab-tool/README.txt index 347e8774d3..c57c515602 100644 --- a/vendor/aab-tool/README.txt +++ b/vendor/aab-tool/README.txt @@ -1 +1 @@ -Downloaded from https://github.com/google/bundletool/releases/tag/1.15.6 \ No newline at end of file +Downloaded from https://github.com/google/bundletool/releases/tag/1.18.2 \ No newline at end of file diff --git a/vendor/aab-tool/bundletool.jar b/vendor/aab-tool/bundletool.jar index 6d7f4a2d2e87c977f4edf977d051668ba243cf5e..b95c3beb9bbff3707c1253b3ed4ee0eea520a532 100644 GIT binary patch delta 13255668 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 z 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 z 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

Y#<`!|az}|F(biU$4B!D;BAp;uI6gtF) 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Ⓢ>MLt$}so)=q_jNp+SEoVyV_U=J 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

C(#SlHMJKx}i74dab>L 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