From 114d31661a8e7d238088525bd34b9f83e310fdc3 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 20 Mar 2025 13:02:00 -0700 Subject: [PATCH 01/53] feat: config + compiler option for rspack, vite with fallback to webpack --- .../webpack/webpack-compiler-service.ts | 129 ++++++++++-------- 1 file changed, 73 insertions(+), 56 deletions(-) diff --git a/lib/services/webpack/webpack-compiler-service.ts b/lib/services/webpack/webpack-compiler-service.ts index 323899793a..0758b233e4 100644 --- a/lib/services/webpack/webpack-compiler-service.ts +++ b/lib/services/webpack/webpack-compiler-service.ts @@ -16,7 +16,7 @@ import { IOptions, } from "../../declarations"; import { IPlatformData } from "../../definitions/platform"; -import { IProjectData } from "../../definitions/project"; +import { IProjectConfigService, IProjectData } from "../../definitions/project"; import { IDictionary, IErrors, @@ -64,7 +64,8 @@ export class WebpackCompilerService private $mobileHelper: Mobile.IMobileHelper, private $cleanupService: ICleanupService, private $packageManager: IPackageManager, - private $packageInstallationManager: IPackageInstallationManager // private $sharedEventBus: ISharedEventBus + private $packageInstallationManager: IPackageInstallationManager, + private $projectConfigService: IProjectConfigService, ) { super(); } @@ -72,7 +73,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 +87,7 @@ export class WebpackCompilerService const childProcess = await this.startWebpackProcess( platformData, projectData, - prepareData + prepareData, ); childProcess.stdout.on("data", function (data) { @@ -125,7 +126,7 @@ export class WebpackCompilerService message as IWebpackMessage, platformData, projectData, - prepareData + prepareData, ); } @@ -153,7 +154,7 @@ export class WebpackCompilerService message.emittedFiles, message.chunkFiles, message.hash, - platformData.platformNameLowerCase + platformData.platformNameLowerCase, ); } else { result = { @@ -166,21 +167,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 +205,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 +213,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 +236,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 +248,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 +261,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 +270,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 +308,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"] : []; @@ -340,7 +341,7 @@ export class WebpackCompilerService const args = [ ...additionalNodeArgs, this.getWebpackExecutablePath(projectData), - this.isWebpack5(projectData) ? `build` : null, + this.isModernBundler(projectData) ? `build` : null, `--config=${projectData.webpackConfigPath}`, ...envParams, ].filter(Boolean); @@ -372,7 +373,7 @@ export class WebpackCompilerService const childProcess = this.$childProcess.spawn( process.execPath, args, - options + options, ); this.webpackProcesses[platformData.platformNameLowerCase] = childProcess; @@ -384,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 }); @@ -403,9 +404,9 @@ export class WebpackCompilerService __dirname, "..", "..", - "nativescript-cli-lib.js" + "nativescript-cli-lib.js", ), - } + }, ); envData.verbose = envData.verbose || this.$logger.isVerbose(); @@ -452,7 +453,7 @@ export class WebpackCompilerService envData: any, platformData: IPlatformData, projectData: IProjectData, - prepareData: IPrepareData + prepareData: IPrepareData, ) { const envFlagNames = Object.keys(envData); const canSnapshot = @@ -462,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) { @@ -470,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).`, ); } } @@ -513,7 +514,7 @@ export class WebpackCompilerService allEmittedFiles: string[], chunkFiles: string[], nextHash: string, - platform: string + platform: string, ) { const currentHash = this.getCurrentHotUpdateHash(allEmittedFiles); @@ -535,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 { @@ -548,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 @@ -575,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); @@ -590,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) { @@ -636,8 +637,10 @@ export class WebpackCompilerService } private getWebpackExecutablePath(projectData: IProjectData): string { - if (this.isWebpack5(projectData)) { - const packagePath = resolvePackagePath("@nativescript/webpack", { + const bundler = this.getBundler(); + + if (this.isModernBundler(projectData)) { + const packagePath = resolvePackagePath(`@nativescript/${bundler}`, { paths: [projectData.projectDir], }); @@ -657,22 +660,36 @@ 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( + "@nativescript/webpack", + { + 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(): "webpack" | "rspack" | "vite" { + return this.$projectConfigService.getValue(`bundler`, "webpack"); + } } injector.register("webpackCompilerService", WebpackCompilerService); From 2451f15aba04687cf9c2549a848b1c51fea7e19c Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 21 Mar 2025 14:14:52 -0700 Subject: [PATCH 02/53] feat: bundler config https://github.com/NativeScript/nativescript-cli/issues/5836 --- lib/definitions/project.d.ts | 7 ++++ lib/project-data.ts | 41 +++++++++++-------- .../webpack/webpack-compiler-service.ts | 18 +++++--- test/stubs.ts | 1 + 4 files changed, 44 insertions(+), 23 deletions(-) diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index e99e204691..3b557bf5e1 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -182,6 +182,7 @@ interface INsConfig { shared?: boolean; overridePods?: string; webpackConfigPath?: string; + bundlerConfigPath?: string; ios?: INsConfigIOS; android?: INsConfigAndroid; visionos?: INSConfigVisionOS; @@ -217,11 +218,17 @@ interface IProjectData extends ICreateProjectData { isShared: boolean; /** + * @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/project-data.ts b/lib/project-data.ts index 3e36c374b5..5505ca8b6e 100644 --- a/lib/project-data.ts +++ b/lib/project-data.ts @@ -99,6 +99,7 @@ export class ProjectData implements IProjectData { public podfilePath: string; public isShared: boolean; public webpackConfigPath: string; + public bundlerConfigPath: string; public initialized: boolean; constructor( @@ -110,7 +111,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 +143,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 +158,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 +179,40 @@ 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 = this.nsConfig && this.nsConfig.webpackConfigPath ? path.resolve(this.projectDir, this.nsConfig.webpackConfigPath) : path.join(this.projectDir, "webpack.config.js"); + this.bundlerConfigPath = + this.nsConfig && this.nsConfig.bundlerConfigPath + ? path.resolve(this.projectDir, this.nsConfig.bundlerConfigPath) + : null; return; } @@ -217,7 +222,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 +235,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 +296,7 @@ export class ProjectData implements IProjectData { private resolveToProjectDir( pathToResolve: string, - projectDir?: string + projectDir?: string, ): string { if (!projectDir) { projectDir = this.projectDir; @@ -306,7 +311,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 +346,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 +371,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/webpack/webpack-compiler-service.ts b/lib/services/webpack/webpack-compiler-service.ts index 0758b233e4..0c8924b2a2 100644 --- a/lib/services/webpack/webpack-compiler-service.ts +++ b/lib/services/webpack/webpack-compiler-service.ts @@ -310,10 +310,18 @@ export class WebpackCompilerService 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.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}.`, + ); + } } const envData = this.buildEnvData( @@ -342,7 +350,7 @@ export class WebpackCompilerService ...additionalNodeArgs, this.getWebpackExecutablePath(projectData), this.isModernBundler(projectData) ? `build` : null, - `--config=${projectData.webpackConfigPath}`, + `--config=${projectData.bundlerConfigPath || projectData.webpackConfigPath}`, ...envParams, ].filter(Boolean); diff --git a/test/stubs.ts b/test/stubs.ts index fc4d687c15..404660d467 100644 --- a/test/stubs.ts +++ b/test/stubs.ts @@ -658,6 +658,7 @@ export class ProjectDataStub implements IProjectData { projectDir: string; projectName: string; webpackConfigPath: string; + bundlerConfigPath: string; get platformsDir(): string { return ( From 247f9618c53ba6a8e8c7dedd54392c0e6606a8e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20de=20Dios=20Mart=C3=ADnez=20Vallejo?= Date: Tue, 25 Mar 2025 16:20:07 +0100 Subject: [PATCH 03/53] feat: bundler config refactor (#5840) --- lib/bootstrap.ts | 4 +- lib/constants.ts | 3 + lib/controllers/prepare-controller.ts | 16 +- lib/definitions/project.d.ts | 13 +- lib/project-data.ts | 9 + .../bundler-compiler-service.ts} | 188 ++++++++++-------- .../webpack.d.ts => bundler/bundler.ts} | 42 ++-- test/controllers/prepare-controller.ts | 6 +- .../bundler-compiler-service.ts} | 113 ++++++----- test/stubs.ts | 2 + 10 files changed, 224 insertions(+), 172 deletions(-) rename lib/services/{webpack/webpack-compiler-service.ts => bundler/bundler-compiler-service.ts} (77%) rename lib/services/{webpack/webpack.d.ts => bundler/bundler.ts} (90%) rename test/services/{webpack/webpack-compiler-service.ts => bundler/bundler-compiler-service.ts} (62%) 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/constants.ts b/lib/constants.ts index 0ac436ec77..b9dc247d83 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"; @@ -223,6 +225,7 @@ 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..7b21219f63 100644 --- a/lib/controllers/prepare-controller.ts +++ b/lib/controllers/prepare-controller.ts @@ -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,8 +117,8 @@ export class PrepareController extends EventEmitter { this.watchersData[projectDir][platformLowerCase] && this.watchersData[projectDir][platformLowerCase].hasWebpackCompilerProcess ) { - await this.$webpackCompilerService.stopWebpackCompiler(platformLowerCase); - this.$webpackCompilerService.removeListener( + await this.$bundlerCompilerService.stopBundlerCompiler(platformLowerCase); + this.$bundlerCompilerService.removeListener( WEBPACK_COMPILATION_COMPLETE, this.webpackCompilerHandler, ); @@ -177,7 +177,7 @@ export class PrepareController extends EventEmitter { prepareData, ); } else { - await this.$webpackCompilerService.compileWithoutWatch( + await this.$bundlerCompilerService.compileWithoutWatch( platformData, projectData, prepareData, @@ -296,7 +296,7 @@ export class PrepareController extends EventEmitter { }; this.webpackCompilerHandler = handler.bind(this); - this.$webpackCompilerService.on( + this.$bundlerCompilerService.on( WEBPACK_COMPILATION_COMPLETE, this.webpackCompilerHandler, ); @@ -304,7 +304,7 @@ export class PrepareController extends EventEmitter { 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 3b557bf5e1..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; @@ -183,6 +184,7 @@ interface INsConfig { overridePods?: string; webpackConfigPath?: string; bundlerConfigPath?: string; + bundler?: BundlerType; ios?: INsConfigIOS; android?: INsConfigAndroid; visionos?: INSConfigVisionOS; @@ -216,7 +218,16 @@ 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. diff --git a/lib/project-data.ts b/lib/project-data.ts index 5505ca8b6e..cbe06da65f 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, @@ -100,6 +101,7 @@ export class ProjectData implements IProjectData { public isShared: boolean; public webpackConfigPath: string; public bundlerConfigPath: string; + public bundler: BundlerType; public initialized: boolean; constructor( @@ -213,6 +215,13 @@ export class ProjectData implements IProjectData { this.nsConfig && this.nsConfig.bundlerConfigPath ? path.resolve(this.projectDir, this.nsConfig.bundlerConfigPath) : null; + this.bundler = + this.nsConfig && this.nsConfig.bundler + ? (path.resolve( + this.projectDir, + this.nsConfig.bundler, + ) as BundlerType) + : "webpack"; return; } diff --git a/lib/services/webpack/webpack-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts similarity index 77% rename from lib/services/webpack/webpack-compiler-service.ts rename to lib/services/bundler/bundler-compiler-service.ts index 0c8924b2a2..65b496a2b3 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 { IProjectConfigService, 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( @@ -76,15 +80,15 @@ 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, @@ -98,8 +102,8 @@ export class WebpackCompilerService process.stderr.write(data); }); - childProcess.on("message", (message: string | IWebpackEmitMessage) => { - this.$logger.trace("Message from webpack", message); + childProcess.on("message", (message: string | IBundlerEmitMessage) => { + this.$logger.trace(`Message from ${projectData.bundler}`, message); // if we are on webpack5 - we handle HMR in a slightly different way if ( @@ -109,8 +113,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; } @@ -123,22 +127,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; @@ -190,7 +199,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) { @@ -198,16 +210,16 @@ 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); }); @@ -218,13 +230,13 @@ export class WebpackCompilerService 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.`, ); 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) { @@ -239,13 +251,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, @@ -253,9 +265,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); }); @@ -264,13 +276,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); @@ -282,14 +294,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]); } } } @@ -305,7 +317,7 @@ export class WebpackCompilerService } @performanceLog() - private async startWebpackProcess( + private async startBundleProcess( platformData: IPlatformData, projectData: IProjectData, prepareData: IPrepareData, @@ -317,9 +329,9 @@ export class WebpackCompilerService ); } } else { - if (!this.$fs.exists(projectData.webpackConfigPath)) { + if (!this.$fs.exists(projectData.bundlerConfigPath)) { 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 ${projectData.bundler} configuration file ${projectData.bundlerConfigPath} does not exist. Ensure the file exists, or update the path in ${CONFIG_FILE_NAME_DISPLAY}.`, ); } } @@ -348,9 +360,9 @@ export class WebpackCompilerService const args = [ ...additionalNodeArgs, - this.getWebpackExecutablePath(projectData), + this.getBundlerExecutablePath(projectData), this.isModernBundler(projectData) ? `build` : null, - `--config=${projectData.bundlerConfigPath || projectData.webpackConfigPath}`, + `--config=${projectData.bundlerConfigPath}`, ...envParams, ].filter(Boolean); @@ -365,6 +377,7 @@ export class WebpackCompilerService }; options.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 }); @@ -384,7 +397,7 @@ export class WebpackCompilerService options, ); - this.webpackProcesses[platformData.platformNameLowerCase] = childProcess; + this.bundlerProcesses[platformData.platformNameLowerCase] = childProcess; await this.$cleanupService.addKillProcess(childProcess.pid.toString()); return childProcess; @@ -475,23 +488,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).`, + ); + } } } } @@ -570,30 +586,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( @@ -632,7 +655,7 @@ export class WebpackCompilerService return; } - this.emit(WEBPACK_COMPILATION_COMPLETE, { + this.emit(BUNDLER_COMPILATION_COMPLETE, { files, staleFiles, hasOnlyHotUpdateFiles: prepareData.hmr, @@ -644,7 +667,7 @@ export class WebpackCompilerService }); } - private getWebpackExecutablePath(projectData: IProjectData): string { + private getBundlerExecutablePath(projectData: IProjectData): string { const bundler = this.getBundler(); if (this.isModernBundler(projectData)) { @@ -674,12 +697,9 @@ export class WebpackCompilerService case "rspack": return true; default: - const packageJSONPath = resolvePackageJSONPath( - "@nativescript/webpack", - { - paths: [projectData.projectDir], - }, - ); + const packageJSONPath = resolvePackageJSONPath(WEBPACK_PLUGIN_NAME, { + paths: [projectData.projectDir], + }); if (packageJSONPath) { const packageData = this.$fs.readJson(packageJSONPath); @@ -695,9 +715,13 @@ export class WebpackCompilerService return false; } - public getBundler(): "webpack" | "rspack" | "vite" { + public getBundler(): BundlerType { return this.$projectConfigService.getValue(`bundler`, "webpack"); } } -injector.register("webpackCompilerService", WebpackCompilerService); +function capitalizeFirstLetter(val: string) { + return String(val).charAt(0).toUpperCase() + String(val).slice(1); +} + +injector.register("bundlerCompilerService", BundlerCompilerService); diff --git a/lib/services/webpack/webpack.d.ts b/lib/services/bundler/bundler.ts similarity index 90% rename from lib/services/webpack/webpack.d.ts rename to lib/services/bundler/bundler.ts index e3a8dddd8b..691d45f8c5 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,7 +68,7 @@ declare global { hasNativeChanges: boolean; } - interface IWebpackEmitMessage { + interface IBundlerEmitMessage { emittedFiles: string[]; chunkFiles: string[]; hash: string; @@ -81,12 +81,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 +108,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 +125,7 @@ declare global { */ prepareProject( projectData: IProjectData, - prepareData: T + prepareData: T, ): Promise; /** @@ -146,7 +146,7 @@ declare global { preparePluginNativeCode( pluginData: IPluginData, - options?: any + options?: any, ): Promise; /** @@ -157,17 +157,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 +178,11 @@ declare global { cleanDeviceTempFolder( deviceIdentifier: string, - projectData: IProjectData + projectData: IProjectData, ): Promise; processConfigurationFilesFromAppResources( projectData: IProjectData, - opts: { release: boolean } + opts: { release: boolean }, ): Promise; /** @@ -214,7 +214,7 @@ declare global { checkForChanges( changeset: IProjectChangesInfo, prepareData: T, - projectData: IProjectData + projectData: IProjectData, ): Promise; /** 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/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 404660d467..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, @@ -659,6 +660,7 @@ export class ProjectDataStub implements IProjectData { projectName: string; webpackConfigPath: string; bundlerConfigPath: string; + bundler: BundlerType; get platformsDir(): string { return ( From 5b809744a776e712f81ab34df68019f3cd5bcd92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20de=20Dios=20Mart=C3=ADnez=20Vallejo?= Date: Tue, 25 Mar 2025 18:12:08 +0100 Subject: [PATCH 04/53] test: bundler and bundlerConfigPath (#5841) --- lib/project-data.ts | 14 +++---- test/project-data.ts | 93 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 91 insertions(+), 16 deletions(-) diff --git a/lib/project-data.ts b/lib/project-data.ts index cbe06da65f..277dbf32d1 100644 --- a/lib/project-data.ts +++ b/lib/project-data.ts @@ -207,21 +207,17 @@ export class ProjectData implements IProjectData { 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) - : null; - this.bundler = - this.nsConfig && this.nsConfig.bundler - ? (path.resolve( - this.projectDir, - this.nsConfig.bundler, - ) as BundlerType) - : "webpack"; + : webpackConfigPath; + this.bundler = this?.nsConfig?.bundler ?? "webpack"; return; } 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"); + }); + }); }); From fd695d158e29f029abc8e116d745788241abb34a Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 22 Apr 2025 12:17:07 -0700 Subject: [PATCH 05/53] feat: wip vite setup --- lib/constants.ts | 1 - lib/controllers/prepare-controller.ts | 6 +- .../bundler/bundler-compiler-service.ts | 58 ++++++++++++++----- 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/lib/constants.ts b/lib/constants.ts index b9dc247d83..c76d6f6696 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -224,7 +224,6 @@ 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 { diff --git a/lib/controllers/prepare-controller.ts b/lib/controllers/prepare-controller.ts index 7b21219f63..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 { @@ -119,7 +119,7 @@ export class PrepareController extends EventEmitter { ) { await this.$bundlerCompilerService.stopBundlerCompiler(platformLowerCase); this.$bundlerCompilerService.removeListener( - WEBPACK_COMPILATION_COMPLETE, + BUNDLER_COMPILATION_COMPLETE, this.webpackCompilerHandler, ); this.watchersData[projectDir][ @@ -297,7 +297,7 @@ export class PrepareController extends EventEmitter { this.webpackCompilerHandler = handler.bind(this); this.$bundlerCompilerService.on( - WEBPACK_COMPILATION_COMPLETE, + BUNDLER_COMPILATION_COMPLETE, this.webpackCompilerHandler, ); diff --git a/lib/services/bundler/bundler-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts index 65b496a2b3..6473e7c54d 100644 --- a/lib/services/bundler/bundler-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -224,14 +224,31 @@ export class BundlerCompilerService }); 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( `${capitalizeFirstLetter(projectData.bundler)} process exited with code ${exitCode} when we expected it to be long living with watch.`, ); + if (this.getBundler() === "vite" && exitCode === 0) { + // note experimental: investigate watch mode + const bundlePath = path.join( + projectData.projectDir, + "dist/bundle.js", + ); + console.log("bundlePath:", bundlePath); + const data = { + files: [bundlePath], + hasOnlyHotUpdateFiles: false, + hmrData: {}, + platform: platformData.platformNameLowerCase, + }; + this.emit(BUNDLER_COMPILATION_COMPLETE, data); + resolve(1); + return; + } + + await this.$cleanupService.removeKillProcess( + childProcess.pid.toString(), + ); const error: any = new Error( `Executing ${projectData.bundler} failed with exit code ${exitCode}.`, ); @@ -341,12 +358,15 @@ export class BundlerCompilerService projectData, prepareData, ); - const envParams = await this.buildEnvCommandLineParams( - envData, - platformData, - projectData, - prepareData, - ); + const isVite = this.getBundler() === "vite"; + const envParams = isVite + ? [`--mode=${platformData.platformNameLowerCase}`] + : await this.buildEnvCommandLineParams( + envData, + platformData, + projectData, + prepareData, + ); const additionalNodeArgs = semver.major(process.version) <= 8 ? ["--harmony"] : []; @@ -366,8 +386,10 @@ export class BundlerCompilerService ...envParams, ].filter(Boolean); - if (prepareData.watch) { - args.push("--watch"); + if (!isVite) { + if (prepareData.watch) { + args.push("--watch"); + } } const stdio = prepareData.watch ? ["ipc"] : "inherit"; @@ -391,6 +413,8 @@ export class BundlerCompilerService }); } + console.log("args:", args); + const childProcess = this.$childProcess.spawn( process.execPath, args, @@ -670,7 +694,15 @@ export class BundlerCompilerService private getBundlerExecutablePath(projectData: IProjectData): string { const bundler = this.getBundler(); - if (this.isModernBundler(projectData)) { + 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], }); From a369f81ebd5a9629c04807a9fc7b51ba11e621a6 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 7 Jul 2025 18:35:59 -0700 Subject: [PATCH 06/53] feat(hooks): support esm --- lib/common/services/hooks-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/common/services/hooks-service.ts b/lib/common/services/hooks-service.ts index 4879ae4a5b..dc13513531 100644 --- a/lib/common/services/hooks-service.ts +++ b/lib/common/services/hooks-service.ts @@ -179,7 +179,7 @@ export class HooksService implements IHooksService { let inProc = false; if (!command) { command = hook.fullPath; - if (path.extname(hook.fullPath).toLowerCase() === ".js") { + if ([".mjs", ".js"].includes(path.extname(hook.fullPath).toLowerCase())) { command = process.argv[0]; inProc = this.shouldExecuteInProcess(this.$fs.readText(hook.fullPath)); } From 312db9e4f7c38b907fffb6414e0b0c1a20c062a6 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 7 Jul 2025 18:40:53 -0700 Subject: [PATCH 07/53] chore: 9.0.0-alpha.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5fe54c4a8a..addfe5724b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "8.9.3", + "version": "9.0.0-alpha.0", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { @@ -50,7 +50,7 @@ }, "keywords": [ "nativescript", - "telerik", + "typescript", "mobile" ], "dependencies": { From 0cc056bc9104107d10b6716f2c8c9d487c63814a Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sun, 20 Jul 2025 20:09:04 -0700 Subject: [PATCH 08/53] feat(vite): ensure cli flags are passed --- lib/services/bundler/bundler-compiler-service.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/services/bundler/bundler-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts index 59ea0bed02..421808dfdc 100644 --- a/lib/services/bundler/bundler-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -359,14 +359,16 @@ export class BundlerCompilerService prepareData, ); 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}`] - : await this.buildEnvCommandLineParams( - envData, - platformData, - projectData, - prepareData, - ); + ? [`--mode=${platformData.platformNameLowerCase}`, "--", ...cliArgs] + : cliArgs; const additionalNodeArgs = semver.major(process.version) <= 8 ? ["--harmony"] : []; From 4b9e4518fb94f052e5b6b21939537c9d51615b11 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sun, 20 Jul 2025 20:16:18 -0700 Subject: [PATCH 09/53] feat(hooks): support esm --- lib/common/services/hooks-service.ts | 98 ++++++++++++++++------------ 1 file changed, 56 insertions(+), 42 deletions(-) diff --git a/lib/common/services/hooks-service.ts b/lib/common/services/hooks-service.ts index dc13513531..4b04e9b7a9 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,18 @@ 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 ([".mjs", ".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 +201,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 +223,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 +237,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 +271,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 +279,7 @@ export class HooksService implements IHooksService { [hook.fullPath], "close", environment, - { throwError: false } + { throwError: false }, ); result = output; @@ -275,7 +291,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 +305,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 +317,7 @@ export class HooksService implements IHooksService { directoryPath, hookName, hook, - hookArguments + hookArguments, ); if (result) { @@ -316,14 +332,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 +348,8 @@ export class HooksService implements IHooksService { hooks.push( new Hook( this.getBaseFilename(fileNameParts[fileNameParts.length - 1]), - fullPath - ) + fullPath, + ), ); } } @@ -346,10 +362,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 +401,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 +477,7 @@ export class HooksService implements IHooksService { private validateHookArguments( hookConstructor: any, - hookFullPath: string + hookFullPath: string, ): string[] { const invalidArguments: string[] = []; @@ -477,7 +491,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); } From b6f6baeba5aa6c75de25a77781b8e1cf05b076ac Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sun, 20 Jul 2025 20:27:51 -0700 Subject: [PATCH 10/53] chore: 9.0.0-alpha.2 --- package-lock.json | 719 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 342 insertions(+), 379 deletions(-) diff --git a/package-lock.json b/package-lock.json index 123e11e5c8..c93eb29f0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nativescript", - "version": "8.9.3", + "version": "9.0.0-alpha.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nativescript", - "version": "8.9.3", + "version": "9.0.0-alpha.2", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -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,29 @@ "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==", + "dev": true, + "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==", + "dev": true, + "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 +857,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 +913,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 +984,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.2", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.2.tgz", + "integrity": "sha512-KIuQc8TuMTcL8OTVmOTdVIXmkDFFOHmVlVd94N9wwHjuOA2ZyNsoJPS50Q/irdkS3LF/9BiIcxSIV/ukSjqO6g==", "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", @@ -1149,9 +1184,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 +1218,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 +1323,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 +1360,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 +1521,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 +1547,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 +1560,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" @@ -1710,9 +1754,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 +1911,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 +1944,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 +1958,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 +2078,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 +2302,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 +2332,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" @@ -2833,9 +2916,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 +3085,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 +4177,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 +4206,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 +4284,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 +4322,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 +5158,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 +5316,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 +6312,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 +6328,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 +7320,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 +8048,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 +8304,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 +8336,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 +8348,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" }, @@ -8443,9 +8521,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 +9065,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 +9190,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 +9386,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 +9588,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": { @@ -9839,9 +9917,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.1.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", + "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", "dev": true, "license": "MIT" }, @@ -10315,68 +10393,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 +10413,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 +10721,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 +10884,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 +10916,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 +10970,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 +11076,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" @@ -12073,9 +11994,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 +12043,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 +12204,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 +12577,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 +12615,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 +13025,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 +13413,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 +13636,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 +14085,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 +14370,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 +14648,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 +14858,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 +15091,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 +15212,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 +15480,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.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.1.tgz", + "integrity": "sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg==", "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -15829,16 +15792,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 +15906,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 addfe5724b..b22ceb1b07 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.0", + "version": "9.0.0-alpha.2", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From dba4e1a0bb9c91119702f78c1f2c4a49e9b56143 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 26 Jul 2025 18:37:08 -0700 Subject: [PATCH 11/53] chore: updated lock --- package-lock.json | 77 +++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index c93eb29f0a..9bc1a98c20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", @@ -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" @@ -305,7 +307,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, "license": "MIT", "engines": { "node": "20 || >=22" @@ -315,7 +316,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" @@ -984,9 +984,9 @@ } }, "node_modules/@npmcli/arborist": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.2.tgz", - "integrity": "sha512-KIuQc8TuMTcL8OTVmOTdVIXmkDFFOHmVlVd94N9wwHjuOA2ZyNsoJPS50Q/irdkS3LF/9BiIcxSIV/ukSjqO6g==", + "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", @@ -1606,14 +1606,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" } }, @@ -2893,13 +2892,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" } }, @@ -8461,27 +8460,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" @@ -9739,14 +9738,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", @@ -9917,9 +9908,9 @@ } }, "node_modules/loupe": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", - "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz", + "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==", "dev": true, "license": "MIT" }, @@ -11187,12 +11178,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" @@ -15480,9 +15471,9 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.1.tgz", - "integrity": "sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg==", + "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" From f3a3b9025ad11b7124b1f95afd416803a32c7b57 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 26 Jul 2025 18:48:55 -0700 Subject: [PATCH 12/53] chore: 9.0.0-alpha.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9d28382b8c..56c556a116 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.2", + "version": "9.0.0-alpha.3", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From b3bbc1af21994063c947a6e9f576090656023bd6 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 2 Aug 2025 21:59:49 -0700 Subject: [PATCH 13/53] feat(hooks): allow cjs extensions --- lib/common/services/hooks-service.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/common/services/hooks-service.ts b/lib/common/services/hooks-service.ts index 4b04e9b7a9..0b9676258a 100644 --- a/lib/common/services/hooks-service.ts +++ b/lib/common/services/hooks-service.ts @@ -188,7 +188,11 @@ export class HooksService implements IHooksService { let inProc = false; if (!command) { command = hook.fullPath; - if ([".mjs", ".js"].includes(path.extname(hook.fullPath).toLowerCase())) { + if ( + [".mjs", ".cjs", ".js"].includes( + path.extname(hook.fullPath).toLowerCase(), + ) + ) { command = process.argv[0]; inProc = isESM ? true From 89daf8a793d4d08971aee37d7a285bcf2836ea1a Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 2 Aug 2025 22:05:38 -0700 Subject: [PATCH 14/53] chore: 9.0.0-alpha.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 56c556a116..12481f5078 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.3", + "version": "9.0.0-alpha.4", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From 8a12366aa93ee655d337948a5cdbf40470773aa7 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 6 Aug 2025 18:53:41 -0700 Subject: [PATCH 15/53] fix: prevent TypeError: Body is unusable during unit test dep generation --- Gruntfile.js | 42 +++++++++++++++++++++++------------------- package-lock.json | 4 ++-- 2 files changed, 25 insertions(+), 21 deletions(-) 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/package-lock.json b/package-lock.json index f8f394dfe8..a5eb59b872 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nativescript", - "version": "9.0.0-alpha.2", + "version": "9.0.0-alpha.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nativescript", - "version": "9.0.0-alpha.2", + "version": "9.0.0-alpha.4", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { From 6de802d35c28c8a9f77f0c034a39a8d70a318f4d Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 6 Aug 2025 19:05:40 -0700 Subject: [PATCH 16/53] chore: cleanup --- package-lock.json | 191 ---------------------------------------------- package.json | 1 - 2 files changed, 192 deletions(-) diff --git a/package-lock.json b/package-lock.json index a5eb59b872..ba6411b0d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -119,7 +119,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", @@ -1379,51 +1378,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", @@ -3895,24 +3849,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 +5176,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", @@ -9534,35 +9460,6 @@ "node": ">=6" } }, - "node_modules/ky": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.8.2.tgz", - "integrity": "sha512-XybQJ3d4Ea1kI27DoelE5ZCT3bSJlibYTtQuMsyzKox3TMyayw1asgQdl54WroAm+fIA3ZCr8zXW2RpR7qWVpA==", - "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", @@ -11784,25 +11681,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", @@ -12500,13 +12378,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 +12510,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 +12927,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", diff --git a/package.json b/package.json index eb3f5f0847..254c15d3ea 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,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", From 15f17dfcde610b9ad6064a0fdb20335e67ee3255 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 9 Aug 2025 14:23:23 -0700 Subject: [PATCH 17/53] feat: vite support phase 1 Supports live reload. HMR is partial and works hand-in-hand with a hmr-client setup in the per-project @nativescript/vite setup. --- .../bundler/bundler-compiler-service.ts | 240 ++++++++++++++++-- lib/services/bundler/bundler.ts | 4 + 2 files changed, 224 insertions(+), 20 deletions(-) diff --git a/lib/services/bundler/bundler-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts index 421808dfdc..12f637b389 100644 --- a/lib/services/bundler/bundler-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -94,6 +94,9 @@ export class BundlerCompilerService prepareData, ); + // Handle Vite differently from webpack + const isVite = this.getBundler() === "vite"; + childProcess.stdout.on("data", function (data) { process.stdout.write(data); }); @@ -102,9 +105,124 @@ export class BundlerCompilerService process.stderr.write(data); }); + // 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 ( typeof message === "object" && @@ -228,23 +346,6 @@ export class BundlerCompilerService this.$logger.trace( `${capitalizeFirstLetter(projectData.bundler)} process exited with code ${exitCode} when we expected it to be long living with watch.`, ); - if (this.getBundler() === "vite" && exitCode === 0) { - // note experimental: investigate watch mode - const bundlePath = path.join( - projectData.projectDir, - "dist/bundle.js", - ); - console.log("bundlePath:", bundlePath); - const data = { - files: [bundlePath], - hasOnlyHotUpdateFiles: false, - hmrData: {}, - platform: platformData.platformNameLowerCase, - }; - this.emit(BUNDLER_COMPILATION_COMPLETE, data); - resolve(1); - return; - } await this.$cleanupService.removeKillProcess( childProcess.pid.toString(), @@ -367,7 +468,12 @@ export class BundlerCompilerService ); // Note: With Vite, we need `--` to prevent vite cli from erroring on unknown options. const envParams = isVite - ? [`--mode=${platformData.platformNameLowerCase}`, "--", ...cliArgs] + ? [ + `--mode=${platformData.platformNameLowerCase}`, + `--watch`, + "--", + ...cliArgs, + ] : cliArgs; const additionalNodeArgs = semver.major(process.version) <= 8 ? ["--harmony"] : []; @@ -383,7 +489,7 @@ export class BundlerCompilerService const args = [ ...additionalNodeArgs, this.getBundlerExecutablePath(projectData), - this.isModernBundler(projectData) ? `build` : null, + isVite ? "build" : this.isModernBundler(projectData) ? `build` : null, `--config=${projectData.bundlerConfigPath}`, ...envParams, ].filter(Boolean); @@ -394,7 +500,7 @@ export class BundlerCompilerService } } - const stdio = prepareData.watch ? ["ipc"] : "inherit"; + const stdio = prepareData.watch || isVite ? ["ipc"] : "inherit"; const options: { [key: string]: any } = { cwd: projectData.projectDir, stdio, @@ -753,6 +859,100 @@ export class BundlerCompilerService 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) { diff --git a/lib/services/bundler/bundler.ts b/lib/services/bundler/bundler.ts index 691d45f8c5..08e6bda859 100644 --- a/lib/services/bundler/bundler.ts +++ b/lib/services/bundler/bundler.ts @@ -72,6 +72,10 @@ declare global { emittedFiles: string[]; chunkFiles: string[]; hash: string; + changedFiles?: string[]; + isHMR?: boolean; + filesToCopy?: string[]; + buildType?: string; } interface IPlatformProjectService From d68a93d3b81af9264843d3c14c5c972bafe9426e Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 9 Aug 2025 14:41:32 -0700 Subject: [PATCH 18/53] chore: 9.0.0-alpha.5 --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index ba6411b0d3..93b1c9b362 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nativescript", - "version": "9.0.0-alpha.4", + "version": "9.0.0-alpha.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nativescript", - "version": "9.0.0-alpha.4", + "version": "9.0.0-alpha.5", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -1864,9 +1864,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.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.1.tgz", + "integrity": "sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -2869,9 +2869,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 }, @@ -14883,9 +14883,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 254c15d3ea..098dc1bada 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.4", + "version": "9.0.0-alpha.5", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From 513d669f2408d022935dc876e82663e315cf7cc0 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 4 Sep 2025 13:49:27 -0700 Subject: [PATCH 19/53] fix(android): livesync tool connect race condition --- 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 0614eb7b20b5051872dcf1fb03e4b47545314f90 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 5 Sep 2025 10:26:15 -0700 Subject: [PATCH 20/53] 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 17c17e15c649a8e4848ca1690e49dfd6df50497f Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 5 Sep 2025 11:14:28 -0700 Subject: [PATCH 21/53] fix: clear all deprecated dependencies (#5858) --- lib/common/mobile/device-log-provider.ts | 4 +- 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, 3066 insertions(+), 5535 deletions(-) diff --git a/lib/common/mobile/device-log-provider.ts b/lib/common/mobile/device-log-provider.ts index 170bd9f303..d5c548f780 100644 --- a/lib/common/mobile/device-log-provider.ts +++ b/lib/common/mobile/device-log-provider.ts @@ -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; 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 c97e80baf16932e6211079c622c855d4e4dbc91f 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 22/53] 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 1aeb0861380b4e945a6059ffd757fbee7fa25903 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 23/53] 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 7fd7b218b1f8f389398371999b3acca522c659ec 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 24/53] 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 242c2197e113aa6483f574af145de8eb4e65e3a0 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 25/53] 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 3d7d41a2d2ea2c7f257202867e2cb4399f939c80 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 26/53] 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 07a9cdb707ed7c884340078c4799983dad8f73fb 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 27/53] 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 8bac0e48478dbc35b4794d862c827c81735d8531 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 28/53] 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 e923424082ab97a75fde93979de735bc09babc80 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 29/53] 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 dcd69c4510bdf0aa8819cfccf9d73dabf3515c43 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 30/53] 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 69bd8b2cc393279c36173f53133a1f82a4fe0e32 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 31/53] 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 469cb7c4001824b0f64dd01b1c768f5139bb86ea 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 32/53] 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 3f2018df88c7e4e4cf1e73cf2144321732f8c2e6 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 33/53] 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 bad5548cb7565e97d864a2b8521bd7be9788ebe9 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 34/53] 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 f03bdbc8faadc350f85d285870b4ce617e43a3f5 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 35/53] 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 5d1d3e723a6581c85d3f272e0890cbb3842e728f 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 36/53] 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 bffa6b74ff22d6f777a5b5d92ec8cec31adbd061 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 37/53] 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 265de7058dc0e492990822393ec28eebc303f00d 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 38/53] 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 102ba27bcc93ad1d43e642205885f8b3ce334b2b 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 39/53] 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 69801f5031013fad54f062be41d84aecd809c25a 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 40/53] 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 2babb59007e387df1d7c3fc692a9f1d255d3eb08 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 41/53] 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 c2105ef8932a87989670c6db86e4d40160dc0354 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 42/53] 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 10d9f82ca3404052d951c743c5eef6b3c5ed5fed 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 43/53] 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 de0d22659a0a317002d0029b52eaf01af75cfb98 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 10 Sep 2025 16:02:37 -0700 Subject: [PATCH 44/53] feat: vite copy file handling and incremental isolated copy for faster changes --- .../bundler/bundler-compiler-service.ts | 88 +++++++++++++++++-- 1 file changed, 79 insertions(+), 9 deletions(-) diff --git a/lib/services/bundler/bundler-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts index 12f637b389..76d8aa378a 100644 --- a/lib/services/bundler/bundler-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -129,12 +129,9 @@ export class BundlerCompilerService 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 - ) { + // Determine which files to copy based on build type and changes + if (message.isHMR) { + // HMR updates: only copy changed files console.log( "đŸ”Ĩ HMR update - copying only changed files for:", message.changedFiles, @@ -161,6 +158,24 @@ export class BundlerCompilerService ); } + 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 + console.log( + "đŸ”Ĩ Incremental build - copying only relevant files for:", + message.changedFiles, + ); + + const filesToCopy = this.getIncrementalFilesToCopy( + message.emittedFiles, + message.changedFiles, + ); + console.log("đŸ”Ĩ Incremental build - files to copy:", filesToCopy); + this.copyViteBundleToNative(distOutput, destDir, filesToCopy); } else { console.log("đŸ”Ĩ Full build - copying all files"); @@ -872,8 +887,11 @@ export class BundlerCompilerService 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) + console.log( + "đŸ”Ĩ Selective copy - copying specific files:", + specificFiles, + ); // Ensure destination directory exists fs.mkdirSync(destDir, { recursive: true }); @@ -890,7 +908,7 @@ export class BundlerCompilerService fs.copyFileSync(srcPath, destPath); - console.log(`đŸ”Ĩ HMR: Copied ${file}`); + console.log(`đŸ”Ĩ Copied ${file}`); } } else { // Full build mode: clean and copy everything @@ -916,6 +934,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 { From e901ec358acdfacbe1b329d251d5439373f5afab Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 16 Sep 2025 08:38:51 -0700 Subject: [PATCH 45/53] fix: remove lock from default clean --- 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 b901f546730af30e54ef4d97616a2e631a0182cc Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 16 Sep 2025 08:40:18 -0700 Subject: [PATCH 46/53] chore: 9.0.0-alpha.9 --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 2641073dca..eb88891830 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0", + "version": "9.0.0-alpha.9", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { @@ -54,12 +54,12 @@ "javascript" ], "dependencies": { - "@foxt/js-srp": "^0.0.3-patch2", + "@foxt/js-srp": "0.0.3-patch2", "@nativescript/doctor": "2.0.17", - "@npmcli/arborist": "^9.1.4", + "@npmcli/arborist": "9.1.4", "@rigor789/resolve-package-path": "1.0.7", "@nstudio/trapezedev-project": "7.2.3", - "archiver": "^7.0.1", + "archiver": "7.0.1", "axios": "1.11.0", "byline": "5.0.0", "chokidar": "4.0.3", From ed168d42fcbcf5caa17e30ee21502cf5d0200c4e Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 16 Sep 2025 10:21:49 -0700 Subject: [PATCH 47/53] chore: 9.0.0-alpha.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eb88891830..de5095d036 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.9", + "version": "9.0.0-alpha.10", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From 54e2e9cb5caa04ea98a77e0da4038b4823782c6d Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 22 Sep 2025 14:18:27 -0700 Subject: [PATCH 48/53] fix(vite): ensure proper mode --- lib/services/bundler/bundler-compiler-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/services/bundler/bundler-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts index 38185e6783..7d0423e1dd 100644 --- a/lib/services/bundler/bundler-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -528,7 +528,7 @@ export class BundlerCompilerService // Note: With Vite, we need `--` to prevent vite cli from erroring on unknown options. const envParams = isVite ? [ - `--mode=${platformData.platformNameLowerCase}`, + `--mode=${prepareData.release ? "production" : "development"}`, `--watch`, "--", ...cliArgs, From d941e23754dabf33da9056b9714f9ca4f61fbdcd Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 22 Sep 2025 14:20:19 -0700 Subject: [PATCH 49/53] chore: 9.0.0-alpha.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de5095d036..4d8c78eba3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.10", + "version": "9.0.0-alpha.11", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From 4b0c93502825f12b6be3838d91f16ac207fde9d6 Mon Sep 17 00:00:00 2001 From: Jason Cassidy <47318351+jcassidyav@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:59:04 +0100 Subject: [PATCH 50/53] fix: windows glob paths used in copy operations not working. (#5882) --- lib/nativescript-cli.ts | 51 +++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/lib/nativescript-cli.ts b/lib/nativescript-cli.ts index f9932fc1a3..04b2f90fd3 100644 --- a/lib/nativescript-cli.ts +++ b/lib/nativescript-cli.ts @@ -3,6 +3,35 @@ require("./bootstrap"); import * as shelljs from "shelljs"; shelljs.config.silent = true; shelljs.config.fatal = true; + +if (process.platform === "win32") { + // Later versions of shelljs do not process globs with \ path delimiters correctly, for windows change to / + const realcp = shelljs.cp; + (shelljs as any).cp = (...args: unknown[]) => { + if (args.length === 3) { + args[1] = replaceDashes(args[1] as string | string[]); + } else { + args[0] = replaceDashes(args[0] as string | string[]); + } + + if (args.length == 2) { + realcp(args[0] as string[], args[1] as string); + } else { + realcp(args[0] as string, args[1] as string[], args[2] as string); + } + }; + function replaceDashes(values: string | string[]): string | string[] { + if (Array.isArray(values)) { + for (let i = 0; i < values.length; ++i) { + values[i] = replaceDashes(values[i]) as string; + } + return values; + } else { + return values.replace(/\\/g, "/"); + } + } +} + import { installUncaughtExceptionListener } from "./common/errors"; import { settlePromises } from "./common/helpers"; import { injector } from "./common/yok"; @@ -14,7 +43,7 @@ import { import { IInitializeService } from "./definitions/initialize-service"; import { color } from "./color"; installUncaughtExceptionListener( - process.exit.bind(process, ErrorCodes.UNCAUGHT) + process.exit.bind(process, ErrorCodes.UNCAUGHT), ); const logger: ILogger = injector.resolve("logger"); @@ -23,7 +52,7 @@ export const originalProcessOn = process.on.bind(process); process.on = (event: string, listener: any): any => { if (event === "SIGINT") { logger.trace( - `Trying to handle SIGINT event. CLI overrides this behavior and does not allow handling SIGINT as this causes issues with Ctrl + C in terminal.` + `Trying to handle SIGINT event. CLI overrides this behavior and does not allow handling SIGINT as this causes issues with Ctrl + C in terminal.`, ); const msg = "The stackTrace of the location trying to handle SIGINT is"; const stackTrace = new Error(msg).stack || ""; @@ -31,9 +60,9 @@ process.on = (event: string, listener: any): any => { stackTrace.replace( `Error: ${msg}`, `${msg} (${color.yellow( - "note:" - )} this is not an error, just a stack-trace for debugging purposes):` - ) + "note:", + )} this is not an error, just a stack-trace for debugging purposes):`, + ), ); } else { return originalProcessOn(event, listener); @@ -52,13 +81,12 @@ process.on = (event: string, listener: any): any => { const err: IErrors = injector.resolve("$errors"); err.printCallStack = config.DEBUG; - const $initializeService = injector.resolve( - "initializeService" - ); + const $initializeService = + injector.resolve("initializeService"); await $initializeService.initialize(); const extensibilityService: IExtensibilityService = injector.resolve( - "extensibilityService" + "extensibilityService", ); try { await settlePromises(extensibilityService.loadExtensions()); @@ -66,9 +94,8 @@ process.on = (event: string, listener: any): any => { logger.trace("Unable to load extensions. Error is: ", err); } - const commandDispatcher: ICommandDispatcher = injector.resolve( - "commandDispatcher" - ); + const commandDispatcher: ICommandDispatcher = + injector.resolve("commandDispatcher"); // unused... // const messages: IMessagesService = injector.resolve("$messagesService"); From 89e383aa5995914d566bed399c522916c02e4a5e Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 26 Sep 2025 12:08:21 -0700 Subject: [PATCH 51/53] chore: 9.0.0-alpha.12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4d8c78eba3..65303a9c66 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.11", + "version": "9.0.0-alpha.12", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": { From a2b4ee3fec78cbabde1e24389e0dd31f97ab38e3 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 30 Sep 2025 20:22:19 -0700 Subject: [PATCH 52/53] feat(vite): bundler handling --- .../bundler/bundler-compiler-service.ts | 230 ++++-------------- 1 file changed, 51 insertions(+), 179 deletions(-) diff --git a/lib/services/bundler/bundler-compiler-service.ts b/lib/services/bundler/bundler-compiler-service.ts index 7d0423e1dd..d8c3403db7 100644 --- a/lib/services/bundler/bundler-compiler-service.ts +++ b/lib/services/bundler/bundler-compiler-service.ts @@ -2,6 +2,8 @@ import * as path from "path"; import * as child_process from "child_process"; import * as semver from "semver"; import * as _ from "lodash"; +// TODO: can switch to file-system service +import { mkdirSync, readdirSync, existsSync, copyFileSync, rmSync } from "fs"; import { EventEmitter } from "events"; import { performanceLog } from "../../common/decorators"; import { @@ -126,96 +128,37 @@ export class BundlerCompilerService } // Copy Vite output files directly to platform destination - const distOutput = path.join(projectData.projectDir, "dist"); + const distOutput = path.join( + projectData.projectDir, + ".ns-vite-build", + ); const destDir = path.join( platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, ); if (debugLog) { - console.log(`đŸ”Ĩ Copying from ${distOutput} to ${destDir}`); + console.log(`Copying from ${distOutput} to ${destDir}.`); } // 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; - - // 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", - ); - if (debugLog) { - console.log( - "đŸ”Ĩ HTML change detected - copying component files:", - filesToCopy, - ); - } - } - - this.copyViteBundleToNative(distOutput, destDir, filesToCopy); - } else if ( + if ( message.buildType === "incremental" && - message.changedFiles && - message.changedFiles.length > 0 + message.emittedFiles && + message.emittedFiles.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( - "đŸ”Ĩ Incremental build - files to copy:", - filesToCopy, - ); + console.log("Incremental build - files to copy:", 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 - console.log( - "đŸ”Ĩ Incremental build - copying only relevant files for:", - message.changedFiles, - ); - - const filesToCopy = this.getIncrementalFilesToCopy( - message.emittedFiles, - message.changedFiles, - ); - console.log("đŸ”Ĩ Incremental build - files to copy:", filesToCopy); - this.copyViteBundleToNative(distOutput, destDir, filesToCopy); } else { if (debugLog) { - console.log("đŸ”Ĩ Full build - copying all files"); + console.log("Full build - copying all files."); } this.copyViteBundleToNative(distOutput, destDir); } @@ -254,31 +197,14 @@ export class BundlerCompilerService 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) { - 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 - if (debugLog) { - console.log( - "đŸ”Ĩ Emitting BUNDLER_COMPILATION_COMPLETE for full build", - ); - } - this.emit(BUNDLER_COMPILATION_COMPLETE, data); + + if (debugLog) { + console.log( + "Emitting BUNDLER_COMPILATION_COMPLETE for full build.", + ); } + this.emit(BUNDLER_COMPILATION_COMPLETE, data); + return; } @@ -548,7 +474,7 @@ export class BundlerCompilerService const args = [ ...additionalNodeArgs, this.getBundlerExecutablePath(projectData), - isVite ? "build" : this.isModernBundler(projectData) ? `build` : null, + isVite || this.isModernBundler(projectData) ? "build" : null, `--config=${projectData.bundlerConfigPath}`, ...envParams, ].filter(Boolean); @@ -928,55 +854,53 @@ export class BundlerCompilerService ) { // Clean and copy Vite output to native platform folder if (debugLog) { - console.log(`Copying Vite bundle from "${distOutput}" to "${destDir}"`); + console.log(`Copying Vite bundle from "${distOutput}" to "${destDir}".`); } - const fs = require("fs"); - try { if (specificFiles) { - // Selective mode: only copy specific files (HMR or incremental) + // Selective mode: only copy specific files (incremental) if (debugLog) { console.log( - "đŸ”Ĩ Selective copy - copying specific files:", + "Selective copy - copying specific files:", specificFiles, ); } // Ensure destination directory exists - fs.mkdirSync(destDir, { recursive: true }); + 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; + if (!existsSync(srcPath)) continue; // create parent dirs - fs.mkdirSync(path.dirname(destPath), { recursive: true }); + mkdirSync(path.dirname(destPath), { recursive: true }); - fs.copyFileSync(srcPath, destPath); + copyFileSync(srcPath, destPath); if (debugLog) { - console.log(`đŸ”Ĩ Copied ${file}`); + console.log(`Copied ${file}`); } } } else { // Full build mode: clean and copy everything if (debugLog) { - console.log("đŸ”Ĩ Full build: Copying all files"); + console.log("Full build: Copying all files."); } // Clean destination directory - if (fs.existsSync(destDir)) { - fs.rmSync(destDir, { recursive: true, force: true }); + if (existsSync(destDir)) { + rmSync(destDir, { recursive: true, force: true }); } - fs.mkdirSync(destDir, { recursive: true }); + mkdirSync(destDir, { recursive: true }); // Copy all files from dist to platform destination - if (fs.existsSync(distOutput)) { - this.copyRecursiveSync(distOutput, destDir, fs); + if (existsSync(distOutput)) { + this.copyRecursiveSync(distOutput, destDir); } else { this.$logger.warn( `Vite output directory does not exist: ${distOutput}`, @@ -988,51 +912,31 @@ export class BundlerCompilerService } } - private getIncrementalFilesToCopy( - emittedFiles: string[], - changedFiles: string[], - ): string[] { + private getIncrementalFilesToCopy(emittedFiles: 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 + // default to ignoring vendor files as they are less likely to change during live reloads const bundleFiles = emittedFiles.filter( (file) => !file.includes("vendor") && - (file.includes("bundle") || - file.includes("main") || - file.includes("app") || - file.endsWith(".mjs") || - file.endsWith(".js")), + (file.endsWith(".mjs") || + file.endsWith(".js") || + file.endsWith(".map")), ); 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( + // Only copy assets if there are explicit asset-related changes + const assetFiles = emittedFiles.filter( (file) => - file.includes("/assets/") || - file.includes("/static/") || - file.includes("/public/"), + file.includes("assets/") || + file.includes("static/") || + file.includes("fonts/") || + file.includes("images/"), ); - - 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/"), - ); + if (assetFiles.length > 0) { filesToCopy.push(...assetFiles); } @@ -1040,48 +944,16 @@ export class BundlerCompilerService return [...new Set(filesToCopy)]; } - 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", () => { - 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 - if (debugLog) { - console.log( - "đŸ”Ĩ HMR bridge not available (this is normal without HMR)", - ); - } - }); - } catch (error) { - // WebSocket not available, which is fine - if (debugLog) { - 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 })) { + private copyRecursiveSync(src: string, dest: string) { + for (const entry of 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); + mkdirSync(destPath, { recursive: true }); + this.copyRecursiveSync(srcPath, destPath); } else if (entry.isFile() || entry.isSymbolicLink()) { - fs.copyFileSync(srcPath, destPath); + copyFileSync(srcPath, destPath); } } } From e3c0c10ecfc46d186826ad99a2c92d1216a8c677 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 30 Sep 2025 20:23:56 -0700 Subject: [PATCH 53/53] chore: 9.0.0-alpha.13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 65303a9c66..fcd7728cce 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nativescript", "main": "./lib/nativescript-cli-lib.js", - "version": "9.0.0-alpha.12", + "version": "9.0.0-alpha.13", "author": "NativeScript ", "description": "Command-line interface for building NativeScript projects", "bin": {