From 94db30ca45df57ffd50ad96b4da0e949b0628bd6 Mon Sep 17 00:00:00 2001 From: Miroslav Jonas Date: Tue, 3 Jan 2023 12:12:11 +0100 Subject: [PATCH] feat(core): support pnpm with new parsing logic --- docs/generated/devkit/index.md | 2424 +++++++++++++++++ docs/generated/devkit/ngcli_adapter.md | 118 + package.json | 3 +- packages/nx/package.json | 1 + .../auxiliary-packages/.modules.yaml.ts | 416 +++ .../{pnpm-lock.yaml => pnpm-lock.yaml.ts} | 3 +- .../__fixtures__/nextjs/.modules.yaml.ts | 2261 +++++++++++++++ .../{pnpm-lock.yaml => pnpm-lock.yaml.ts} | 3 +- packages/nx/src/lock-file/npm-v2.spec.ts | 132 +- packages/nx/src/lock-file/npm-v2.ts | 10 +- packages/nx/src/lock-file/npm.ts | 12 - packages/nx/src/lock-file/pnpm-v2.spec.ts | 204 ++ packages/nx/src/lock-file/pnpm-v2.ts | 297 ++ packages/nx/src/lock-file/pnpm.spec.ts | 26 +- packages/nx/src/lock-file/pnpm.ts | 44 - .../src/lock-file/utils/lock-file-builder.ts | 47 +- .../nx/src/lock-file/utils/pnpm-helpers.ts | 193 ++ packages/nx/src/lock-file/yarn-v2.spec.ts | 44 + packages/nx/src/lock-file/yarn-v2.ts | 30 +- packages/nx/src/lock-file/yarn.spec.ts | 8 +- packages/nx/tsconfig.lib.json | 5 +- yarn.lock | 315 +-- 22 files changed, 6101 insertions(+), 495 deletions(-) create mode 100644 docs/generated/devkit/index.md create mode 100644 docs/generated/devkit/ngcli_adapter.md create mode 100644 packages/nx/src/lock-file/__fixtures__/auxiliary-packages/.modules.yaml.ts rename packages/nx/src/lock-file/__fixtures__/auxiliary-packages/{pnpm-lock.yaml => pnpm-lock.yaml.ts} (99%) create mode 100644 packages/nx/src/lock-file/__fixtures__/nextjs/.modules.yaml.ts rename packages/nx/src/lock-file/__fixtures__/nextjs/{pnpm-lock.yaml => pnpm-lock.yaml.ts} (99%) create mode 100644 packages/nx/src/lock-file/pnpm-v2.spec.ts create mode 100644 packages/nx/src/lock-file/pnpm-v2.ts create mode 100644 packages/nx/src/lock-file/utils/pnpm-helpers.ts diff --git a/docs/generated/devkit/index.md b/docs/generated/devkit/index.md new file mode 100644 index 00000000000000..5fadc33a0b6221 --- /dev/null +++ b/docs/generated/devkit/index.md @@ -0,0 +1,2424 @@ +# Module: index + +The Nx Devkit is the underlying technology used to customize Nx to support +different technologies and custom use-cases. It contains many utility +functions for reading and writing files, updating configuration, +working with Abstract Syntax Trees(ASTs), and more. + +As with most things in Nx, the core of Nx Devkit is very simple. +It only uses language primitives and immutable objects +(the tree being the only exception). + +## Table of contents + +### Project Graph Enumerations + +- [DependencyType](../../devkit/documents/index#dependencytype) + +### Utils Enumerations + +- [ChangeType](../../devkit/documents/index#changetype) + +### Project Graph Classes + +- [ProjectGraphBuilder](../../devkit/documents/index#projectgraphbuilder) + +### Utils Classes + +- [Hasher](../../devkit/documents/index#hasher) + +### Workspace Classes + +- [Workspaces](../../devkit/documents/index#workspaces) + +### Commands Interfaces + +- [Target](../../devkit/documents/index#target) + +### Other Interfaces + +- [NxPlugin](../../devkit/documents/index#nxplugin) + +### Project Graph Interfaces + +- [FileData](../../devkit/documents/index#filedata) +- [ProjectFileMap](../../devkit/documents/index#projectfilemap) +- [ProjectGraph](../../devkit/documents/index#projectgraph) +- [ProjectGraphDependency](../../devkit/documents/index#projectgraphdependency) +- [ProjectGraphExternalNode](../../devkit/documents/index#projectgraphexternalnode) +- [ProjectGraphProcessorContext](../../devkit/documents/index#projectgraphprocessorcontext) +- [ProjectGraphProjectNode](../../devkit/documents/index#projectgraphprojectnode) +- [ProjectGraphV4](../../devkit/documents/index#projectgraphv4) + +### Tree Interfaces + +- [FileChange](../../devkit/documents/index#filechange) +- [Tree](../../devkit/documents/index#tree) + +### Utils Interfaces + +- [DefaultTasksRunnerOptions](../../devkit/documents/index#defaulttasksrunneroptions) +- [Hash](../../devkit/documents/index#hash) +- [JsonParseOptions](../../devkit/documents/index#jsonparseoptions) +- [JsonSerializeOptions](../../devkit/documents/index#jsonserializeoptions) +- [ModuleFederationConfig](../../devkit/documents/index#modulefederationconfig) +- [RemoteCache](../../devkit/documents/index#remotecache) +- [SharedLibraryConfig](../../devkit/documents/index#sharedlibraryconfig) +- [StringDeletion](../../devkit/documents/index#stringdeletion) +- [StringInsertion](../../devkit/documents/index#stringinsertion) + +### Workspace Interfaces + +- [ExecutorContext](../../devkit/documents/index#executorcontext) +- [ExecutorsJson](../../devkit/documents/index#executorsjson) +- [GeneratorsJson](../../devkit/documents/index#generatorsjson) +- [HasherContext](../../devkit/documents/index#hashercontext) +- [ImplicitJsonSubsetDependency](../../devkit/documents/index#implicitjsonsubsetdependency) +- [MigrationsJson](../../devkit/documents/index#migrationsjson) +- [NxAffectedConfig](../../devkit/documents/index#nxaffectedconfig) +- [NxJsonConfiguration](../../devkit/documents/index#nxjsonconfiguration) +- [ProjectConfiguration](../../devkit/documents/index#projectconfiguration) +- [ProjectsConfigurations](../../devkit/documents/index#projectsconfigurations) +- [TargetConfiguration](../../devkit/documents/index#targetconfiguration) +- [TargetDependencyConfig](../../devkit/documents/index#targetdependencyconfig) +- [Task](../../devkit/documents/index#task) +- [TaskGraph](../../devkit/documents/index#taskgraph) +- [Workspace](../../devkit/documents/index#workspace) + +### Generators Type aliases + +- [WorkspaceConfiguration](../../devkit/documents/index#workspaceconfiguration) + +### Other Type aliases + +- [ProjectTargetConfigurator](../../devkit/documents/index#projecttargetconfigurator) + +### Package Manager Type aliases + +- [PackageManager](../../devkit/documents/index#packagemanager) + +### Project Graph Type aliases + +- [ProjectGraphNode](../../devkit/documents/index#projectgraphnode) + +### Utils Type aliases + +- [AdditionalSharedConfig](../../devkit/documents/index#additionalsharedconfig) +- [ModuleFederationLibrary](../../devkit/documents/index#modulefederationlibrary) +- [Remotes](../../devkit/documents/index#remotes) +- [SharedFunction](../../devkit/documents/index#sharedfunction) +- [SharedWorkspaceLibraryConfig](../../devkit/documents/index#sharedworkspacelibraryconfig) +- [StringChange](../../devkit/documents/index#stringchange) +- [WorkspaceLibrary](../../devkit/documents/index#workspacelibrary) +- [WorkspaceLibrarySecondaryEntryPoint](../../devkit/documents/index#workspacelibrarysecondaryentrypoint) + +### Workspace Type aliases + +- [CustomHasher](../../devkit/documents/index#customhasher) +- [Executor](../../devkit/documents/index#executor) +- [Generator](../../devkit/documents/index#generator) +- [GeneratorCallback](../../devkit/documents/index#generatorcallback) +- [ImplicitDependencyEntry](../../devkit/documents/index#implicitdependencyentry) +- [ProjectType](../../devkit/documents/index#projecttype) +- [TaskGraphExecutor](../../devkit/documents/index#taskgraphexecutor) +- [WorkspaceJsonConfiguration](../../devkit/documents/index#workspacejsonconfiguration) + +### Logger Variables + +- [logger](../../devkit/documents/index#logger) + +### Utils Variables + +- [appRootPath](../../devkit/documents/index#approotpath) +- [cacheDir](../../devkit/documents/index#cachedir) +- [output](../../devkit/documents/index#output) +- [workspaceRoot](../../devkit/documents/index#workspaceroot) + +### Functions + +- [addDependenciesToPackageJson](../../devkit/documents/index#adddependenciestopackagejson) +- [addProjectConfiguration](../../devkit/documents/index#addprojectconfiguration) +- [applyAdditionalShared](../../devkit/documents/index#applyadditionalshared) +- [applyChangesToString](../../devkit/documents/index#applychangestostring) +- [applySharedFunction](../../devkit/documents/index#applysharedfunction) +- [convertNxExecutor](../../devkit/documents/index#convertnxexecutor) +- [convertNxGenerator](../../devkit/documents/index#convertnxgenerator) +- [createLockFile](../../devkit/documents/index#createlockfile) +- [createPackageJson](../../devkit/documents/index#createpackagejson) +- [createProjectGraphAsync](../../devkit/documents/index#createprojectgraphasync) +- [defaultTasksRunner](../../devkit/documents/index#defaulttasksrunner) +- [detectPackageManager](../../devkit/documents/index#detectpackagemanager) +- [detectWorkspaceScope](../../devkit/documents/index#detectworkspacescope) +- [ensurePackage](../../devkit/documents/index#ensurepackage) +- [extractLayoutDirectory](../../devkit/documents/index#extractlayoutdirectory) +- [formatFiles](../../devkit/documents/index#formatfiles) +- [generateFiles](../../devkit/documents/index#generatefiles) +- [getDependentPackagesForProject](../../devkit/documents/index#getdependentpackagesforproject) +- [getImportPath](../../devkit/documents/index#getimportpath) +- [getNpmPackageSharedConfig](../../devkit/documents/index#getnpmpackagesharedconfig) +- [getOutputsForTargetAndConfiguration](../../devkit/documents/index#getoutputsfortargetandconfiguration) +- [getPackageManagerCommand](../../devkit/documents/index#getpackagemanagercommand) +- [getPackageManagerVersion](../../devkit/documents/index#getpackagemanagerversion) +- [getProjects](../../devkit/documents/index#getprojects) +- [getWorkspaceLayout](../../devkit/documents/index#getworkspacelayout) +- [getWorkspacePath](../../devkit/documents/index#getworkspacepath) +- [installPackagesTask](../../devkit/documents/index#installpackagestask) +- [isStandaloneProject](../../devkit/documents/index#isstandaloneproject) +- [joinPathFragments](../../devkit/documents/index#joinpathfragments) +- [mapRemotes](../../devkit/documents/index#mapremotes) +- [mapRemotesForSSR](../../devkit/documents/index#mapremotesforssr) +- [moveFilesToNewDirectory](../../devkit/documents/index#movefilestonewdirectory) +- [names](../../devkit/documents/index#names) +- [normalizePath](../../devkit/documents/index#normalizepath) +- [offsetFromRoot](../../devkit/documents/index#offsetfromroot) +- [parseJson](../../devkit/documents/index#parsejson) +- [parseTargetString](../../devkit/documents/index#parsetargetstring) +- [readAllWorkspaceConfiguration](../../devkit/documents/index#readallworkspaceconfiguration) +- [readCachedProjectGraph](../../devkit/documents/index#readcachedprojectgraph) +- [readJson](../../devkit/documents/index#readjson) +- [readJsonFile](../../devkit/documents/index#readjsonfile) +- [readNxJson](../../devkit/documents/index#readnxjson) +- [readProjectConfiguration](../../devkit/documents/index#readprojectconfiguration) +- [readRootPackageJson](../../devkit/documents/index#readrootpackagejson) +- [readTargetOptions](../../devkit/documents/index#readtargetoptions) +- [readWorkspaceConfiguration](../../devkit/documents/index#readworkspaceconfiguration) +- [removeDependenciesFromPackageJson](../../devkit/documents/index#removedependenciesfrompackagejson) +- [removeProjectConfiguration](../../devkit/documents/index#removeprojectconfiguration) +- [reverse](../../devkit/documents/index#reverse) +- [runExecutor](../../devkit/documents/index#runexecutor) +- [serializeJson](../../devkit/documents/index#serializejson) +- [sharePackages](../../devkit/documents/index#sharepackages) +- [shareWorkspaceLibraries](../../devkit/documents/index#shareworkspacelibraries) +- [stripIndents](../../devkit/documents/index#stripindents) +- [stripJsonComments](../../devkit/documents/index#stripjsoncomments) +- [targetToTargetString](../../devkit/documents/index#targettotargetstring) +- [toJS](../../devkit/documents/index#tojs) +- [updateJson](../../devkit/documents/index#updatejson) +- [updateProjectConfiguration](../../devkit/documents/index#updateprojectconfiguration) +- [updateTsConfigsToJs](../../devkit/documents/index#updatetsconfigstojs) +- [updateWorkspaceConfiguration](../../devkit/documents/index#updateworkspaceconfiguration) +- [visitNotIgnoredFiles](../../devkit/documents/index#visitnotignoredfiles) +- [workspaceLayout](../../devkit/documents/index#workspacelayout) +- [writeJson](../../devkit/documents/index#writejson) +- [writeJsonFile](../../devkit/documents/index#writejsonfile) + +## Project Graph Enumerations + +### DependencyType + +• **DependencyType**: `Object` + +--- + +## Utils Enumerations + +### ChangeType + +• **ChangeType**: `Object` + +## Project Graph Classes + +### ProjectGraphBuilder + +• **ProjectGraphBuilder**: `Object` + +--- + +## Utils Classes + +### Hasher + +• **Hasher**: `Object` + +--- + +## Workspace Classes + +### Workspaces + +• **Workspaces**: `Object` + +## Commands Interfaces + +### Target + +• **Target**: `Object` + +--- + +## Other Interfaces + +### NxPlugin + +• **NxPlugin**: `Object` + +A plugin for Nx + +--- + +## Project Graph Interfaces + +### FileData + +• **FileData**: `Object` + +--- + +### ProjectFileMap + +• **ProjectFileMap**: `Object` + +--- + +### ProjectGraph + +• **ProjectGraph**<`T`\>: `Object` + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +--- + +### ProjectGraphDependency + +• **ProjectGraphDependency**: `Object` + +--- + +### ProjectGraphExternalNode + +• **ProjectGraphExternalNode**: `Object` + +--- + +### ProjectGraphProcessorContext + +• **ProjectGraphProcessorContext**: `Object` + +--- + +### ProjectGraphProjectNode + +• **ProjectGraphProjectNode**<`T`\>: `Object` + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +--- + +### ProjectGraphV4 + +• **ProjectGraphV4**<`T`\>: `Object` + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +--- + +## Tree Interfaces + +### FileChange + +• **FileChange**: `Object` + +--- + +### Tree + +• **Tree**: `Object` + +--- + +## Utils Interfaces + +### DefaultTasksRunnerOptions + +• **DefaultTasksRunnerOptions**: `Object` + +--- + +### Hash + +• **Hash**: `Object` + +--- + +### JsonParseOptions + +• **JsonParseOptions**: `Object` + +--- + +### JsonSerializeOptions + +• **JsonSerializeOptions**: `Object` + +--- + +### ModuleFederationConfig + +• **ModuleFederationConfig**: `Object` + +--- + +### RemoteCache + +• **RemoteCache**: `Object` + +--- + +### SharedLibraryConfig + +• **SharedLibraryConfig**: `Object` + +--- + +### StringDeletion + +• **StringDeletion**: `Object` + +--- + +### StringInsertion + +• **StringInsertion**: `Object` + +--- + +## Workspace Interfaces + +### ExecutorContext + +• **ExecutorContext**: `Object` + +--- + +### ExecutorsJson + +• **ExecutorsJson**: `Object` + +--- + +### GeneratorsJson + +• **GeneratorsJson**: `Object` + +--- + +### HasherContext + +• **HasherContext**: `Object` + +--- + +### ImplicitJsonSubsetDependency + +• **ImplicitJsonSubsetDependency**<`T`\>: `Object` + +#### Type parameters + +| Name | Type | +| :--- | :------------------ | +| `T` | `"*"` \| `string`[] | + +--- + +### MigrationsJson + +• **MigrationsJson**: `Object` + +--- + +### NxAffectedConfig + +• **NxAffectedConfig**: `Object` + +--- + +### NxJsonConfiguration + +• **NxJsonConfiguration**<`T`\>: `Object` + +#### Type parameters + +| Name | Type | +| :--- | :------------------ | +| `T` | `"*"` \| `string`[] | + +--- + +### ProjectConfiguration + +• **ProjectConfiguration**: `Object` + +--- + +### ProjectsConfigurations + +• **ProjectsConfigurations**: `Object` + +--- + +### TargetConfiguration + +• **TargetConfiguration**<`T`\>: `Object` + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +--- + +### TargetDependencyConfig + +• **TargetDependencyConfig**: `Object` + +--- + +### Task + +• **Task**: `Object` + +--- + +### TaskGraph + +• **TaskGraph**: `Object` + +--- + +### Workspace + +• **Workspace**: `Object` + +## Generators Type aliases + +### WorkspaceConfiguration + +Ƭ **WorkspaceConfiguration**: `Omit`<[`ProjectsConfigurations`](../../devkit/documents/index#projectsconfigurations), `"projects"`\> & `Partial`<[`NxJsonConfiguration`](../../devkit/documents/index#nxjsonconfiguration)\> + +--- + +## Other Type aliases + +### ProjectTargetConfigurator + +Ƭ **ProjectTargetConfigurator**: (`file`: `string`) => `Record`<`string`, [`TargetConfiguration`](../../devkit/documents/index#targetconfiguration)\> + +#### Type declaration + +▸ (`file`): `Record`<`string`, [`TargetConfiguration`](../../devkit/documents/index#targetconfiguration)\> + +##### Parameters + +| Name | Type | +| :----- | :------- | +| `file` | `string` | + +##### Returns + +`Record`<`string`, [`TargetConfiguration`](../../devkit/documents/index#targetconfiguration)\> + +--- + +## Package Manager Type aliases + +### PackageManager + +Ƭ **PackageManager**: `"yarn"` \| `"pnpm"` \| `"npm"` + +--- + +## Project Graph Type aliases + +### ProjectGraphNode + +Ƭ **ProjectGraphNode**<`T`\>: [`ProjectGraphProjectNode`](../../devkit/documents/index#projectgraphprojectnode)<`T`\> \| [`ProjectGraphExternalNode`](../../devkit/documents/index#projectgraphexternalnode) + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +--- + +## Utils Type aliases + +### AdditionalSharedConfig + +Ƭ **AdditionalSharedConfig**: (`string` \| [libraryName: string, sharedConfig: SharedLibraryConfig] \| { `libraryName`: `string` ; `sharedConfig`: [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig) })[] + +--- + +### ModuleFederationLibrary + +Ƭ **ModuleFederationLibrary**: `Object` + +#### Type declaration + +| Name | Type | +| :----- | :------- | +| `name` | `string` | +| `type` | `string` | + +--- + +### Remotes + +Ƭ **Remotes**: `string`[] \| [remoteName: string, remoteUrl: string][] + +--- + +### SharedFunction + +Ƭ **SharedFunction**: (`libraryName`: `string`, `sharedConfig`: [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig)) => `undefined` \| `false` \| [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig) + +#### Type declaration + +▸ (`libraryName`, `sharedConfig`): `undefined` \| `false` \| [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig) + +##### Parameters + +| Name | Type | +| :------------- | :------------------------------------------------------------------------ | +| `libraryName` | `string` | +| `sharedConfig` | [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig) | + +##### Returns + +`undefined` \| `false` \| [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig) + +--- + +### SharedWorkspaceLibraryConfig + +Ƭ **SharedWorkspaceLibraryConfig**: `Object` + +#### Type declaration + +| Name | Type | +| :--------------------- | :---------------------------------------------------------------------------------------------------------------------- | +| `getAliases` | () => `Record`<`string`, `string`\> | +| `getLibraries` | (`eager?`: `boolean`) => `Record`<`string`, [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig)\> | +| `getReplacementPlugin` | () => `NormalModuleReplacementPlugin` | + +--- + +### StringChange + +Ƭ **StringChange**: [`StringInsertion`](../../devkit/documents/index#stringinsertion) \| [`StringDeletion`](../../devkit/documents/index#stringdeletion) + +--- + +### WorkspaceLibrary + +Ƭ **WorkspaceLibrary**: `Object` + +#### Type declaration + +| Name | Type | +| :---------- | :---------------------- | +| `importKey` | `string` \| `undefined` | +| `name` | `string` | +| `root` | `string` | + +--- + +### WorkspaceLibrarySecondaryEntryPoint + +Ƭ **WorkspaceLibrarySecondaryEntryPoint**: `Object` + +#### Type declaration + +| Name | Type | +| :----- | :------- | +| `name` | `string` | +| `path` | `string` | + +--- + +## Workspace Type aliases + +### CustomHasher + +Ƭ **CustomHasher**: (`task`: [`Task`](../../devkit/documents/index#task), `context`: [`HasherContext`](../../devkit/documents/index#hashercontext)) => `Promise`<[`Hash`](../../devkit/documents/index#hash)\> + +#### Type declaration + +▸ (`task`, `context`): `Promise`<[`Hash`](../../devkit/documents/index#hash)\> + +##### Parameters + +| Name | Type | +| :-------- | :------------------------------------------------------------ | +| `task` | [`Task`](../../devkit/documents/index#task) | +| `context` | [`HasherContext`](../../devkit/documents/index#hashercontext) | + +##### Returns + +`Promise`<[`Hash`](../../devkit/documents/index#hash)\> + +--- + +### Executor + +Ƭ **Executor**<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/index#executorcontext)) => `Promise`<`Object`\> \| `AsyncIterableIterator`<`Object`\> + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +#### Type declaration + +▸ (`options`, `context`): `Promise`<`Object`\> \| `AsyncIterableIterator`<`Object`\> + +Implementation of a target of a project + +##### Parameters + +| Name | Type | +| :-------- | :---------------------------------------------------------------- | +| `options` | `T` | +| `context` | [`ExecutorContext`](../../devkit/documents/index#executorcontext) | + +##### Returns + +`Promise`<`Object`\> \| `AsyncIterableIterator`<`Object`\> + +--- + +### Generator + +Ƭ **Generator**<`T`\>: (`tree`: `any`, `schema`: `T`) => `void` \| [`GeneratorCallback`](../../devkit/documents/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../devkit/documents/index#generatorcallback)\> + +#### Type parameters + +| Name | Type | +| :--- | :-------- | +| `T` | `unknown` | + +#### Type declaration + +▸ (`tree`, `schema`): `void` \| [`GeneratorCallback`](../../devkit/documents/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../devkit/documents/index#generatorcallback)\> + +A function that schedules updates to the filesystem to be done atomically + +##### Parameters + +| Name | Type | +| :------- | :---- | +| `tree` | `any` | +| `schema` | `T` | + +##### Returns + +`void` \| [`GeneratorCallback`](../../devkit/documents/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../devkit/documents/index#generatorcallback)\> + +--- + +### GeneratorCallback + +Ƭ **GeneratorCallback**: () => `void` \| `Promise`<`void`\> + +#### Type declaration + +▸ (): `void` \| `Promise`<`void`\> + +A callback function that is executed after changes are made to the file system + +##### Returns + +`void` \| `Promise`<`void`\> + +--- + +### ImplicitDependencyEntry + +Ƭ **ImplicitDependencyEntry**<`T`\>: `Object` + +#### Type parameters + +| Name | Type | +| :--- | :------------------ | +| `T` | `"*"` \| `string`[] | + +#### Index signature + +▪ [key: `string`]: `T` \| [`ImplicitJsonSubsetDependency`](../../devkit/documents/index#implicitjsonsubsetdependency)<`T`\> + +--- + +### ProjectType + +Ƭ **ProjectType**: `"library"` \| `"application"` + +--- + +### TaskGraphExecutor + +Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../devkit/documents/index#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/index#executorcontext)) => `Promise`<`Record`<`string`, `Object`\>\> + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +#### Type declaration + +▸ (`taskGraph`, `options`, `overrides`, `context`): `Promise`<`Record`<`string`, `Object`\>\> + +Implementation of a target of a project that handles multiple projects to be batched + +##### Parameters + +| Name | Type | +| :---------- | :---------------------------------------------------------------- | +| `taskGraph` | [`TaskGraph`](../../devkit/documents/index#taskgraph) | +| `options` | `Record`<`string`, `T`\> | +| `overrides` | `T` | +| `context` | [`ExecutorContext`](../../devkit/documents/index#executorcontext) | + +##### Returns + +`Promise`<`Record`<`string`, `Object`\>\> + +--- + +### WorkspaceJsonConfiguration + +Ƭ **WorkspaceJsonConfiguration**: [`ProjectsConfigurations`](../../devkit/documents/index#projectsconfigurations) + +## Logger Variables + +### logger + +• **logger**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :-------------------------- | +| `debug` | (...`s`: `any`[]) => `void` | +| `error` | (`s`: `any`) => `void` | +| `fatal` | (...`s`: `any`[]) => `void` | +| `info` | (`s`: `any`) => `void` | +| `log` | (...`s`: `any`[]) => `void` | +| `warn` | (`s`: `any`) => `void` | + +--- + +## Utils Variables + +### appRootPath + +• **appRootPath**: `string` = `workspaceRoot` + +--- + +### cacheDir + +• **cacheDir**: `string` + +--- + +### output + +• **output**: `CLIOutput` + +--- + +### workspaceRoot + +• **workspaceRoot**: `string` + +## Functions + +### addDependenciesToPackageJson + +▸ **addDependenciesToPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../devkit/documents/index#generatorcallback) + +Add Dependencies and Dev Dependencies to package.json + +For example: + +```typescript +addDependenciesToPackageJson(tree, { react: 'latest' }, { jest: 'latest' }); +``` + +This will **add** `react` and `jest` to the dependencies and devDependencies sections of package.json respectively. + +#### Parameters + +| Name | Type | Default value | Description | +| :---------------- | :------------------------------------------ | :--------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | `undefined` | Tree representing file system to modify | +| `dependencies` | `Record`<`string`, `string`\> | `undefined` | Dependencies to be added to the dependencies section of package.json | +| `devDependencies` | `Record`<`string`, `string`\> | `undefined` | Dependencies to be added to the devDependencies section of package.json | +| `packageJsonPath` | `string` | `'package.json'` | Path to package.json | + +#### Returns + +[`GeneratorCallback`](../../devkit/documents/index#generatorcallback) + +Callback to install dependencies only if necessary, no-op otherwise + +--- + +### addProjectConfiguration + +▸ **addProjectConfiguration**(`tree`, `projectName`, `projectConfiguration`, `standalone?`): `void` + +Adds project configuration to the Nx workspace. + +The project configuration is stored in workspace.json or the associated project.json file. +The utility will update either files. + +#### Parameters + +| Name | Type | Description | +| :--------------------- | :-------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| `projectConfiguration` | [`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration) | project configuration | +| `standalone?` | `boolean` | should the project use package.json? If false, the project config is inside workspace.json | + +#### Returns + +`void` + +--- + +### applyAdditionalShared + +▸ **applyAdditionalShared**(`sharedConfig`, `additionalShared`, `projectGraph`): `void` + +Add additional dependencies to the shared package that may not have been +discovered by the project graph. + +This can be useful for applications that use a Dependency Injection system +that expects certain Singleton values to be present in the shared injection +hierarchy. + +#### Parameters + +| Name | Type | Description | +| :----------------- | :--------------------------------------------------------------------------------------------- | :--------------------------------- | +| `sharedConfig` | `Record`<`string`, [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig)\> | The original Shared Config | +| `additionalShared` | [`AdditionalSharedConfig`](../../devkit/documents/index#additionalsharedconfig) | The additional dependencies to add | +| `projectGraph` | [`ProjectGraph`](../../devkit/documents/index#projectgraph)<`any`\> | The Nx project graph | + +#### Returns + +`void` + +--- + +### applyChangesToString + +▸ **applyChangesToString**(`text`, `changes`): `string` + +Applies a list of changes to a string's original value. + +This is useful when working with ASTs. + +For Example, to rename a property in a method's options: + +```typescript +const code = `bootstrap({ + target: document.querySelector('#app') +})`; + +const indexOfPropertyName = 13; // Usually determined by analyzing an AST. +const updatedCode = applyChangesToString(code, [ + { + type: ChangeType.Insert, + index: indexOfPropertyName, + text: 'element', + }, + { + type: ChangeType.Delete, + start: indexOfPropertyName, + length: 6, + }, +]); + +bootstrap({ + element: document.querySelector('#app'), +}); +``` + +#### Parameters + +| Name | Type | +| :-------- | :------------------------------------------------------------ | +| `text` | `string` | +| `changes` | [`StringChange`](../../devkit/documents/index#stringchange)[] | + +#### Returns + +`string` + +--- + +### applySharedFunction + +▸ **applySharedFunction**(`sharedConfig`, `sharedFn`): `void` + +Apply a custom function provided by the user that will modify the Shared Config +of the dependencies for the Module Federation build. + +#### Parameters + +| Name | Type | Description | +| :------------- | :--------------------------------------------------------------------------------------------- | :---------------------------------------- | +| `sharedConfig` | `Record`<`string`, [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig)\> | The original Shared Config to be modified | +| `sharedFn` | [`SharedFunction`](../../devkit/documents/index#sharedfunction) | The custom function to run | + +#### Returns + +`void` + +--- + +### convertNxExecutor + +▸ **convertNxExecutor**(`executor`): `any` + +Convert an Nx Executor into an Angular Devkit Builder + +Use this to expose a compatible Angular Builder + +#### Parameters + +| Name | Type | +| :--------- | :---------------------------------------------------------- | +| `executor` | [`Executor`](../../devkit/documents/index#executor)<`any`\> | + +#### Returns + +`any` + +--- + +### convertNxGenerator + +▸ **convertNxGenerator**<`T`\>(`generator`, `skipWritingConfigInOldFormat?`): (`generatorOptions`: `T`) => (`tree`: `any`, `context`: `any`) => `Promise`<`any`\> + +Convert an Nx Generator into an Angular Devkit Schematic. + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +#### Parameters + +| Name | Type | Default value | Description | +| :----------------------------- | :---------------------------------------------------------- | :------------ | :------------------------------------------------------------------------------------------------ | +| `generator` | [`Generator`](../../devkit/documents/index#generator)<`T`\> | `undefined` | The Nx generator to convert to an Angular Devkit Schematic. | +| `skipWritingConfigInOldFormat` | `boolean` | `false` | Whether to skip writing the configuration in the old format (the one used by the Angular DevKit). | + +#### Returns + +`fn` + +▸ (`generatorOptions`): (`tree`: `any`, `context`: `any`) => `Promise`<`any`\> + +##### Parameters + +| Name | Type | +| :----------------- | :--- | +| `generatorOptions` | `T` | + +##### Returns + +`fn` + +▸ (`tree`, `context`): `Promise`<`any`\> + +##### Parameters + +| Name | Type | +| :-------- | :---- | +| `tree` | `any` | +| `context` | `any` | + +##### Returns + +`Promise`<`any`\> + +--- + +### createLockFile + +▸ **createLockFile**(`packageJson`, `packageManager?`): `string` + +Create lock file based on the root level lock file and (pruned) package.json + +#### Parameters + +| Name | Type | +| :--------------- | :-------------------------------------------------------------- | +| `packageJson` | `PackageJson` | +| `packageManager` | [`PackageManager`](../../devkit/documents/index#packagemanager) | + +#### Returns + +`string` + +--- + +### createPackageJson + +▸ **createPackageJson**(`projectName`, `graph`, `options?`): `PackageJson` + +Creates a package.json in the output directory for support to install dependencies within containers. + +If a package.json exists in the project, it will reuse that. +If isProduction flag is set, it wil remove devDependencies and optional peerDependencies + +#### Parameters + +| Name | Type | +| :---------------------- | :------------------------------------------------------------------ | +| `projectName` | `string` | +| `graph` | [`ProjectGraph`](../../devkit/documents/index#projectgraph)<`any`\> | +| `options` | `Object` | +| `options.isProduction?` | `boolean` | +| `options.root?` | `string` | + +#### Returns + +`PackageJson` + +--- + +### createProjectGraphAsync + +▸ **createProjectGraphAsync**(`opts?`): `Promise`<[`ProjectGraph`](../../devkit/documents/index#projectgraph)\> + +Computes and returns a ProjectGraph. + +Nx will compute the graph either in a daemon process or in the current process. + +Nx will compute it in the current process if: + +- The process is running in CI (CI env variable is to true or other common variables used by CI providers are set). +- It is running in the docker container. +- The daemon process is disabled because of the previous error when starting the daemon. +- `NX_DAEMON` is set to `false`. +- `useDaemon` is set to false in `nx.json` + +`NX_DAEMON` env variable takes precedence: + +- If it is set to true, the daemon will always be used. +- If it is set to false, the graph will always be computed in the current process. + +Tip: If you want to debug project graph creation, run your command with NX_DAEMON=false. + +Nx uses two layers of caching: the information about explicit dependencies stored on the disk and the information +stored in the daemon process. To reset both run: `nx reset`. + +#### Parameters + +| Name | Type | +| :------------------------ | :-------- | +| `opts` | `Object` | +| `opts.exitOnError` | `boolean` | +| `opts.resetDaemonClient?` | `boolean` | + +#### Returns + +`Promise`<[`ProjectGraph`](../../devkit/documents/index#projectgraph)\> + +--- + +### defaultTasksRunner + +▸ `Const` **defaultTasksRunner**(`tasks`, `options`, `context?`): `any` + +#### Parameters + +| Name | Type | +| :--------------------------- | :---------------------------------------------------------------------------------------------- | +| `tasks` | [`Task`](../../devkit/documents/index#task)[] | +| `options` | [`DefaultTasksRunnerOptions`](../../devkit/documents/index#defaulttasksrunneroptions) | +| `context?` | `Object` | +| `context.daemon?` | `DaemonClient` | +| `context.hasher?` | [`Hasher`](../../devkit/documents/index#hasher) | +| `context.initiatingProject?` | `string` | +| `context.nxArgs` | `NxArgs` | +| `context.nxJson` | [`NxJsonConfiguration`](../../devkit/documents/index#nxjsonconfiguration)<`string`[] \| `"*"`\> | +| `context.projectGraph` | [`ProjectGraph`](../../devkit/documents/index#projectgraph)<`any`\> | +| `context.target?` | `string` | +| `context.taskGraph?` | [`TaskGraph`](../../devkit/documents/index#taskgraph) | + +#### Returns + +`any` + +--- + +### detectPackageManager + +▸ **detectPackageManager**(`dir?`): [`PackageManager`](../../devkit/documents/index#packagemanager) + +Detects which package manager is used in the workspace based on the lock file. + +#### Parameters + +| Name | Type | Default value | +| :---- | :------- | :------------ | +| `dir` | `string` | `''` | + +#### Returns + +[`PackageManager`](../../devkit/documents/index#packagemanager) + +--- + +### detectWorkspaceScope + +▸ **detectWorkspaceScope**(`packageName`): `string` + +Detect workspace scope from the package.json name + +#### Parameters + +| Name | Type | +| :------------ | :------- | +| `packageName` | `string` | + +#### Returns + +`string` + +--- + +### ensurePackage + +▸ **ensurePackage**(`tree`, `pkg`, `requiredVersion`, `options?`): `Promise`<`void`\> + +Ensure that dependencies and devDependencies from package.json are installed at the required versions. + +For example: + +```typescript +ensurePackage(tree, {}, { '@nrwl/jest': nxVersion }); +``` + +This will check that @nrwl/jest@ exists in devDependencies. +If it exists then function returns, otherwise it will install the package before continuing. +When running with --dryRun, the function will throw when dependencies are missing. + +#### Parameters + +| Name | Type | Description | +| :------------------------ | :------------------------------------------ | :----------------------------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | the file system tree | +| `pkg` | `string` | the package to check (e.g. @nrwl/jest) | +| `requiredVersion` | `string` | the version or semver range to check (e.g. ~1.0.0, >=1.0.0 <2.0.0) | +| `options` | `Object` | | +| `options.dev?` | `boolean` | - | +| `options.throwOnMissing?` | `boolean` | - | + +#### Returns + +`Promise`<`void`\> + +--- + +### extractLayoutDirectory + +▸ **extractLayoutDirectory**(`directory`): `Object` + +Experimental + +#### Parameters + +| Name | Type | +| :---------- | :------- | +| `directory` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :----------------- | :------- | +| `layoutDirectory` | `string` | +| `projectDirectory` | `string` | + +--- + +### formatFiles + +▸ **formatFiles**(`tree`): `Promise`<`void`\> + +Formats all the created or updated files using Prettier + +#### Parameters + +| Name | Type | Description | +| :----- | :------------------------------------------ | :------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | the file system tree | + +#### Returns + +`Promise`<`void`\> + +--- + +### generateFiles + +▸ **generateFiles**(`tree`, `srcFolder`, `target`, `substitutions`): `void` + +Generates a folder of files based on provided templates. + +While doing so it performs two substitutions: + +- Substitutes segments of file names surrounded by \_\_ +- Uses ejs to substitute values in templates + +Examples: + +```typescript +generateFiles(tree, path.join(__dirname, 'files'), './tools/scripts', { + tmpl: '', + name: 'myscript', +}); +``` + +This command will take all the files from the `files` directory next to the place where the command is invoked from. +It will replace all `__tmpl__` with '' and all `__name__` with 'myscript' in the file names, and will replace all +`<%= name %>` with `myscript` in the files themselves. +`tmpl: ''` is a common pattern. With it you can name files like this: `index.ts__tmpl__`, so your editor +doesn't get confused about incorrect TypeScript files. + +#### Parameters + +| Name | Type | Description | +| :-------------- | :------------------------------------------ | :-------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | the file system tree | +| `srcFolder` | `string` | the source folder of files (absolute path) | +| `target` | `string` | the target folder (relative to the tree root) | +| `substitutions` | `Object` | an object of key-value pairs | + +#### Returns + +`void` + +--- + +### getDependentPackagesForProject + +▸ **getDependentPackagesForProject**(`projectGraph`, `name`): `Object` + +#### Parameters + +| Name | Type | +| :------------- | :------------------------------------------------------------------ | +| `projectGraph` | [`ProjectGraph`](../../devkit/documents/index#projectgraph)<`any`\> | +| `name` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :------------------- | :-------------------------------------------------------------------- | +| `npmPackages` | `string`[] | +| `workspaceLibraries` | [`WorkspaceLibrary`](../../devkit/documents/index#workspacelibrary)[] | + +--- + +### getImportPath + +▸ **getImportPath**(`npmScope`, `projectDirectory`): `string` + +Prefixes project name with npm scope + +#### Parameters + +| Name | Type | +| :----------------- | :------- | +| `npmScope` | `string` | +| `projectDirectory` | `string` | + +#### Returns + +`string` + +--- + +### getNpmPackageSharedConfig + +▸ **getNpmPackageSharedConfig**(`pkgName`, `version`): [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig) \| `undefined` + +Build the Module Federation Share Config for a specific package and the +specified version of that package. + +#### Parameters + +| Name | Type | Description | +| :-------- | :------- | :----------------------------------------------------------------------------- | +| `pkgName` | `string` | Name of the package to share | +| `version` | `string` | Version of the package to require by other apps in the Module Federation setup | + +#### Returns + +[`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig) \| `undefined` + +--- + +### getOutputsForTargetAndConfiguration + +▸ **getOutputsForTargetAndConfiguration**(`task`, `node`): `string`[] + +Returns the list of outputs that will be cached. + +#### Parameters + +| Name | Type | Description | +| :----- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------------- | +| `task` | `Pick`<[`Task`](../../devkit/documents/index#task), `"overrides"` \| `"target"`\> | target + overrides | +| `node` | [`ProjectGraphProjectNode`](../../devkit/documents/index#projectgraphprojectnode)<`any`\> | ProjectGraphProjectNode object that the task runs against | + +#### Returns + +`string`[] + +--- + +### getPackageManagerCommand + +▸ **getPackageManagerCommand**(`packageManager?`): `PackageManagerCommands` + +Returns commands for the package manager used in the workspace. +By default, the package manager is derived based on the lock file, +but it can also be passed in explicitly. + +Example: + +```javascript +execSync(`${getPackageManagerCommand().addDev} my-dev-package`); +``` + +#### Parameters + +| Name | Type | +| :--------------- | :-------------------------------------------------------------- | +| `packageManager` | [`PackageManager`](../../devkit/documents/index#packagemanager) | + +#### Returns + +`PackageManagerCommands` + +--- + +### getPackageManagerVersion + +▸ **getPackageManagerVersion**(`packageManager?`): `string` + +Returns the version of the package manager used in the workspace. +By default, the package manager is derived based on the lock file, +but it can also be passed in explicitly. + +#### Parameters + +| Name | Type | +| :--------------- | :-------------------------------------------------------------- | +| `packageManager` | [`PackageManager`](../../devkit/documents/index#packagemanager) | + +#### Returns + +`string` + +--- + +### getProjects + +▸ **getProjects**(`tree`): `Map`<`string`, [`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration)\> + +Get a map of all projects in a workspace. + +Use [readProjectConfiguration](../../devkit/documents/index#readprojectconfiguration) if only one project is needed. + +#### Parameters + +| Name | Type | +| :----- | :------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | + +#### Returns + +`Map`<`string`, [`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration)\> + +--- + +### getWorkspaceLayout + +▸ **getWorkspaceLayout**(`tree`): `Object` + +Returns workspace defaults. It includes defaults folders for apps and libs, +and the default scope. + +Example: + +```typescript +{ appsDir: 'apps', libsDir: 'libs', npmScope: 'myorg' } +``` + +#### Parameters + +| Name | Type | Description | +| :----- | :------------------------------------------ | :--------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | file system tree | + +#### Returns + +`Object` + +| Name | Type | +| :-------------------- | :-------- | +| `appsDir` | `string` | +| `libsDir` | `string` | +| `npmScope` | `string` | +| `standaloneAsDefault` | `boolean` | + +--- + +### getWorkspacePath + +▸ **getWorkspacePath**(`tree`): `"/angular.json"` \| `"/workspace.json"` \| `null` + +#### Parameters + +| Name | Type | +| :----- | :------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | + +#### Returns + +`"/angular.json"` \| `"/workspace.json"` \| `null` + +--- + +### installPackagesTask + +▸ **installPackagesTask**(`tree`, `alwaysRun?`, `cwd?`, `packageManager?`): `void` + +Runs `npm install` or `yarn install`. It will skip running the install if +`package.json` hasn't changed at all or it hasn't changed since the last invocation. + +#### Parameters + +| Name | Type | Default value | Description | +| :--------------- | :-------------------------------------------------------------- | :------------ | :------------------------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | `undefined` | the file system tree | +| `alwaysRun` | `boolean` | `false` | always run the command even if `package.json` hasn't changed. | +| `cwd` | `string` | `''` | - | +| `packageManager` | [`PackageManager`](../../devkit/documents/index#packagemanager) | `undefined` | - | + +#### Returns + +`void` + +--- + +### isStandaloneProject + +▸ **isStandaloneProject**(`tree`, `project`): `boolean` + +Returns if a project has a standalone configuration (project.json). + +#### Parameters + +| Name | Type | Description | +| :-------- | :------------------------------------------ | :------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | the file system tree | +| `project` | `string` | the project name | + +#### Returns + +`boolean` + +--- + +### joinPathFragments + +▸ **joinPathFragments**(...`fragments`): `string` + +Normalized path fragments and joins them + +#### Parameters + +| Name | Type | +| :------------- | :--------- | +| `...fragments` | `string`[] | + +#### Returns + +`string` + +--- + +### mapRemotes + +▸ **mapRemotes**(`remotes`, `remoteEntryExt`, `determineRemoteUrl`): `Record`<`string`, `string`\> + +Map remote names to a format that can be understood and used by Module +Federation. + +#### Parameters + +| Name | Type | Description | +| :------------------- | :------------------------------------------------ | :------------------------------------------------------- | +| `remotes` | [`Remotes`](../../devkit/documents/index#remotes) | The remotes to map | +| `remoteEntryExt` | `"js"` \| `"mjs"` | The file extension of the remoteEntry file | +| `determineRemoteUrl` | (`remote`: `string`) => `string` | The function used to lookup the URL of the served remote | + +#### Returns + +`Record`<`string`, `string`\> + +--- + +### mapRemotesForSSR + +▸ **mapRemotesForSSR**(`remotes`, `remoteEntryExt`, `determineRemoteUrl`): `Record`<`string`, `string`\> + +Map remote names to a format that can be understood and used by Module +Federation. + +#### Parameters + +| Name | Type | Description | +| :------------------- | :------------------------------------------------ | :------------------------------------------------------- | +| `remotes` | [`Remotes`](../../devkit/documents/index#remotes) | The remotes to map | +| `remoteEntryExt` | `"js"` \| `"mjs"` | The file extension of the remoteEntry file | +| `determineRemoteUrl` | (`remote`: `string`) => `string` | The function used to lookup the URL of the served remote | + +#### Returns + +`Record`<`string`, `string`\> + +--- + +### moveFilesToNewDirectory + +▸ **moveFilesToNewDirectory**(`tree`, `oldDir`, `newDir`): `void` + +Analogous to cp -r oldDir newDir + +#### Parameters + +| Name | Type | +| :------- | :------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | +| `oldDir` | `string` | +| `newDir` | `string` | + +#### Returns + +`void` + +--- + +### names + +▸ **names**(`name`): `Object` + +Util function to generate different strings based off the provided name. + +Examples: + +```typescript +names('my-name'); // {name: 'my-name', className: 'MyName', propertyName: 'myName', constantName: 'MY_NAME', fileName: 'my-name'} +names('myName'); // {name: 'myName', className: 'MyName', propertyName: 'myName', constantName: 'MY_NAME', fileName: 'my-name'} +``` + +#### Parameters + +| Name | Type | +| :----- | :------- | +| `name` | `string` | + +#### Returns + +`Object` + +| Name | Type | +| :------------- | :------- | +| `className` | `string` | +| `constantName` | `string` | +| `fileName` | `string` | +| `name` | `string` | +| `propertyName` | `string` | + +--- + +### normalizePath + +▸ **normalizePath**(`osSpecificPath`): `string` + +Coverts an os specific path to a unix style path + +#### Parameters + +| Name | Type | +| :--------------- | :------- | +| `osSpecificPath` | `string` | + +#### Returns + +`string` + +--- + +### offsetFromRoot + +▸ **offsetFromRoot**(`fullPathToDir`): `string` + +Calculates an offset from the root of the workspace, which is useful for +constructing relative URLs. + +Examples: + +```typescript +offsetFromRoot('apps/mydir/myapp/'); // returns "../../../" +``` + +#### Parameters + +| Name | Type | Description | +| :-------------- | :------- | :------------- | +| `fullPathToDir` | `string` | directory path | + +#### Returns + +`string` + +--- + +### parseJson + +▸ **parseJson**<`T`\>(`input`, `options?`): `T` + +Parses the given JSON string and returns the object the JSON content represents. +By default javascript-style comments are allowed. + +#### Type parameters + +| Name | Type | +| :--- | :----------------------- | +| `T` | extends `object` = `any` | + +#### Parameters + +| Name | Type | Description | +| :--------- | :------------------------------------------------------------------ | :--------------------- | +| `input` | `string` | JSON content as string | +| `options?` | [`JsonParseOptions`](../../devkit/documents/index#jsonparseoptions) | JSON parse options | + +#### Returns + +`T` + +Object the JSON content represents + +--- + +### parseTargetString + +▸ **parseTargetString**(`targetString`): [`Target`](../../devkit/documents/index#target) + +**`deprecated(v17)`** A project graph should be passed to parseTargetString for best accuracy. + +#### Parameters + +| Name | Type | +| :------------- | :------- | +| `targetString` | `string` | + +#### Returns + +[`Target`](../../devkit/documents/index#target) + +▸ **parseTargetString**(`targetString`, `projectGraph`): [`Target`](../../devkit/documents/index#target) + +Parses a target string into {project, target, configuration} + +Examples: + +```typescript +parseTargetString('proj:test', graph); // returns { project: "proj", target: "test" } +parseTargetString('proj:test:production', graph); // returns { project: "proj", target: "test", configuration: "production" } +``` + +#### Parameters + +| Name | Type | Description | +| :------------- | :------------------------------------------------------------------ | :--------------- | +| `targetString` | `string` | target reference | +| `projectGraph` | [`ProjectGraph`](../../devkit/documents/index#projectgraph)<`any`\> | - | + +#### Returns + +[`Target`](../../devkit/documents/index#target) + +--- + +### readAllWorkspaceConfiguration + +▸ **readAllWorkspaceConfiguration**(): [`ProjectsConfigurations`](../../devkit/documents/index#projectsconfigurations) & [`NxJsonConfiguration`](../../devkit/documents/index#nxjsonconfiguration) + +**`deprecated`** Use readProjectsConfigurationFromProjectGraph(await createProjectGraphAsync()) + +#### Returns + +[`ProjectsConfigurations`](../../devkit/documents/index#projectsconfigurations) & [`NxJsonConfiguration`](../../devkit/documents/index#nxjsonconfiguration) + +--- + +### readCachedProjectGraph + +▸ **readCachedProjectGraph**(): [`ProjectGraph`](../../devkit/documents/index#projectgraph)<[`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration)\> + +Synchronously reads the latest cached copy of the workspace's ProjectGraph. + +**`throws`** {Error} if there is no cached ProjectGraph to read from + +#### Returns + +[`ProjectGraph`](../../devkit/documents/index#projectgraph)<[`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration)\> + +--- + +### readJson + +▸ **readJson**<`T`\>(`tree`, `path`, `options?`): `T` + +Reads a json file, removes all comments and parses JSON. + +#### Type parameters + +| Name | Type | +| :--- | :----------------------- | +| `T` | extends `object` = `any` | + +#### Parameters + +| Name | Type | Description | +| :--------- | :------------------------------------------------------------------ | :-------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | file system tree | +| `path` | `string` | file path | +| `options?` | [`JsonParseOptions`](../../devkit/documents/index#jsonparseoptions) | Optional JSON Parse Options | + +#### Returns + +`T` + +--- + +### readJsonFile + +▸ **readJsonFile**<`T`\>(`path`, `options?`): `T` + +Reads a JSON file and returns the object the JSON content represents. + +#### Type parameters + +| Name | Type | +| :--- | :----------------------- | +| `T` | extends `object` = `any` | + +#### Parameters + +| Name | Type | Description | +| :--------- | :---------------- | :----------------- | +| `path` | `string` | A path to a file. | +| `options?` | `JsonReadOptions` | JSON parse options | + +#### Returns + +`T` + +Object the JSON content of the file represents + +--- + +### readNxJson + +▸ **readNxJson**(): [`NxJsonConfiguration`](../../devkit/documents/index#nxjsonconfiguration) + +#### Returns + +[`NxJsonConfiguration`](../../devkit/documents/index#nxjsonconfiguration) + +--- + +### readProjectConfiguration + +▸ **readProjectConfiguration**(`tree`, `projectName`): [`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration) + +Reads a project configuration. + +The project configuration is stored in workspace.json or the associated project.json file. +The utility will read from either file. + +**`throws`** If supplied projectName cannot be found + +#### Parameters + +| Name | Type | Description | +| :------------ | :------------------------------------------ | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | + +#### Returns + +[`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration) + +--- + +### readRootPackageJson + +▸ **readRootPackageJson**(): `Object` + +#### Returns + +`Object` + +| Name | Type | +| :----------------- | :------- | +| `dependencies?` | `Object` | +| `devDependencies?` | `Object` | + +--- + +### readTargetOptions + +▸ **readTargetOptions**<`T`\>(`__namedParameters`, `context`): `T` + +Reads and combines options for a given target. + +Works as if you invoked the target yourself without passing any command lint overrides. + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +#### Parameters + +| Name | Type | +| :------------------ | :---------------------------------------------------------------- | +| `__namedParameters` | [`Target`](../../devkit/documents/index#target) | +| `context` | [`ExecutorContext`](../../devkit/documents/index#executorcontext) | + +#### Returns + +`T` + +--- + +### readWorkspaceConfiguration + +▸ **readWorkspaceConfiguration**(`tree`): [`WorkspaceConfiguration`](../../devkit/documents/index#workspaceconfiguration) + +Read general workspace configuration such as the default project or cli settings + +This does _not_ provide projects configuration, use [readProjectConfiguration](../../devkit/documents/index#readprojectconfiguration) instead. + +#### Parameters + +| Name | Type | +| :----- | :------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | + +#### Returns + +[`WorkspaceConfiguration`](../../devkit/documents/index#workspaceconfiguration) + +--- + +### removeDependenciesFromPackageJson + +▸ **removeDependenciesFromPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../devkit/documents/index#generatorcallback) + +Remove Dependencies and Dev Dependencies from package.json + +For example: + +```typescript +removeDependenciesFromPackageJson(tree, ['react'], ['jest']); +``` + +This will **remove** `react` and `jest` from the dependencies and devDependencies sections of package.json respectively. + +#### Parameters + +| Name | Type | Default value | Description | +| :---------------- | :------------------------------------------ | :--------------- | :-------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | `undefined` | - | +| `dependencies` | `string`[] | `undefined` | Dependencies to be removed from the dependencies section of package.json | +| `devDependencies` | `string`[] | `undefined` | Dependencies to be removed from the devDependencies section of package.json | +| `packageJsonPath` | `string` | `'package.json'` | - | + +#### Returns + +[`GeneratorCallback`](../../devkit/documents/index#generatorcallback) + +Callback to uninstall dependencies only if necessary. undefined is returned if changes are not necessary. + +--- + +### removeProjectConfiguration + +▸ **removeProjectConfiguration**(`tree`, `projectName`): `void` + +Removes the configuration of an existing project. + +The project configuration is stored in workspace.json or the associated project.json file. +The utility will update either file. + +#### Parameters + +| Name | Type | +| :------------ | :------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | +| `projectName` | `string` | + +#### Returns + +`void` + +--- + +### reverse + +▸ **reverse**(`graph`): [`ProjectGraph`](../../devkit/documents/index#projectgraph) + +Returns a new project graph where all the edges are reversed. + +For instance, if project A depends on B, in the reversed graph +B will depend on A. + +#### Parameters + +| Name | Type | +| :------ | :------------------------------------------------------------------ | +| `graph` | [`ProjectGraph`](../../devkit/documents/index#projectgraph)<`any`\> | + +#### Returns + +[`ProjectGraph`](../../devkit/documents/index#projectgraph) + +--- + +### runExecutor + +▸ **runExecutor**<`T`\>(`targetDescription`, `overrides`, `context`): `Promise`<`AsyncIterableIterator`<`T`\>\> + +Loads and invokes executor. + +This is analogous to invoking executor from the terminal, with the exception +that the params aren't parsed from the string, but instead provided parsed already. + +Apart from that, it works the same way: + +- it will load the workspace configuration +- it will resolve the target +- it will load the executor and the schema +- it will load the options for the appropriate configuration +- it will run the validations and will set the default +- and, of course, it will invoke the executor + +Example: + +```typescript +for await (const s of await runExecutor( + { project: 'myproj', target: 'serve' }, + { watch: true }, + context +)) { + // s.success +} +``` + +Note that the return value is a promise of an iterator, so you need to await before iterating over it. + +#### Type parameters + +| Name | Type | +| :--- | :--------------- | +| `T` | extends `Object` | + +#### Parameters + +| Name | Type | +| :--------------------------------- | :---------------------------------------------------------------- | +| `targetDescription` | `Object` | +| `targetDescription.configuration?` | `string` | +| `targetDescription.project` | `string` | +| `targetDescription.target` | `string` | +| `overrides` | `Object` | +| `context` | [`ExecutorContext`](../../devkit/documents/index#executorcontext) | + +#### Returns + +`Promise`<`AsyncIterableIterator`<`T`\>\> + +--- + +### serializeJson + +▸ **serializeJson**<`T`\>(`input`, `options?`): `string` + +Serializes the given data to a JSON string. +By default the JSON string is formatted with a 2 space intendation to be easy readable. + +#### Type parameters + +| Name | Type | +| :--- | :-------------------------- | +| `T` | extends `object` = `object` | + +#### Parameters + +| Name | Type | Description | +| :--------- | :-------------------------------------------------------------------------- | :---------------------------------------- | +| `input` | `T` | Object which should be serialized to JSON | +| `options?` | [`JsonSerializeOptions`](../../devkit/documents/index#jsonserializeoptions) | JSON serialize options | + +#### Returns + +`string` + +the formatted JSON representation of the object + +--- + +### sharePackages + +▸ **sharePackages**(`packages`): `Record`<`string`, [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig)\> + +Create a dictionary of packages and their Module Federation Shared Config +from an array of package names. + +Lookup the versions of the packages from the root package.json file in the +workspace. + +#### Parameters + +| Name | Type | Description | +| :--------- | :--------- | :-------------------------------- | +| `packages` | `string`[] | Array of package names as strings | + +#### Returns + +`Record`<`string`, [`SharedLibraryConfig`](../../devkit/documents/index#sharedlibraryconfig)\> + +--- + +### shareWorkspaceLibraries + +▸ **shareWorkspaceLibraries**(`libraries`, `tsConfigPath?`): [`SharedWorkspaceLibraryConfig`](../../devkit/documents/index#sharedworkspacelibraryconfig) + +Build an object of functions to be used with the ModuleFederationPlugin to +share Nx Workspace Libraries between Hosts and Remotes. + +#### Parameters + +| Name | Type | Description | +| :------------- | :-------------------------------------------------------------------- | :--------------------------------------------------------------------------- | +| `libraries` | [`WorkspaceLibrary`](../../devkit/documents/index#workspacelibrary)[] | The Nx Workspace Libraries to share | +| `tsConfigPath` | `string` | The path to TS Config File that contains the Path Mappings for the Libraries | + +#### Returns + +[`SharedWorkspaceLibraryConfig`](../../devkit/documents/index#sharedworkspacelibraryconfig) + +--- + +### stripIndents + +▸ **stripIndents**(`strings`, ...`values`): `string` + +Removes indents, which is useful for printing warning and messages. + +Example: + +```typescript +stripIndents` + Options: + - option1 + - option2 +`; +``` + +#### Parameters + +| Name | Type | +| :---------- | :--------------------- | +| `strings` | `TemplateStringsArray` | +| `...values` | `any`[] | + +#### Returns + +`string` + +--- + +### stripJsonComments + +▸ `Const` **stripJsonComments**(`text`, `replaceCh?`): `string` + +Takes JSON with JavaScript-style comments and remove +them. Optionally replaces every none-newline character +of comments with a replaceCharacter + +#### Parameters + +| Name | Type | +| :----------- | :------- | +| `text` | `string` | +| `replaceCh?` | `string` | + +#### Returns + +`string` + +--- + +### targetToTargetString + +▸ **targetToTargetString**(`target`): `string` + +Returns a string in the format "project:target[:configuration]" for the target + +#### Parameters + +| Name | Type | Description | +| :------- | :---------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `target` | [`Target`](../../devkit/documents/index#target) | target object Examples: `typescript targetToTargetString({ project: "proj", target: "test" }) // returns "proj:test" targetToTargetString({ project: "proj", target: "test", configuration: "production" }) // returns "proj:test:production" ` | + +#### Returns + +`string` + +--- + +### toJS + +▸ **toJS**(`tree`): `void` + +Rename and transpile any new typescript files created to javascript files + +#### Parameters + +| Name | Type | +| :----- | :------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | + +#### Returns + +`void` + +--- + +### updateJson + +▸ **updateJson**<`T`, `U`\>(`tree`, `path`, `updater`, `options?`): `void` + +Updates a JSON value to the file system tree + +#### Type parameters + +| Name | Type | +| :--- | :----------------------- | +| `T` | extends `object` = `any` | +| `U` | extends `object` = `T` | + +#### Parameters + +| Name | Type | Description | +| :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | File system tree | +| `path` | `string` | Path of JSON file in the Tree | +| `updater` | (`value`: `T`) => `U` | Function that maps the current value of a JSON document to a new value to be written to the document | +| `options?` | [`JsonParseOptions`](../../devkit/documents/index#jsonparseoptions) & [`JsonSerializeOptions`](../../devkit/documents/index#jsonserializeoptions) | Optional JSON Parse and Serialize Options | + +#### Returns + +`void` + +--- + +### updateProjectConfiguration + +▸ **updateProjectConfiguration**(`tree`, `projectName`, `projectConfiguration`): `void` + +Updates the configuration of an existing project. + +The project configuration is stored in workspace.json or the associated project.json file. +The utility will update either files. + +#### Parameters + +| Name | Type | Description | +| :--------------------- | :-------------------------------------------------------------------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| `projectConfiguration` | [`ProjectConfiguration`](../../devkit/documents/index#projectconfiguration) | project configuration | + +#### Returns + +`void` + +--- + +### updateTsConfigsToJs + +▸ **updateTsConfigsToJs**(`tree`, `options`): `void` + +#### Parameters + +| Name | Type | +| :-------------------- | :------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | +| `options` | `Object` | +| `options.projectRoot` | `string` | + +#### Returns + +`void` + +--- + +### updateWorkspaceConfiguration + +▸ **updateWorkspaceConfiguration**(`tree`, `workspaceConfig`): `void` + +Update general workspace configuration such as the default project or cli settings. + +This does _not_ update projects configuration, use [updateProjectConfiguration](../../devkit/documents/index#updateprojectconfiguration) or [addProjectConfiguration](../../devkit/documents/index#addprojectconfiguration) instead. + +#### Parameters + +| Name | Type | +| :---------------- | :------------------------------------------------------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | +| `workspaceConfig` | [`WorkspaceConfiguration`](../../devkit/documents/index#workspaceconfiguration) | + +#### Returns + +`void` + +--- + +### visitNotIgnoredFiles + +▸ **visitNotIgnoredFiles**(`tree`, `dirPath?`, `visitor`): `void` + +Utility to act on all files in a tree that are not ignored by git. + +#### Parameters + +| Name | Type | Default value | +| :-------- | :------------------------------------------ | :------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | `undefined` | +| `dirPath` | `string` | `tree.root` | +| `visitor` | (`path`: `string`) => `void` | `undefined` | + +#### Returns + +`void` + +--- + +### workspaceLayout + +▸ **workspaceLayout**(): `Object` + +Returns information about where apps and libs will be created. + +#### Returns + +`Object` + +| Name | Type | +| :-------- | :------- | +| `appsDir` | `string` | +| `libsDir` | `string` | + +--- + +### writeJson + +▸ **writeJson**<`T`\>(`tree`, `path`, `value`, `options?`): `void` + +Writes a JSON value to the file system tree + +#### Type parameters + +| Name | Type | +| :--- | :-------------------------- | +| `T` | extends `object` = `object` | + +#### Parameters + +| Name | Type | Description | +| :--------- | :-------------------------------------------------------------------------- | :------------------------------ | +| `tree` | [`Tree`](../../devkit/documents/index#tree) | File system tree | +| `path` | `string` | Path of JSON file in the Tree | +| `value` | `T` | Serializable value to write | +| `options?` | [`JsonSerializeOptions`](../../devkit/documents/index#jsonserializeoptions) | Optional JSON Serialize Options | + +#### Returns + +`void` + +--- + +### writeJsonFile + +▸ **writeJsonFile**<`T`\>(`path`, `data`, `options?`): `void` + +Serializes the given data to JSON and writes it to a file. + +#### Type parameters + +| Name | Type | +| :--- | :-------------------------- | +| `T` | extends `object` = `object` | + +#### Parameters + +| Name | Type | Description | +| :--------- | :----------------- | :-------------------------------------------------------------- | +| `path` | `string` | A path to a file. | +| `data` | `T` | data which should be serialized to JSON and written to the file | +| `options?` | `JsonWriteOptions` | JSON serialize options | + +#### Returns + +`void` diff --git a/docs/generated/devkit/ngcli_adapter.md b/docs/generated/devkit/ngcli_adapter.md new file mode 100644 index 00000000000000..ebafd6191ac615 --- /dev/null +++ b/docs/generated/devkit/ngcli_adapter.md @@ -0,0 +1,118 @@ +# Module: ngcli-adapter + +## Table of contents + +### Ng CLI Adapter Classes + +- [NxScopedHost](../../devkit/documents/ngcli_adapter#nxscopedhost) + +### Functions + +- [mockSchematicsForTesting](../../devkit/documents/ngcli_adapter#mockschematicsfortesting) +- [overrideCollectionResolutionForTesting](../../devkit/documents/ngcli_adapter#overridecollectionresolutionfortesting) +- [wrapAngularDevkitSchematic](../../devkit/documents/ngcli_adapter#wrapangulardevkitschematic) + +## Ng CLI Adapter Classes + +### NxScopedHost + +• **NxScopedHost**: `Object` + +## Functions + +### mockSchematicsForTesting + +▸ **mockSchematicsForTesting**(`schematics`): `void` + +If you have an Nx Devkit generator invoking the wrapped Angular Devkit schematic, +and you don't want the Angular Devkit schematic to run, you can mock it up using this function. + +Unfortunately, there are some edge cases in the Nx-Angular devkit integration that +can be seen in the unit tests context. This function is useful for handling that as well. + +In this case, you can mock it up. + +Example: + +```typescript +mockSchematicsForTesting({ + 'mycollection:myschematic': (tree, params) => { + tree.write('README.md'); + }, +}); +``` + +#### Parameters + +| Name | Type | +| :----------- | :------- | +| `schematics` | `Object` | + +#### Returns + +`void` + +--- + +### overrideCollectionResolutionForTesting + +▸ **overrideCollectionResolutionForTesting**(`collections`): `void` + +By default, Angular Devkit schematic collections will be resolved using the Node resolution. +This doesn't work if you are testing schematics that refer to other schematics in the +same repo. + +This function can can be used to override the resolution behaviour. + +Example: + +```typescript +overrideCollectionResolutionForTesting({ + '@nrwl/workspace': path.join( + __dirname, + '../../../../workspace/generators.json' + ), + '@nrwl/angular': path.join(__dirname, '../../../../angular/generators.json'), + '@nrwl/linter': path.join(__dirname, '../../../../linter/generators.json'), +}); +``` + +#### Parameters + +| Name | Type | +| :------------ | :------- | +| `collections` | `Object` | + +#### Returns + +`void` + +--- + +### wrapAngularDevkitSchematic + +▸ **wrapAngularDevkitSchematic**(`collectionName`, `generatorName`): (`host`: [`Tree`](../../devkit/documents/index#tree), `generatorOptions`: { [k: string]: `any`; }) => `Promise`<`any`\> + +#### Parameters + +| Name | Type | +| :--------------- | :------- | +| `collectionName` | `string` | +| `generatorName` | `string` | + +#### Returns + +`fn` + +▸ (`host`, `generatorOptions`): `Promise`<`any`\> + +##### Parameters + +| Name | Type | +| :----------------- | :------------------------------------------ | +| `host` | [`Tree`](../../devkit/documents/index#tree) | +| `generatorOptions` | `Object` | + +##### Returns + +`Promise`<`any`\> diff --git a/package.json b/package.json index a04111ea25d746..8f9f0a978157ee 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ "@ngrx/router-store": "~15.0.0", "@ngrx/store": "~15.0.0", "@nguniversal/builders": "~15.0.0", - "@npmcli/arborist": "^6.1.5", "@nrwl/cypress": "15.4.0", "@nrwl/devkit": "15.4.0", "@nrwl/eslint-plugin-nx": "15.4.0", @@ -70,6 +69,7 @@ "@parcel/watcher": "2.0.4", "@phenomnomnominal/tsquery": "4.1.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", + "@pnpm/lockfile-types": "^4.3.6", "@reduxjs/toolkit": "1.9.0", "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-commonjs": "^20.0.0", @@ -327,4 +327,3 @@ ] } } - diff --git a/packages/nx/package.json b/packages/nx/package.json index d3db0bfa095cff..3d7b2de549af39 100644 --- a/packages/nx/package.json +++ b/packages/nx/package.json @@ -33,6 +33,7 @@ "homepage": "https://nx.dev", "dependencies": { "@parcel/watcher": "2.0.4", + "@pnpm/lockfile-types": "^4.3.6", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "^3.0.0-rc.18", "@zkochan/js-yaml": "0.0.6", diff --git a/packages/nx/src/lock-file/__fixtures__/auxiliary-packages/.modules.yaml.ts b/packages/nx/src/lock-file/__fixtures__/auxiliary-packages/.modules.yaml.ts new file mode 100644 index 00000000000000..3588d1458680de --- /dev/null +++ b/packages/nx/src/lock-file/__fixtures__/auxiliary-packages/.modules.yaml.ts @@ -0,0 +1,416 @@ +// This file is autogenerated in the node_modules when using Pnpm + +export default `hoistPattern: + - '*' +hoistedDependencies: + /@eslint/eslintrc/1.3.3: + '@eslint/eslintrc': public + /@humanwhocodes/config-array/0.11.7: + '@humanwhocodes/config-array': private + /@humanwhocodes/module-importer/1.0.1: + '@humanwhocodes/module-importer': private + /@humanwhocodes/object-schema/1.2.1: + '@humanwhocodes/object-schema': private + /@nodelib/fs.scandir/2.1.5: + '@nodelib/fs.scandir': private + /@nodelib/fs.stat/2.0.5: + '@nodelib/fs.stat': private + /@nodelib/fs.walk/1.2.8: + '@nodelib/fs.walk': private + /@nrwl/cli/15.3.0: + '@nrwl/cli': private + /@nrwl/tao/15.3.0: + '@nrwl/tao': private + /@parcel/watcher/2.0.4: + '@parcel/watcher': private + /@phenomnomnominal/tsquery/4.1.1_typescript@4.8.4: + '@phenomnomnominal/tsquery': private + /@types/json5/0.0.29: + '@types/json5': private + /@yarnpkg/lockfile/1.1.0: + '@yarnpkg/lockfile': private + /@yarnpkg/parsers/3.0.0-rc.32: + '@yarnpkg/parsers': private + /@zkochan/js-yaml/0.0.6: + '@zkochan/js-yaml': private + /acorn-jsx/5.3.2_acorn@8.8.1: + acorn-jsx: private + /acorn/8.8.1: + acorn: private + /ajv/6.12.6: + ajv: private + /ansi-colors/4.1.3: + ansi-colors: private + /ansi-regex/5.0.1: + ansi-regex: private + /ansi-styles/4.3.0: + ansi-styles: private + /anymatch/3.1.3: + anymatch: private + /app-root-path/3.1.0: + app-root-path: private + /argparse/2.0.1: + argparse: private + /async/3.2.4: + async: private + /asynckit/0.4.0: + asynckit: private + /axios/1.2.1: + axios: private + /balanced-match/1.0.2: + balanced-match: private + /base64-js/1.5.1: + base64-js: private + /binary-extensions/2.2.0: + binary-extensions: private + /bl/4.1.0: + bl: private + /brace-expansion/1.1.11: + brace-expansion: private + /braces/3.0.2: + braces: private + /buffer/5.7.1: + buffer: private + /callsites/3.1.0: + callsites: private + /chalk/4.1.2: + chalk: private + /chokidar/3.5.3: + chokidar: private + /cli-cursor/3.1.0: + cli-cursor: private + /cli-spinners/2.6.1: + cli-spinners: private + /cliui/8.0.1: + cliui: private + /color-convert/2.0.1: + color-convert: private + /color-name/1.1.4: + color-name: private + /combined-stream/1.0.8: + combined-stream: private + /concat-map/0.0.1: + concat-map: private + /cross-spawn/7.0.3: + cross-spawn: private + /debug/4.3.4: + debug: private + /deep-is/0.1.4: + deep-is: private + /define-lazy-prop/2.0.0: + define-lazy-prop: private + /delayed-stream/1.0.0: + delayed-stream: private + /doctrine/3.0.0: + doctrine: private + /dotenv/10.0.0: + dotenv: private + /duplexer/0.1.2: + duplexer: private + /ejs/3.1.8: + ejs: private + /emoji-regex/8.0.0: + emoji-regex: private + /end-of-stream/1.4.4: + end-of-stream: private + /enquirer/2.3.6: + enquirer: private + /escalade/3.1.1: + escalade: private + /escape-string-regexp/4.0.0: + escape-string-regexp: private + /eslint-rule-composer/0.3.0: + eslint-rule-composer: public + /eslint-scope/7.1.1: + eslint-scope: public + /eslint-utils/3.0.0_eslint@8.29.0: + eslint-utils: public + /eslint-visitor-keys/3.3.0: + eslint-visitor-keys: public + /eslint/8.29.0: + eslint: public + /espree/9.4.1: + espree: private + /esprima/4.0.1: + esprima: private + /esquery/1.4.0: + esquery: private + /esrecurse/4.3.0: + esrecurse: private + /estraverse/5.3.0: + estraverse: private + /esutils/2.0.3: + esutils: private + /fast-deep-equal/3.1.3: + fast-deep-equal: private + /fast-glob/3.2.7: + fast-glob: private + /fast-json-stable-stringify/2.1.0: + fast-json-stable-stringify: private + /fast-levenshtein/2.0.6: + fast-levenshtein: private + /fastq/1.14.0: + fastq: private + /figures/3.2.0: + figures: private + /file-entry-cache/6.0.1: + file-entry-cache: private + /filelist/1.0.4: + filelist: private + /fill-range/7.0.1: + fill-range: private + /find-up/5.0.0: + find-up: private + /flat-cache/3.0.4: + flat-cache: private + /flat/5.0.2: + flat: private + /flatted/3.2.7: + flatted: private + /follow-redirects/1.15.2: + follow-redirects: private + /form-data/4.0.0: + form-data: private + /fs-constants/1.0.0: + fs-constants: private + /fs-extra/10.1.0: + fs-extra: private + /fs.realpath/1.0.0: + fs.realpath: private + /fsevents/2.3.2: + fsevents: private + /get-caller-file/2.0.5: + get-caller-file: private + /glob-parent/6.0.2: + glob-parent: private + /glob/7.1.4: + glob: private + /globals/13.18.0: + globals: private + /graceful-fs/4.2.10: + graceful-fs: private + /grapheme-splitter/1.0.4: + grapheme-splitter: private + /has-flag/4.0.0: + has-flag: private + /ieee754/1.2.1: + ieee754: private + /ignore/5.2.1: + ignore: private + /import-fresh/3.3.0: + import-fresh: private + /imurmurhash/0.1.4: + imurmurhash: private + /inflight/1.0.6: + inflight: private + /inherits/2.0.4: + inherits: private + /is-binary-path/2.1.0: + is-binary-path: private + /is-docker/2.2.1: + is-docker: private + /is-extglob/2.1.1: + is-extglob: private + /is-fullwidth-code-point/3.0.0: + is-fullwidth-code-point: private + /is-glob/4.0.3: + is-glob: private + /is-number/7.0.0: + is-number: private + /is-path-inside/3.0.3: + is-path-inside: private + /is-wsl/2.2.0: + is-wsl: private + /isexe/2.0.0: + isexe: private + /jake/10.8.5: + jake: private + /js-sdsl/4.2.0: + js-sdsl: private + /js-tokens/4.0.0: + js-tokens: private + /js-yaml/4.1.0: + js-yaml: private + /json-schema-traverse/0.4.1: + json-schema-traverse: private + /json-stable-stringify-without-jsonify/1.0.1: + json-stable-stringify-without-jsonify: private + /json5/1.0.1: + json5: private + /jsonc-parser/3.2.0: + jsonc-parser: private + /jsonfile/6.1.0: + jsonfile: private + /levn/0.4.1: + levn: private + /locate-path/6.0.0: + locate-path: private + /lodash.merge/4.6.2: + lodash.merge: private + /loose-envify/1.4.0: + loose-envify: private + /lru-cache/6.0.0: + lru-cache: private + /merge2/1.4.1: + merge2: private + /micromatch/4.0.5: + micromatch: private + /mime-db/1.52.0: + mime-db: private + /mime-types/2.1.35: + mime-types: private + /mimic-fn/2.1.0: + mimic-fn: private + /minimatch/3.1.2: + minimatch: private + /minimist/1.2.7: + minimist: private + /ms/2.1.2: + ms: private + /natural-compare/1.4.0: + natural-compare: private + /node-addon-api/3.2.1: + node-addon-api: private + /node-gyp-build/4.5.0: + node-gyp-build: private + /normalize-path/3.0.0: + normalize-path: private + /npm-run-path/4.0.1: + npm-run-path: private + /nx/15.3.0: + nx: private + /once/1.4.0: + once: private + /onetime/5.1.2: + onetime: private + /open/8.4.0: + open: private + /optionator/0.9.1: + optionator: private + /p-limit/3.1.0: + p-limit: private + /p-locate/5.0.0: + p-locate: private + /parent-module/1.0.1: + parent-module: private + /path-exists/4.0.0: + path-exists: private + /path-is-absolute/1.0.1: + path-is-absolute: private + /path-key/3.1.1: + path-key: private + /picomatch/2.3.1: + picomatch: private + /prelude-ls/1.2.1: + prelude-ls: private + /proxy-from-env/1.1.0: + proxy-from-env: private + /punycode/2.1.1: + punycode: private + /queue-microtask/1.2.3: + queue-microtask: private + /readable-stream/3.6.0: + readable-stream: private + /readdirp/3.6.0: + readdirp: private + /regexpp/3.2.0: + regexpp: private + /require-directory/2.1.1: + require-directory: private + /resolve-from/4.0.0: + resolve-from: private + /restore-cursor/3.1.0: + restore-cursor: private + /reusify/1.0.4: + reusify: private + /rimraf/3.0.2: + rimraf: private + /run-parallel/1.2.0: + run-parallel: private + /safe-buffer/5.2.1: + safe-buffer: private + /semver/7.3.4: + semver: private + /shebang-command/2.0.0: + shebang-command: private + /shebang-regex/3.0.0: + shebang-regex: private + /signal-exit/3.0.7: + signal-exit: private + /sprintf-js/1.0.3: + sprintf-js: private + /string-width/4.2.3: + string-width: private + /string_decoder/1.3.0: + string_decoder: private + /strip-ansi/6.0.1: + strip-ansi: private + /strip-bom/3.0.0: + strip-bom: private + /strip-json-comments/3.1.1: + strip-json-comments: private + /strong-log-transformer/2.1.0: + strong-log-transformer: private + /supports-color/7.2.0: + supports-color: private + /tar-stream/2.2.0: + tar-stream: private + /text-table/0.2.0: + text-table: private + /through/2.3.8: + through: private + /tmp/0.2.1: + tmp: private + /to-regex-range/5.0.1: + to-regex-range: private + /tsconfig-paths/3.14.1: + tsconfig-paths: private + /tslib/2.4.1: + tslib: private + /type-check/0.4.0: + type-check: private + /type-fest/0.20.2: + type-fest: private + /universalify/2.0.0: + universalify: private + /uri-js/4.4.1: + uri-js: private + /util-deprecate/1.0.2: + util-deprecate: private + /v8-compile-cache/2.3.0: + v8-compile-cache: private + /which/2.0.2: + which: private + /word-wrap/1.2.3: + word-wrap: private + /wrap-ansi/7.0.0: + wrap-ansi: private + /wrappy/1.0.2: + wrappy: private + /y18n/5.0.8: + y18n: private + /yallist/4.0.0: + yallist: private + /yargs-parser/21.1.1: + yargs-parser: private + /yocto-queue/0.1.0: + yocto-queue: private +included: + dependencies: true + devDependencies: true + optionalDependencies: true +injectedDeps: {} +layoutVersion: 5 +nodeLinker: isolated +packageManager: pnpm@7.16.0 +pendingBuilds: [] +prunedAt: Thu, 29 Dec 2022 15:57:57 GMT +publicHoistPattern: + - '*eslint*' + - '*prettier*' +registries: + default: https://registry.npmjs.org/ +skipped: [] +storeDir: /Users/jdoe/Library/pnpm/store/v3 +virtualStoreDir: .pnpm +`; diff --git a/packages/nx/src/lock-file/__fixtures__/auxiliary-packages/pnpm-lock.yaml b/packages/nx/src/lock-file/__fixtures__/auxiliary-packages/pnpm-lock.yaml.ts similarity index 99% rename from packages/nx/src/lock-file/__fixtures__/auxiliary-packages/pnpm-lock.yaml rename to packages/nx/src/lock-file/__fixtures__/auxiliary-packages/pnpm-lock.yaml.ts index ed2d1b58394eb7..93ffc40ba5b9ae 100644 --- a/packages/nx/src/lock-file/__fixtures__/auxiliary-packages/pnpm-lock.yaml +++ b/packages/nx/src/lock-file/__fixtures__/auxiliary-packages/pnpm-lock.yaml.ts @@ -1,4 +1,4 @@ -lockfileVersion: 5.4 +export default `lockfileVersion: 5.4 specifiers: '@nrwl/devkit': 15.0.13 @@ -1476,3 +1476,4 @@ packages: requiresBuild: true version: 3.2.4 dev: false +`; diff --git a/packages/nx/src/lock-file/__fixtures__/nextjs/.modules.yaml.ts b/packages/nx/src/lock-file/__fixtures__/nextjs/.modules.yaml.ts new file mode 100644 index 00000000000000..020bb80225dc12 --- /dev/null +++ b/packages/nx/src/lock-file/__fixtures__/nextjs/.modules.yaml.ts @@ -0,0 +1,2261 @@ +export default `hoistPattern: + - '*' +hoistedDependencies: + /@ampproject/remapping/2.2.0: + '@ampproject/remapping': private + /@babel/code-frame/7.18.6: + '@babel/code-frame': private + /@babel/compat-data/7.20.5: + '@babel/compat-data': private + /@babel/core/7.20.5: + '@babel/core': private + /@babel/generator/7.20.5: + '@babel/generator': private + /@babel/helper-annotate-as-pure/7.18.6: + '@babel/helper-annotate-as-pure': private + /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: + '@babel/helper-builder-binary-assignment-operator-visitor': private + /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5: + '@babel/helper-compilation-targets': private + /@babel/helper-create-class-features-plugin/7.20.5_@babel+core@7.20.5: + '@babel/helper-create-class-features-plugin': private + /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.20.5: + '@babel/helper-create-regexp-features-plugin': private + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.5: + '@babel/helper-define-polyfill-provider': private + /@babel/helper-environment-visitor/7.18.9: + '@babel/helper-environment-visitor': private + /@babel/helper-explode-assignable-expression/7.18.6: + '@babel/helper-explode-assignable-expression': private + /@babel/helper-function-name/7.19.0: + '@babel/helper-function-name': private + /@babel/helper-hoist-variables/7.18.6: + '@babel/helper-hoist-variables': private + /@babel/helper-member-expression-to-functions/7.18.9: + '@babel/helper-member-expression-to-functions': private + /@babel/helper-module-imports/7.18.6: + '@babel/helper-module-imports': private + /@babel/helper-module-transforms/7.20.2: + '@babel/helper-module-transforms': private + /@babel/helper-optimise-call-expression/7.18.6: + '@babel/helper-optimise-call-expression': private + /@babel/helper-plugin-utils/7.20.2: + '@babel/helper-plugin-utils': private + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.5: + '@babel/helper-remap-async-to-generator': private + /@babel/helper-replace-supers/7.19.1: + '@babel/helper-replace-supers': private + /@babel/helper-simple-access/7.20.2: + '@babel/helper-simple-access': private + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + '@babel/helper-skip-transparent-expression-wrappers': private + /@babel/helper-split-export-declaration/7.18.6: + '@babel/helper-split-export-declaration': private + /@babel/helper-string-parser/7.19.4: + '@babel/helper-string-parser': private + /@babel/helper-validator-identifier/7.19.1: + '@babel/helper-validator-identifier': private + /@babel/helper-validator-option/7.18.6: + '@babel/helper-validator-option': private + /@babel/helper-wrap-function/7.20.5: + '@babel/helper-wrap-function': private + /@babel/helpers/7.20.6: + '@babel/helpers': private + /@babel/highlight/7.18.6: + '@babel/highlight': private + /@babel/parser/7.20.5: + '@babel/parser': private + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.5: + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': private + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.20.5: + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': private + /@babel/plugin-proposal-async-generator-functions/7.20.1_@babel+core@7.20.5: + '@babel/plugin-proposal-async-generator-functions': private + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-class-properties': private + /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-class-static-block': private + /@babel/plugin-proposal-decorators/7.20.5_@babel+core@7.20.5: + '@babel/plugin-proposal-decorators': private + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-dynamic-import': private + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.5: + '@babel/plugin-proposal-export-namespace-from': private + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-json-strings': private + /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.20.5: + '@babel/plugin-proposal-logical-assignment-operators': private + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-nullish-coalescing-operator': private + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-numeric-separator': private + /@babel/plugin-proposal-object-rest-spread/7.20.2_@babel+core@7.20.5: + '@babel/plugin-proposal-object-rest-spread': private + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-optional-catch-binding': private + /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.20.5: + '@babel/plugin-proposal-optional-chaining': private + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-private-methods': private + /@babel/plugin-proposal-private-property-in-object/7.20.5_@babel+core@7.20.5: + '@babel/plugin-proposal-private-property-in-object': private + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.5: + '@babel/plugin-proposal-unicode-property-regex': private + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.5: + '@babel/plugin-syntax-async-generators': private + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-bigint': private + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.5: + '@babel/plugin-syntax-class-properties': private + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.5: + '@babel/plugin-syntax-class-static-block': private + /@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.20.5: + '@babel/plugin-syntax-decorators': private + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-dynamic-import': private + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-export-namespace-from': private + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.5: + '@babel/plugin-syntax-import-assertions': private + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.5: + '@babel/plugin-syntax-import-meta': private + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-json-strings': private + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5: + '@babel/plugin-syntax-jsx': private + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.5: + '@babel/plugin-syntax-logical-assignment-operators': private + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-nullish-coalescing-operator': private + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.5: + '@babel/plugin-syntax-numeric-separator': private + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-object-rest-spread': private + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-optional-catch-binding': private + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.5: + '@babel/plugin-syntax-optional-chaining': private + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.5: + '@babel/plugin-syntax-private-property-in-object': private + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.5: + '@babel/plugin-syntax-top-level-await': private + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.5: + '@babel/plugin-syntax-typescript': private + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-arrow-functions': private + /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-async-to-generator': private + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-block-scoped-functions': private + /@babel/plugin-transform-block-scoping/7.20.5_@babel+core@7.20.5: + '@babel/plugin-transform-block-scoping': private + /@babel/plugin-transform-classes/7.20.2_@babel+core@7.20.5: + '@babel/plugin-transform-classes': private + /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.20.5: + '@babel/plugin-transform-computed-properties': private + /@babel/plugin-transform-destructuring/7.20.2_@babel+core@7.20.5: + '@babel/plugin-transform-destructuring': private + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-dotall-regex': private + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.5: + '@babel/plugin-transform-duplicate-keys': private + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-exponentiation-operator': private + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.5: + '@babel/plugin-transform-for-of': private + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.5: + '@babel/plugin-transform-function-name': private + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.5: + '@babel/plugin-transform-literals': private + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-member-expression-literals': private + /@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.20.5: + '@babel/plugin-transform-modules-amd': private + /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.20.5: + '@babel/plugin-transform-modules-commonjs': private + /@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.20.5: + '@babel/plugin-transform-modules-systemjs': private + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-modules-umd': private + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.5: + '@babel/plugin-transform-named-capturing-groups-regex': private + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-new-target': private + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-object-super': private + /@babel/plugin-transform-parameters/7.20.5_@babel+core@7.20.5: + '@babel/plugin-transform-parameters': private + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-property-literals': private + /@babel/plugin-transform-react-constant-elements/7.20.2_@babel+core@7.20.5: + '@babel/plugin-transform-react-constant-elements': private + /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-react-display-name': private + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-react-jsx-development': private + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.20.5: + '@babel/plugin-transform-react-jsx': private + /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-react-pure-annotations': private + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.5: + '@babel/plugin-transform-regenerator': private + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-reserved-words': private + /@babel/plugin-transform-runtime/7.19.6_@babel+core@7.20.5: + '@babel/plugin-transform-runtime': private + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-shorthand-properties': private + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.20.5: + '@babel/plugin-transform-spread': private + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-sticky-regex': private + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.5: + '@babel/plugin-transform-template-literals': private + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.5: + '@babel/plugin-transform-typeof-symbol': private + /@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5: + '@babel/plugin-transform-typescript': private + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.5: + '@babel/plugin-transform-unicode-escapes': private + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.5: + '@babel/plugin-transform-unicode-regex': private + /@babel/preset-env/7.20.2_@babel+core@7.20.5: + '@babel/preset-env': private + /@babel/preset-modules/0.1.5_@babel+core@7.20.5: + '@babel/preset-modules': private + /@babel/preset-typescript/7.18.6_@babel+core@7.20.5: + '@babel/preset-typescript': private + /@babel/runtime-corejs3/7.20.6: + '@babel/runtime-corejs3': private + /@babel/runtime/7.20.6: + '@babel/runtime': private + /@babel/template/7.18.10: + '@babel/template': private + /@babel/traverse/7.20.5: + '@babel/traverse': private + /@babel/types/7.20.5: + '@babel/types': private + /@bcoe/v8-coverage/0.2.3: + '@bcoe/v8-coverage': private + /@colors/colors/1.5.0: + '@colors/colors': private + /@cspotcode/source-map-support/0.8.1: + '@cspotcode/source-map-support': private + /@cypress/request/2.88.10: + '@cypress/request': private + /@cypress/webpack-preprocessor/5.15.7_lxwsdojuovvngvdkxl6v3c5p3q: + '@cypress/webpack-preprocessor': private + /@cypress/xvfb/1.2.4_supports-color@8.1.1: + '@cypress/xvfb': private + /@esbuild/android-arm/0.15.18: + '@esbuild/android-arm': private + /@esbuild/linux-loong64/0.15.18: + '@esbuild/linux-loong64': private + /@eslint/eslintrc/1.3.3: + '@eslint/eslintrc': public + /@humanwhocodes/config-array/0.9.5: + '@humanwhocodes/config-array': private + /@humanwhocodes/object-schema/1.2.1: + '@humanwhocodes/object-schema': private + /@istanbuljs/load-nyc-config/1.1.0: + '@istanbuljs/load-nyc-config': private + /@istanbuljs/schema/0.1.3: + '@istanbuljs/schema': private + /@jest/console/28.1.3: + '@jest/console': private + /@jest/core/28.1.3_ts-node@10.9.1: + '@jest/core': private + /@jest/environment/28.1.3: + '@jest/environment': private + /@jest/expect-utils/28.1.3: + '@jest/expect-utils': private + /@jest/expect/28.1.3: + '@jest/expect': private + /@jest/fake-timers/28.1.3: + '@jest/fake-timers': private + /@jest/globals/28.1.3: + '@jest/globals': private + /@jest/reporters/28.1.1: + '@jest/reporters': private + /@jest/schemas/28.1.3: + '@jest/schemas': private + /@jest/source-map/28.1.2: + '@jest/source-map': private + /@jest/test-result/28.1.1: + '@jest/test-result': private + /@jest/test-sequencer/28.1.3: + '@jest/test-sequencer': private + /@jest/transform/28.1.3: + '@jest/transform': private + /@jest/types/28.1.3: + '@jest/types': private + /@jridgewell/gen-mapping/0.1.1: + '@jridgewell/gen-mapping': private + /@jridgewell/resolve-uri/3.1.0: + '@jridgewell/resolve-uri': private + /@jridgewell/set-array/1.1.2: + '@jridgewell/set-array': private + /@jridgewell/source-map/0.3.2: + '@jridgewell/source-map': private + /@jridgewell/sourcemap-codec/1.4.14: + '@jridgewell/sourcemap-codec': private + /@jridgewell/trace-mapping/0.3.9: + '@jridgewell/trace-mapping': private + /@leichtgewicht/ip-codec/2.0.4: + '@leichtgewicht/ip-codec': private + /@next/env/13.0.0: + '@next/env': private + /@next/eslint-plugin-next/13.0.0: + '@next/eslint-plugin-next': public + /@next/swc-android-arm-eabi/13.0.0: + '@next/swc-android-arm-eabi': private + /@next/swc-android-arm64/13.0.0: + '@next/swc-android-arm64': private + /@next/swc-darwin-arm64/13.0.0: + '@next/swc-darwin-arm64': private + /@next/swc-darwin-x64/13.0.0: + '@next/swc-darwin-x64': private + /@next/swc-freebsd-x64/13.0.0: + '@next/swc-freebsd-x64': private + /@next/swc-linux-arm-gnueabihf/13.0.0: + '@next/swc-linux-arm-gnueabihf': private + /@next/swc-linux-arm64-gnu/13.0.0: + '@next/swc-linux-arm64-gnu': private + /@next/swc-linux-arm64-musl/13.0.0: + '@next/swc-linux-arm64-musl': private + /@next/swc-linux-x64-gnu/13.0.0: + '@next/swc-linux-x64-gnu': private + /@next/swc-linux-x64-musl/13.0.0: + '@next/swc-linux-x64-musl': private + /@next/swc-win32-arm64-msvc/13.0.0: + '@next/swc-win32-arm64-msvc': private + /@next/swc-win32-ia32-msvc/13.0.0: + '@next/swc-win32-ia32-msvc': private + /@next/swc-win32-x64-msvc/13.0.0: + '@next/swc-win32-x64-msvc': private + /@nodelib/fs.scandir/2.1.5: + '@nodelib/fs.scandir': private + /@nodelib/fs.stat/2.0.5: + '@nodelib/fs.stat': private + /@nodelib/fs.walk/1.2.8: + '@nodelib/fs.walk': private + /@nrwl/cli/15.3.3: + '@nrwl/cli': private + /@nrwl/devkit/15.3.3_nx@15.3.3+typescript@4.8.4: + '@nrwl/devkit': private + /@nrwl/js/15.3.3_r2gzx2xpzw7235i7kfuv5sanse: + '@nrwl/js': private + /@nrwl/rollup/15.3.3_g7ln6fyf5xyhgqo5gt2apiah5e: + '@nrwl/rollup': private + /@nrwl/tao/15.3.3: + '@nrwl/tao': private + /@nrwl/vite/15.3.3_llkt3flgrewibg3pitamkbgmhq: + '@nrwl/vite': private + /@nrwl/webpack/15.3.3_tllczm7ur3wj7jvkuy5rv5uwtq: + '@nrwl/webpack': private + /@parcel/watcher/2.0.4: + '@parcel/watcher': private + /@phenomnomnominal/tsquery/4.1.1_typescript@4.8.4: + '@phenomnomnominal/tsquery': private + /@rollup/plugin-babel/5.3.1_opjstonlpkhafnz76jsxdwq25a: + '@rollup/plugin-babel': private + /@rollup/plugin-commonjs/20.0.0_rollup@2.79.1: + '@rollup/plugin-commonjs': private + /@rollup/plugin-image/2.1.1_rollup@2.79.1: + '@rollup/plugin-image': private + /@rollup/plugin-json/4.1.0_rollup@2.79.1: + '@rollup/plugin-json': private + /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: + '@rollup/plugin-node-resolve': private + /@rollup/pluginutils/3.1.0_rollup@2.79.1: + '@rollup/pluginutils': private + /@rushstack/eslint-patch/1.2.0: + '@rushstack/eslint-patch': public + /@sinclair/typebox/0.24.51: + '@sinclair/typebox': private + /@sinonjs/commons/1.8.6: + '@sinonjs/commons': private + /@sinonjs/fake-timers/9.1.2: + '@sinonjs/fake-timers': private + /@svgr/babel-plugin-add-jsx-attribute/6.5.1_@babel+core@7.20.5: + '@svgr/babel-plugin-add-jsx-attribute': private + /@svgr/babel-plugin-remove-jsx-attribute/6.5.0_@babel+core@7.20.5: + '@svgr/babel-plugin-remove-jsx-attribute': private + /@svgr/babel-plugin-remove-jsx-empty-expression/6.5.0_@babel+core@7.20.5: + '@svgr/babel-plugin-remove-jsx-empty-expression': private + /@svgr/babel-plugin-replace-jsx-attribute-value/6.5.1_@babel+core@7.20.5: + '@svgr/babel-plugin-replace-jsx-attribute-value': private + /@svgr/babel-plugin-svg-dynamic-title/6.5.1_@babel+core@7.20.5: + '@svgr/babel-plugin-svg-dynamic-title': private + /@svgr/babel-plugin-svg-em-dimensions/6.5.1_@babel+core@7.20.5: + '@svgr/babel-plugin-svg-em-dimensions': private + /@svgr/babel-plugin-transform-react-native-svg/6.5.1_@babel+core@7.20.5: + '@svgr/babel-plugin-transform-react-native-svg': private + /@svgr/babel-plugin-transform-svg-component/6.5.1_@babel+core@7.20.5: + '@svgr/babel-plugin-transform-svg-component': private + /@svgr/babel-preset/6.5.1_@babel+core@7.20.5: + '@svgr/babel-preset': private + /@svgr/core/6.5.1: + '@svgr/core': private + /@svgr/hast-util-to-babel-ast/6.5.1: + '@svgr/hast-util-to-babel-ast': private + /@svgr/plugin-jsx/6.5.1_@svgr+core@6.5.1: + '@svgr/plugin-jsx': private + /@svgr/plugin-svgo/6.5.1_@svgr+core@6.5.1: + '@svgr/plugin-svgo': private + /@svgr/webpack/6.5.1: + '@svgr/webpack': private + /@swc/helpers/0.4.11: + '@swc/helpers': private + /@testing-library/dom/8.19.0: + '@testing-library/dom': private + /@tootallnate/once/2.0.0: + '@tootallnate/once': private + /@trysound/sax/0.2.0: + '@trysound/sax': private + /@tsconfig/node10/1.0.9: + '@tsconfig/node10': private + /@tsconfig/node12/1.0.11: + '@tsconfig/node12': private + /@tsconfig/node14/1.0.3: + '@tsconfig/node14': private + /@tsconfig/node16/1.0.3: + '@tsconfig/node16': private + /@types/aria-query/4.2.2: + '@types/aria-query': private + /@types/babel__core/7.1.20: + '@types/babel__core': private + /@types/babel__generator/7.6.4: + '@types/babel__generator': private + /@types/babel__template/7.4.1: + '@types/babel__template': private + /@types/babel__traverse/7.18.3: + '@types/babel__traverse': private + /@types/body-parser/1.19.2: + '@types/body-parser': private + /@types/bonjour/3.5.10: + '@types/bonjour': private + /@types/chai-subset/1.3.3: + '@types/chai-subset': private + /@types/chai/4.3.4: + '@types/chai': private + /@types/connect-history-api-fallback/1.3.5: + '@types/connect-history-api-fallback': private + /@types/connect/3.4.35: + '@types/connect': private + /@types/eslint-scope/3.7.4: + '@types/eslint-scope': public + /@types/eslint/8.4.10: + '@types/eslint': public + /@types/estree/0.0.51: + '@types/estree': private + /@types/express-serve-static-core/4.17.31: + '@types/express-serve-static-core': private + /@types/express/4.17.15: + '@types/express': private + /@types/fs-extra/8.1.2: + '@types/fs-extra': private + /@types/glob/7.2.0: + '@types/glob': private + /@types/graceful-fs/4.1.5: + '@types/graceful-fs': private + /@types/http-proxy/1.17.9: + '@types/http-proxy': private + /@types/istanbul-lib-coverage/2.0.4: + '@types/istanbul-lib-coverage': private + /@types/istanbul-lib-report/3.0.0: + '@types/istanbul-lib-report': private + /@types/istanbul-reports/3.0.1: + '@types/istanbul-reports': private + /@types/jsdom/16.2.15: + '@types/jsdom': private + /@types/json-schema/7.0.11: + '@types/json-schema': private + /@types/json5/0.0.29: + '@types/json5': private + /@types/mime/3.0.1: + '@types/mime': private + /@types/minimatch/5.1.2: + '@types/minimatch': private + /@types/parse-json/4.0.0: + '@types/parse-json': private + /@types/parse5/6.0.3: + '@types/parse5': private + /@types/prettier/2.7.1: + '@types/prettier': public + /@types/prop-types/15.7.5: + '@types/prop-types': private + /@types/qs/6.9.7: + '@types/qs': private + /@types/range-parser/1.2.4: + '@types/range-parser': private + /@types/resolve/1.17.1: + '@types/resolve': private + /@types/retry/0.12.0: + '@types/retry': private + /@types/scheduler/0.16.2: + '@types/scheduler': private + /@types/semver/7.3.13: + '@types/semver': private + /@types/serve-index/1.9.1: + '@types/serve-index': private + /@types/serve-static/1.15.0: + '@types/serve-static': private + /@types/sinonjs__fake-timers/8.1.1: + '@types/sinonjs__fake-timers': private + /@types/sizzle/2.3.3: + '@types/sizzle': private + /@types/sockjs/0.3.33: + '@types/sockjs': private + /@types/stack-utils/2.0.1: + '@types/stack-utils': private + /@types/tough-cookie/4.0.2: + '@types/tough-cookie': private + /@types/ws/8.5.3: + '@types/ws': private + /@types/yargs-parser/21.0.0: + '@types/yargs-parser': private + /@types/yargs/17.0.17: + '@types/yargs': private + /@types/yauzl/2.10.0: + '@types/yauzl': private + /@typescript-eslint/scope-manager/5.46.1: + '@typescript-eslint/scope-manager': public + /@typescript-eslint/type-utils/5.46.1_oy7hgmlo6357d5kkcjbkfgtg4q: + '@typescript-eslint/type-utils': public + /@typescript-eslint/types/5.46.1: + '@typescript-eslint/types': public + /@typescript-eslint/typescript-estree/5.46.1_typescript@4.8.4: + '@typescript-eslint/typescript-estree': public + /@typescript-eslint/utils/5.46.1_oy7hgmlo6357d5kkcjbkfgtg4q: + '@typescript-eslint/utils': public + /@typescript-eslint/visitor-keys/5.46.1: + '@typescript-eslint/visitor-keys': public + /@webassemblyjs/ast/1.11.1: + '@webassemblyjs/ast': private + /@webassemblyjs/floating-point-hex-parser/1.11.1: + '@webassemblyjs/floating-point-hex-parser': private + /@webassemblyjs/helper-api-error/1.11.1: + '@webassemblyjs/helper-api-error': private + /@webassemblyjs/helper-buffer/1.11.1: + '@webassemblyjs/helper-buffer': private + /@webassemblyjs/helper-numbers/1.11.1: + '@webassemblyjs/helper-numbers': private + /@webassemblyjs/helper-wasm-bytecode/1.11.1: + '@webassemblyjs/helper-wasm-bytecode': private + /@webassemblyjs/helper-wasm-section/1.11.1: + '@webassemblyjs/helper-wasm-section': private + /@webassemblyjs/ieee754/1.11.1: + '@webassemblyjs/ieee754': private + /@webassemblyjs/leb128/1.11.1: + '@webassemblyjs/leb128': private + /@webassemblyjs/utf8/1.11.1: + '@webassemblyjs/utf8': private + /@webassemblyjs/wasm-edit/1.11.1: + '@webassemblyjs/wasm-edit': private + /@webassemblyjs/wasm-gen/1.11.1: + '@webassemblyjs/wasm-gen': private + /@webassemblyjs/wasm-opt/1.11.1: + '@webassemblyjs/wasm-opt': private + /@webassemblyjs/wasm-parser/1.11.1: + '@webassemblyjs/wasm-parser': private + /@webassemblyjs/wast-printer/1.11.1: + '@webassemblyjs/wast-printer': private + /@xtuc/ieee754/1.2.0: + '@xtuc/ieee754': private + /@xtuc/long/4.2.2: + '@xtuc/long': private + /@yarn-tool/resolve-package/1.0.47: + '@yarn-tool/resolve-package': private + /@yarnpkg/lockfile/1.1.0: + '@yarnpkg/lockfile': private + /@yarnpkg/parsers/3.0.0-rc.33: + '@yarnpkg/parsers': private + /@zkochan/js-yaml/0.0.6: + '@zkochan/js-yaml': private + /abab/2.0.6: + abab: private + /accepts/1.3.8: + accepts: private + /acorn-globals/6.0.0: + acorn-globals: private + /acorn-import-assertions/1.8.0_acorn@8.8.1: + acorn-import-assertions: private + /acorn-jsx/5.3.2_acorn@8.8.1: + acorn-jsx: private + /acorn-walk/8.2.0: + acorn-walk: private + /acorn/8.8.1: + acorn: private + /agent-base/6.0.2: + agent-base: private + /aggregate-error/3.1.0: + aggregate-error: private + /ajv-formats/2.1.1_ajv@8.11.2: + ajv-formats: private + /ajv-keywords/3.5.2_ajv@6.12.6: + ajv-keywords: private + /ajv/6.12.6: + ajv: private + /ansi-colors/4.1.3: + ansi-colors: private + /ansi-escapes/4.3.2: + ansi-escapes: private + /ansi-html-community/0.0.8: + ansi-html-community: private + /ansi-regex/5.0.1: + ansi-regex: private + /ansi-styles/4.3.0: + ansi-styles: private + /anymatch/3.1.3: + anymatch: private + /arch/2.2.0: + arch: private + /arg/4.1.3: + arg: private + /argparse/2.0.1: + argparse: private + /aria-query/4.2.2: + aria-query: private + /array-flatten/2.1.2: + array-flatten: private + /array-includes/3.1.6: + array-includes: private + /array-union/2.1.0: + array-union: private + /array.prototype.flat/1.3.1: + array.prototype.flat: private + /array.prototype.flatmap/1.3.1: + array.prototype.flatmap: private + /array.prototype.tosorted/1.1.1: + array.prototype.tosorted: private + /asn1/0.2.6: + asn1: private + /assert-plus/1.0.0: + assert-plus: private + /assertion-error/1.1.0: + assertion-error: private + /ast-types-flow/0.0.7: + ast-types-flow: private + /astral-regex/2.0.0: + astral-regex: private + /async/3.2.4: + async: private + /asynckit/0.4.0: + asynckit: private + /at-least-node/1.0.0: + at-least-node: private + /atob/2.1.2: + atob: private + /autoprefixer/10.4.13_postcss@8.4.20: + autoprefixer: private + /available-typed-arrays/1.0.5: + available-typed-arrays: private + /aws-sign2/0.7.0: + aws-sign2: private + /aws4/1.11.0: + aws4: private + /axe-core/4.6.1: + axe-core: private + /axios/1.2.1: + axios: private + /axobject-query/2.2.0: + axobject-query: private + /babel-loader/8.3.0_ztqwsvkb6z73luspkai6ilstpu: + babel-loader: private + /babel-plugin-const-enum/1.2.0_@babel+core@7.20.5: + babel-plugin-const-enum: private + /babel-plugin-istanbul/6.1.1: + babel-plugin-istanbul: private + /babel-plugin-jest-hoist/28.1.3: + babel-plugin-jest-hoist: private + /babel-plugin-macros/2.8.0: + babel-plugin-macros: private + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.5: + babel-plugin-polyfill-corejs2: private + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.5: + babel-plugin-polyfill-corejs3: private + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.5: + babel-plugin-polyfill-regenerator: private + /babel-plugin-transform-async-to-promises/0.8.18: + babel-plugin-transform-async-to-promises: private + /babel-plugin-transform-typescript-metadata/0.3.2: + babel-plugin-transform-typescript-metadata: private + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.5: + babel-preset-current-node-syntax: private + /babel-preset-jest/28.1.3_@babel+core@7.20.5: + babel-preset-jest: private + /balanced-match/1.0.2: + balanced-match: private + /base64-js/1.5.1: + base64-js: private + /basic-auth/2.0.1: + basic-auth: private + /batch/0.6.1: + batch: private + /bcrypt-pbkdf/1.0.2: + bcrypt-pbkdf: private + /big.js/5.2.2: + big.js: private + /binary-extensions/2.2.0: + binary-extensions: private + /bl/4.1.0: + bl: private + /blob-util/2.0.2: + blob-util: private + /bluebird/3.7.2: + bluebird: private + /body-parser/1.20.1: + body-parser: private + /bonjour-service/1.0.14: + bonjour-service: private + /boolbase/1.0.0: + boolbase: private + /brace-expansion/1.1.11: + brace-expansion: private + /braces/3.0.2: + braces: private + /browser-process-hrtime/1.0.0: + browser-process-hrtime: private + /browserslist/4.21.4: + browserslist: private + /bs-logger/0.2.6: + bs-logger: private + /bser/2.1.1: + bser: private + /buffer-crc32/0.2.13: + buffer-crc32: private + /buffer-from/1.1.2: + buffer-from: private + /buffer/5.7.1: + buffer: private + /builtin-modules/3.3.0: + builtin-modules: private + /bytes/3.0.0: + bytes: private + /cachedir/2.3.0: + cachedir: private + /call-bind/1.0.2: + call-bind: private + /callsites/3.1.0: + callsites: private + /camelcase/5.3.1: + camelcase: private + /caniuse-api/3.0.0: + caniuse-api: private + /caniuse-lite/1.0.30001439: + caniuse-lite: private + /caseless/0.12.0: + caseless: private + /chai/4.3.7: + chai: private + /chalk/4.1.0: + chalk: private + /char-regex/1.0.2: + char-regex: private + /charenc/0.0.2: + charenc: private + /check-error/1.0.2: + check-error: private + /check-more-types/2.24.0: + check-more-types: private + /chokidar/3.5.3: + chokidar: private + /chrome-trace-event/1.0.3: + chrome-trace-event: private + /ci-info/3.7.0: + ci-info: private + /cjs-module-lexer/1.2.2: + cjs-module-lexer: private + /clean-stack/2.2.0: + clean-stack: private + /cli-cursor/3.1.0: + cli-cursor: private + /cli-spinners/2.6.1: + cli-spinners: private + /cli-table3/0.6.3: + cli-table3: private + /cli-truncate/2.1.0: + cli-truncate: private + /client-only/0.0.1: + client-only: private + /cliui/7.0.4: + cliui: private + /clone-deep/4.0.1: + clone-deep: private + /co/4.6.0: + co: private + /collect-v8-coverage/1.0.1: + collect-v8-coverage: private + /color-convert/2.0.1: + color-convert: private + /color-name/1.1.4: + color-name: private + /colord/2.9.3: + colord: private + /colorette/2.0.19: + colorette: private + /combined-stream/1.0.8: + combined-stream: private + /commander/5.1.0: + commander: private + /common-tags/1.8.2: + common-tags: private + /commondir/1.0.1: + commondir: private + /compressible/2.0.18: + compressible: private + /compression/1.7.4: + compression: private + /concat-map/0.0.1: + concat-map: private + /concat-with-sourcemaps/1.1.0: + concat-with-sourcemaps: private + /confusing-browser-globals/1.0.11: + confusing-browser-globals: private + /connect-history-api-fallback/2.0.0: + connect-history-api-fallback: private + /content-disposition/0.5.4: + content-disposition: private + /content-type/1.0.4: + content-type: private + /convert-source-map/1.9.0: + convert-source-map: private + /cookie-signature/1.0.6: + cookie-signature: private + /cookie/0.5.0: + cookie: private + /copy-webpack-plugin/10.2.4_webpack@5.75.0: + copy-webpack-plugin: private + /core-js-compat/3.26.1: + core-js-compat: private + /core-js-pure/3.26.1: + core-js-pure: private + /core-util-is/1.0.2: + core-util-is: private + /corser/2.0.1: + corser: private + /cosmiconfig/6.0.0: + cosmiconfig: private + /create-require/1.1.1: + create-require: private + /cross-spawn/7.0.3: + cross-spawn: private + /crypt/0.0.2: + crypt: private + /css-declaration-sorter/6.3.1_postcss@8.4.20: + css-declaration-sorter: private + /css-loader/6.7.3_webpack@5.75.0: + css-loader: private + /css-minimizer-webpack-plugin/3.4.1_webpack@5.75.0: + css-minimizer-webpack-plugin: private + /css-select/4.3.0: + css-select: private + /css-tree/1.1.3: + css-tree: private + /css-what/6.1.0: + css-what: private + /css/3.0.0: + css: private + /cssesc/3.0.0: + cssesc: private + /cssnano-preset-default/5.2.13_postcss@8.4.20: + cssnano-preset-default: private + /cssnano-utils/3.1.0_postcss@8.4.20: + cssnano-utils: private + /cssnano/5.1.14_postcss@8.4.20: + cssnano: private + /csso/4.2.0: + csso: private + /cssom/0.5.0: + cssom: private + /cssstyle/2.3.0: + cssstyle: private + /csstype/3.1.1: + csstype: private + /damerau-levenshtein/1.0.8: + damerau-levenshtein: private + /dashdash/1.14.1: + dashdash: private + /data-urls/3.0.2: + data-urls: private + /dayjs/1.11.7: + dayjs: private + /debug/4.3.4: + debug: private + /decimal.js/10.4.3: + decimal.js: private + /decode-uri-component/0.2.2: + decode-uri-component: private + /dedent/0.7.0: + dedent: private + /deep-eql/4.1.3: + deep-eql: private + /deep-equal/2.1.0: + deep-equal: private + /deep-is/0.1.4: + deep-is: private + /deepmerge/4.2.2: + deepmerge: private + /default-gateway/6.0.3: + default-gateway: private + /define-lazy-prop/2.0.0: + define-lazy-prop: private + /define-properties/1.1.4: + define-properties: private + /delayed-stream/1.0.0: + delayed-stream: private + /depd/2.0.0: + depd: private + /destroy/1.2.0: + destroy: private + /detect-newline/3.1.0: + detect-newline: private + /detect-node/2.1.0: + detect-node: private + /diff-sequences/27.5.1: + diff-sequences: private + /diff/4.0.2: + diff: private + /dir-glob/3.0.1: + dir-glob: private + /dns-equal/1.0.0: + dns-equal: private + /dns-packet/5.4.0: + dns-packet: private + /doctrine/2.1.0: + doctrine: private + /dom-accessibility-api/0.5.14: + dom-accessibility-api: private + /dom-serializer/1.4.1: + dom-serializer: private + /domelementtype/2.3.0: + domelementtype: private + /domexception/4.0.0: + domexception: private + /domhandler/4.3.1: + domhandler: private + /domutils/2.8.0: + domutils: private + /dotenv/10.0.0: + dotenv: private + /duplexer/0.1.2: + duplexer: private + /ecc-jsbn/0.1.2: + ecc-jsbn: private + /ee-first/1.1.1: + ee-first: private + /ejs/3.1.8: + ejs: private + /electron-to-chromium/1.4.284: + electron-to-chromium: private + /emittery/0.10.2: + emittery: private + /emoji-regex/9.2.2: + emoji-regex: private + /emojis-list/3.0.0: + emojis-list: private + /encodeurl/1.0.2: + encodeurl: private + /end-of-stream/1.4.4: + end-of-stream: private + /enhanced-resolve/5.12.0: + enhanced-resolve: private + /enquirer/2.3.6: + enquirer: private + /entities/4.4.0: + entities: private + /errno/0.1.8: + errno: private + /error-ex/1.3.2: + error-ex: private + /es-abstract/1.20.5: + es-abstract: private + /es-get-iterator/1.1.2: + es-get-iterator: private + /es-module-lexer/0.9.3: + es-module-lexer: private + /es-shim-unscopables/1.0.0: + es-shim-unscopables: private + /es-to-primitive/1.2.1: + es-to-primitive: private + /esbuild-android-64/0.15.18: + esbuild-android-64: private + /esbuild-android-arm64/0.15.18: + esbuild-android-arm64: private + /esbuild-darwin-64/0.15.18: + esbuild-darwin-64: private + /esbuild-darwin-arm64/0.15.18: + esbuild-darwin-arm64: private + /esbuild-freebsd-64/0.15.18: + esbuild-freebsd-64: private + /esbuild-freebsd-arm64/0.15.18: + esbuild-freebsd-arm64: private + /esbuild-linux-32/0.15.18: + esbuild-linux-32: private + /esbuild-linux-64/0.15.18: + esbuild-linux-64: private + /esbuild-linux-arm/0.15.18: + esbuild-linux-arm: private + /esbuild-linux-arm64/0.15.18: + esbuild-linux-arm64: private + /esbuild-linux-mips64le/0.15.18: + esbuild-linux-mips64le: private + /esbuild-linux-ppc64le/0.15.18: + esbuild-linux-ppc64le: private + /esbuild-linux-riscv64/0.15.18: + esbuild-linux-riscv64: private + /esbuild-linux-s390x/0.15.18: + esbuild-linux-s390x: private + /esbuild-netbsd-64/0.15.18: + esbuild-netbsd-64: private + /esbuild-openbsd-64/0.15.18: + esbuild-openbsd-64: private + /esbuild-sunos-64/0.15.18: + esbuild-sunos-64: private + /esbuild-windows-32/0.15.18: + esbuild-windows-32: private + /esbuild-windows-64/0.15.18: + esbuild-windows-64: private + /esbuild-windows-arm64/0.15.18: + esbuild-windows-arm64: private + /esbuild/0.15.18: + esbuild: private + /escalade/3.1.1: + escalade: private + /escape-html/1.0.3: + escape-html: private + /escape-string-regexp/4.0.0: + escape-string-regexp: private + /escodegen/2.0.0: + escodegen: private + /eslint-import-resolver-node/0.3.6: + eslint-import-resolver-node: public + /eslint-import-resolver-typescript/2.7.1_gwd37gqv3vjv3xlpl7ju3ag2qu: + eslint-import-resolver-typescript: public + /eslint-module-utils/2.7.4_g3cqd3x7byhtftbfira7ojxdg4: + eslint-module-utils: public + /eslint-scope/7.1.1: + eslint-scope: public + /eslint-utils/3.0.0_eslint@8.15.0: + eslint-utils: public + /eslint-visitor-keys/3.3.0: + eslint-visitor-keys: public + /espree/9.4.1: + espree: private + /esprima/4.0.1: + esprima: private + /esquery/1.4.0: + esquery: private + /esrecurse/4.3.0: + esrecurse: private + /estraverse/5.3.0: + estraverse: private + /estree-walker/2.0.2: + estree-walker: private + /esutils/2.0.3: + esutils: private + /etag/1.8.1: + etag: private + /eventemitter2/6.4.7: + eventemitter2: private + /eventemitter3/4.0.7: + eventemitter3: private + /events/3.3.0: + events: private + /execa/4.1.0: + execa: private + /executable/4.1.1: + executable: private + /exit/0.1.2: + exit: private + /expect/28.1.3: + expect: private + /express/4.18.2: + express: private + /extend/3.0.2: + extend: private + /extract-zip/2.0.1_supports-color@8.1.1: + extract-zip: private + /extsprintf/1.3.0: + extsprintf: private + /fast-deep-equal/3.1.3: + fast-deep-equal: private + /fast-glob/3.2.7: + fast-glob: private + /fast-json-stable-stringify/2.1.0: + fast-json-stable-stringify: private + /fast-levenshtein/2.0.6: + fast-levenshtein: private + /fastq/1.14.0: + fastq: private + /faye-websocket/0.11.4: + faye-websocket: private + /fb-watchman/2.0.2: + fb-watchman: private + /fd-slicer/1.1.0: + fd-slicer: private + /figures/3.2.0: + figures: private + /file-entry-cache/6.0.1: + file-entry-cache: private + /file-loader/6.2.0_webpack@5.75.0: + file-loader: private + /filelist/1.0.4: + filelist: private + /fill-range/7.0.1: + fill-range: private + /finalhandler/1.2.0: + finalhandler: private + /find-cache-dir/3.3.2: + find-cache-dir: private + /find-up/4.1.0: + find-up: private + /flat-cache/3.0.4: + flat-cache: private + /flat/5.0.2: + flat: private + /flatted/3.2.7: + flatted: private + /follow-redirects/1.15.2: + follow-redirects: private + /for-each/0.3.3: + for-each: private + /forever-agent/0.6.1: + forever-agent: private + /fork-ts-checker-webpack-plugin/7.2.13_qw7fmzhoapcndkteb5rsc33stq: + fork-ts-checker-webpack-plugin: private + /form-data/2.3.3: + form-data: private + /forwarded/0.2.0: + forwarded: private + /fraction.js/4.2.0: + fraction.js: private + /fresh/0.5.2: + fresh: private + /fs-constants/1.0.0: + fs-constants: private + /fs-extra/10.1.0: + fs-extra: private + /fs-monkey/1.0.3: + fs-monkey: private + /fs.realpath/1.0.0: + fs.realpath: private + /fsevents/2.3.2: + fsevents: private + /function-bind/1.1.1: + function-bind: private + /function.prototype.name/1.1.5: + function.prototype.name: private + /functional-red-black-tree/1.0.1: + functional-red-black-tree: private + /functions-have-names/1.2.3: + functions-have-names: private + /generic-names/4.0.0: + generic-names: private + /gensync/1.0.0-beta.2: + gensync: private + /get-caller-file/2.0.5: + get-caller-file: private + /get-func-name/2.0.0: + get-func-name: private + /get-intrinsic/1.1.3: + get-intrinsic: private + /get-package-type/0.1.0: + get-package-type: private + /get-stream/5.2.0: + get-stream: private + /get-symbol-description/1.0.0: + get-symbol-description: private + /getos/3.2.1: + getos: private + /getpass/0.1.7: + getpass: private + /glob-parent/6.0.2: + glob-parent: private + /glob-to-regexp/0.4.1: + glob-to-regexp: private + /glob/7.1.4: + glob: private + /global-dirs/3.0.1: + global-dirs: private + /globals/11.12.0: + globals: private + /globby/11.1.0: + globby: private + /gopd/1.0.1: + gopd: private + /graceful-fs/4.2.10: + graceful-fs: private + /handle-thing/2.0.1: + handle-thing: private + /harmony-reflect/1.6.2: + harmony-reflect: private + /has-bigints/1.0.2: + has-bigints: private + /has-flag/4.0.0: + has-flag: private + /has-property-descriptors/1.0.0: + has-property-descriptors: private + /has-symbols/1.0.3: + has-symbols: private + /has-tostringtag/1.0.0: + has-tostringtag: private + /has/1.0.3: + has: private + /he/1.2.0: + he: private + /hpack.js/2.1.6: + hpack.js: private + /html-encoding-sniffer/3.0.0: + html-encoding-sniffer: private + /html-entities/2.3.3: + html-entities: private + /html-escaper/2.0.2: + html-escaper: private + /http-deceiver/1.2.7: + http-deceiver: private + /http-errors/2.0.0: + http-errors: private + /http-parser-js/0.5.8: + http-parser-js: private + /http-proxy-agent/5.0.0: + http-proxy-agent: private + /http-proxy-middleware/2.0.6_@types+express@4.17.15: + http-proxy-middleware: private + /http-proxy/1.18.1: + http-proxy: private + /http-server/14.1.1: + http-server: private + /http-signature/1.3.6: + http-signature: private + /https-proxy-agent/5.0.1: + https-proxy-agent: private + /human-signals/1.1.1: + human-signals: private + /iconv-lite/0.6.3: + iconv-lite: private + /icss-replace-symbols/1.1.0: + icss-replace-symbols: private + /icss-utils/5.1.0_postcss@8.4.20: + icss-utils: private + /identity-obj-proxy/3.0.0: + identity-obj-proxy: private + /ieee754/1.2.1: + ieee754: private + /ignore/5.2.1: + ignore: private + /image-size/0.5.5: + image-size: private + /immutable/4.1.0: + immutable: private + /import-cwd/3.0.0: + import-cwd: private + /import-fresh/3.3.0: + import-fresh: private + /import-from/3.0.0: + import-from: private + /import-local/3.1.0: + import-local: private + /imurmurhash/0.1.4: + imurmurhash: private + /indent-string/4.0.0: + indent-string: private + /inflight/1.0.6: + inflight: private + /inherits/2.0.4: + inherits: private + /ini/2.0.0: + ini: private + /internal-slot/1.0.4: + internal-slot: private + /ipaddr.js/2.0.1: + ipaddr.js: private + /is-arguments/1.1.1: + is-arguments: private + /is-arrayish/0.2.1: + is-arrayish: private + /is-bigint/1.0.4: + is-bigint: private + /is-binary-path/2.1.0: + is-binary-path: private + /is-boolean-object/1.1.2: + is-boolean-object: private + /is-buffer/1.1.6: + is-buffer: private + /is-builtin-module/3.2.0: + is-builtin-module: private + /is-callable/1.2.7: + is-callable: private + /is-ci/3.0.1: + is-ci: private + /is-core-module/2.11.0: + is-core-module: private + /is-date-object/1.0.5: + is-date-object: private + /is-docker/2.2.1: + is-docker: private + /is-extglob/2.1.1: + is-extglob: private + /is-fullwidth-code-point/3.0.0: + is-fullwidth-code-point: private + /is-generator-fn/2.1.0: + is-generator-fn: private + /is-glob/4.0.3: + is-glob: private + /is-installed-globally/0.4.0: + is-installed-globally: private + /is-map/2.0.2: + is-map: private + /is-module/1.0.0: + is-module: private + /is-negative-zero/2.0.2: + is-negative-zero: private + /is-number-object/1.0.7: + is-number-object: private + /is-number/7.0.0: + is-number: private + /is-path-inside/3.0.3: + is-path-inside: private + /is-plain-obj/3.0.0: + is-plain-obj: private + /is-plain-object/2.0.4: + is-plain-object: private + /is-potential-custom-element-name/1.0.1: + is-potential-custom-element-name: private + /is-reference/1.2.1: + is-reference: private + /is-regex/1.1.4: + is-regex: private + /is-set/2.0.2: + is-set: private + /is-shared-array-buffer/1.0.2: + is-shared-array-buffer: private + /is-stream/2.0.1: + is-stream: private + /is-string/1.0.7: + is-string: private + /is-symbol/1.0.4: + is-symbol: private + /is-typed-array/1.1.10: + is-typed-array: private + /is-typedarray/1.0.0: + is-typedarray: private + /is-unicode-supported/0.1.0: + is-unicode-supported: private + /is-weakmap/2.0.1: + is-weakmap: private + /is-weakref/1.0.2: + is-weakref: private + /is-weakset/2.0.2: + is-weakset: private + /is-wsl/2.2.0: + is-wsl: private + /isarray/2.0.5: + isarray: private + /isexe/2.0.0: + isexe: private + /isobject/3.0.1: + isobject: private + /isstream/0.1.2: + isstream: private + /istanbul-lib-coverage/3.2.0: + istanbul-lib-coverage: private + /istanbul-lib-instrument/5.2.1: + istanbul-lib-instrument: private + /istanbul-lib-report/3.0.0: + istanbul-lib-report: private + /istanbul-lib-source-maps/4.0.1: + istanbul-lib-source-maps: private + /istanbul-reports/3.1.5: + istanbul-reports: private + /jake/10.8.5: + jake: private + /jest-changed-files/28.1.3: + jest-changed-files: private + /jest-circus/28.1.3: + jest-circus: private + /jest-cli/28.1.3_odkjkoia5xunhxkdrka32ib6vi: + jest-cli: private + /jest-config/28.1.1_odkjkoia5xunhxkdrka32ib6vi: + jest-config: private + /jest-diff/27.5.1: + jest-diff: private + /jest-docblock/28.1.1: + jest-docblock: private + /jest-each/28.1.3: + jest-each: private + /jest-environment-node/28.1.3: + jest-environment-node: private + /jest-get-type/28.0.2: + jest-get-type: private + /jest-haste-map/28.1.3: + jest-haste-map: private + /jest-leak-detector/28.1.3: + jest-leak-detector: private + /jest-matcher-utils/27.5.1: + jest-matcher-utils: private + /jest-message-util/28.1.3: + jest-message-util: private + /jest-mock/28.1.3: + jest-mock: private + /jest-pnp-resolver/1.2.3_jest-resolve@28.1.1: + jest-pnp-resolver: private + /jest-regex-util/28.0.2: + jest-regex-util: private + /jest-resolve-dependencies/28.1.3: + jest-resolve-dependencies: private + /jest-resolve/28.1.1: + jest-resolve: private + /jest-runner/28.1.3: + jest-runner: private + /jest-runtime/28.1.3: + jest-runtime: private + /jest-snapshot/28.1.3: + jest-snapshot: private + /jest-util/28.1.1: + jest-util: private + /jest-validate/28.1.3: + jest-validate: private + /jest-watcher/28.1.3: + jest-watcher: private + /jest-worker/28.1.3: + jest-worker: private + /js-tokens/4.0.0: + js-tokens: private + /js-yaml/4.1.0: + js-yaml: private + /jsbn/0.1.1: + jsbn: private + /jsdom/19.0.0: + jsdom: private + /jsesc/2.5.2: + jsesc: private + /json-parse-even-better-errors/2.3.1: + json-parse-even-better-errors: private + /json-schema-traverse/0.4.1: + json-schema-traverse: private + /json-schema/0.4.0: + json-schema: private + /json-stable-stringify-without-jsonify/1.0.1: + json-stable-stringify-without-jsonify: private + /json-stringify-safe/5.0.1: + json-stringify-safe: private + /json5/2.2.1: + json5: private + /jsonc-parser/3.2.0: + jsonc-parser: private + /jsonfile/6.1.0: + jsonfile: private + /jsprim/2.0.2: + jsprim: private + /jsx-ast-utils/3.3.3: + jsx-ast-utils: private + /kind-of/6.0.3: + kind-of: private + /kleur/3.0.3: + kleur: private + /klona/2.0.5: + klona: private + /language-subtag-registry/0.3.22: + language-subtag-registry: private + /language-tags/1.0.7: + language-tags: private + /lazy-ass/1.6.0: + lazy-ass: private + /less-loader/11.1.0_less@3.12.2+webpack@5.75.0: + less-loader: private + /less/3.12.2: + less: private + /leven/3.1.0: + leven: private + /levn/0.4.1: + levn: private + /license-webpack-plugin/4.0.2_webpack@5.75.0: + license-webpack-plugin: private + /lilconfig/2.0.6: + lilconfig: private + /lines-and-columns/1.2.4: + lines-and-columns: private + /listr2/3.14.0_enquirer@2.3.6: + listr2: private + /loader-runner/4.3.0: + loader-runner: private + /loader-utils/2.0.4: + loader-utils: private + /local-pkg/0.4.2: + local-pkg: private + /locate-path/5.0.0: + locate-path: private + /lodash.camelcase/4.3.0: + lodash.camelcase: private + /lodash.debounce/4.0.8: + lodash.debounce: private + /lodash.memoize/4.1.2: + lodash.memoize: private + /lodash.merge/4.6.2: + lodash.merge: private + /lodash.once/4.1.1: + lodash.once: private + /lodash.uniq/4.5.0: + lodash.uniq: private + /lodash/4.17.21: + lodash: private + /log-symbols/4.1.0: + log-symbols: private + /log-update/4.0.0: + log-update: private + /loose-envify/1.4.0: + loose-envify: private + /loupe/2.3.6: + loupe: private + /lru-cache/6.0.0: + lru-cache: private + /lz-string/1.4.4: + lz-string: private + /magic-string/0.25.9: + magic-string: private + /make-dir/3.1.0: + make-dir: private + /make-error/1.3.6: + make-error: private + /makeerror/1.0.12: + makeerror: private + /md5/2.3.0: + md5: private + /mdn-data/2.0.14: + mdn-data: private + /media-typer/0.3.0: + media-typer: private + /memfs/3.4.12: + memfs: private + /merge-descriptors/1.0.1: + merge-descriptors: private + /merge-stream/2.0.0: + merge-stream: private + /merge2/1.4.1: + merge2: private + /methods/1.1.2: + methods: private + /micromatch/4.0.5: + micromatch: private + /mime-db/1.52.0: + mime-db: private + /mime-types/2.1.35: + mime-types: private + /mime/1.6.0: + mime: private + /mimic-fn/2.1.0: + mimic-fn: private + /mini-css-extract-plugin/2.4.7_webpack@5.75.0: + mini-css-extract-plugin: private + /mini-svg-data-uri/1.4.4: + mini-svg-data-uri: private + /minimalistic-assert/1.0.1: + minimalistic-assert: private + /minimatch/3.0.5: + minimatch: private + /minimist/1.2.7: + minimist: private + /mkdirp/0.5.6: + mkdirp: private + /ms/2.0.0: + ms: private + /multicast-dns/7.2.5: + multicast-dns: private + /nanoid/3.3.4: + nanoid: private + /native-request/1.1.0: + native-request: private + /natural-compare-lite/1.4.0: + natural-compare-lite: private + /natural-compare/1.4.0: + natural-compare: private + /negotiator/0.6.3: + negotiator: private + /neo-async/2.6.2: + neo-async: private + /node-abort-controller/3.0.1: + node-abort-controller: private + /node-addon-api/3.2.1: + node-addon-api: private + /node-forge/1.3.1: + node-forge: private + /node-gyp-build/4.5.0: + node-gyp-build: private + /node-int64/0.4.0: + node-int64: private + /node-releases/2.0.7: + node-releases: private + /normalize-path/3.0.0: + normalize-path: private + /normalize-range/0.1.2: + normalize-range: private + /normalize-url/6.1.0: + normalize-url: private + /npm-run-path/4.0.1: + npm-run-path: private + /nth-check/2.1.1: + nth-check: private + /nwsapi/2.2.2: + nwsapi: private + /object-assign/4.1.1: + object-assign: private + /object-inspect/1.12.2: + object-inspect: private + /object-is/1.1.5: + object-is: private + /object-keys/1.1.1: + object-keys: private + /object.assign/4.1.4: + object.assign: private + /object.entries/1.1.6: + object.entries: private + /object.fromentries/2.0.6: + object.fromentries: private + /object.hasown/1.1.2: + object.hasown: private + /object.values/1.1.6: + object.values: private + /obuf/1.1.2: + obuf: private + /on-finished/2.4.1: + on-finished: private + /on-headers/1.0.2: + on-headers: private + /once/1.4.0: + once: private + /onetime/5.1.2: + onetime: private + /open/8.4.0: + open: private + /opener/1.5.2: + opener: private + /optionator/0.9.1: + optionator: private + /ospath/1.2.2: + ospath: private + /p-finally/1.0.0: + p-finally: private + /p-limit/3.1.0: + p-limit: private + /p-locate/4.1.0: + p-locate: private + /p-map/4.0.0: + p-map: private + /p-queue/6.6.2: + p-queue: private + /p-retry/4.6.2: + p-retry: private + /p-timeout/3.2.0: + p-timeout: private + /p-try/2.2.0: + p-try: private + /parent-module/1.0.1: + parent-module: private + /parse-json/5.2.0: + parse-json: private + /parse5-html-rewriting-stream/6.0.1: + parse5-html-rewriting-stream: private + /parse5-sax-parser/6.0.1: + parse5-sax-parser: private + /parse5/4.0.0: + parse5: private + /parseurl/1.3.3: + parseurl: private + /path-exists/4.0.0: + path-exists: private + /path-is-absolute/1.0.1: + path-is-absolute: private + /path-is-network-drive/1.0.20: + path-is-network-drive: private + /path-key/3.1.1: + path-key: private + /path-parse/1.0.7: + path-parse: private + /path-strip-sep/1.0.17: + path-strip-sep: private + /path-to-regexp/0.1.7: + path-to-regexp: private + /path-type/4.0.0: + path-type: private + /pathval/1.1.1: + pathval: private + /pend/1.2.0: + pend: private + /performance-now/2.1.0: + performance-now: private + /picocolors/1.0.0: + picocolors: private + /picomatch/2.3.1: + picomatch: private + /pify/2.3.0: + pify: private + /pirates/4.0.5: + pirates: private + /pkg-dir/4.2.0: + pkg-dir: private + /portfinder/1.0.32: + portfinder: private + /postcss-calc/8.2.4_postcss@8.4.20: + postcss-calc: private + /postcss-colormin/5.3.0_postcss@8.4.20: + postcss-colormin: private + /postcss-convert-values/5.1.3_postcss@8.4.20: + postcss-convert-values: private + /postcss-discard-comments/5.1.2_postcss@8.4.20: + postcss-discard-comments: private + /postcss-discard-duplicates/5.1.0_postcss@8.4.20: + postcss-discard-duplicates: private + /postcss-discard-empty/5.1.1_postcss@8.4.20: + postcss-discard-empty: private + /postcss-discard-overridden/5.1.0_postcss@8.4.20: + postcss-discard-overridden: private + /postcss-import/14.1.0_postcss@8.4.20: + postcss-import: private + /postcss-load-config/3.1.4_ra2vnoek4vhbzktaezawwqbin4: + postcss-load-config: private + /postcss-loader/6.2.1_qxxfhhrl3yknjjmta266mo3u64: + postcss-loader: private + /postcss-merge-longhand/5.1.7_postcss@8.4.20: + postcss-merge-longhand: private + /postcss-merge-rules/5.1.3_postcss@8.4.20: + postcss-merge-rules: private + /postcss-minify-font-values/5.1.0_postcss@8.4.20: + postcss-minify-font-values: private + /postcss-minify-gradients/5.1.1_postcss@8.4.20: + postcss-minify-gradients: private + /postcss-minify-params/5.1.4_postcss@8.4.20: + postcss-minify-params: private + /postcss-minify-selectors/5.2.1_postcss@8.4.20: + postcss-minify-selectors: private + /postcss-modules-extract-imports/3.0.0_postcss@8.4.20: + postcss-modules-extract-imports: private + /postcss-modules-local-by-default/4.0.0_postcss@8.4.20: + postcss-modules-local-by-default: private + /postcss-modules-scope/3.0.0_postcss@8.4.20: + postcss-modules-scope: private + /postcss-modules-values/4.0.0_postcss@8.4.20: + postcss-modules-values: private + /postcss-modules/4.3.1_postcss@8.4.20: + postcss-modules: private + /postcss-normalize-charset/5.1.0_postcss@8.4.20: + postcss-normalize-charset: private + /postcss-normalize-display-values/5.1.0_postcss@8.4.20: + postcss-normalize-display-values: private + /postcss-normalize-positions/5.1.1_postcss@8.4.20: + postcss-normalize-positions: private + /postcss-normalize-repeat-style/5.1.1_postcss@8.4.20: + postcss-normalize-repeat-style: private + /postcss-normalize-string/5.1.0_postcss@8.4.20: + postcss-normalize-string: private + /postcss-normalize-timing-functions/5.1.0_postcss@8.4.20: + postcss-normalize-timing-functions: private + /postcss-normalize-unicode/5.1.1_postcss@8.4.20: + postcss-normalize-unicode: private + /postcss-normalize-url/5.1.0_postcss@8.4.20: + postcss-normalize-url: private + /postcss-normalize-whitespace/5.1.1_postcss@8.4.20: + postcss-normalize-whitespace: private + /postcss-ordered-values/5.1.3_postcss@8.4.20: + postcss-ordered-values: private + /postcss-reduce-initial/5.1.1_postcss@8.4.20: + postcss-reduce-initial: private + /postcss-reduce-transforms/5.1.0_postcss@8.4.20: + postcss-reduce-transforms: private + /postcss-selector-parser/6.0.11: + postcss-selector-parser: private + /postcss-svgo/5.1.0_postcss@8.4.20: + postcss-svgo: private + /postcss-unique-selectors/5.1.1_postcss@8.4.20: + postcss-unique-selectors: private + /postcss-value-parser/4.2.0: + postcss-value-parser: private + /postcss/8.4.14: + postcss: private + /prelude-ls/1.2.1: + prelude-ls: private + /pretty-bytes/5.6.0: + pretty-bytes: private + /pretty-format/27.5.1: + pretty-format: private + /process-nextick-args/2.0.1: + process-nextick-args: private + /promise.series/0.2.0: + promise.series: private + /prompts/2.4.2: + prompts: private + /prop-types/15.8.1: + prop-types: private + /proxy-addr/2.0.7: + proxy-addr: private + /proxy-from-env/1.0.0: + proxy-from-env: private + /prr/1.0.1: + prr: private + /psl/1.9.0: + psl: private + /pump/3.0.0: + pump: private + /punycode/2.1.1: + punycode: private + /qs/6.5.3: + qs: private + /querystringify/2.2.0: + querystringify: private + /queue-microtask/1.2.3: + queue-microtask: private + /randombytes/2.1.0: + randombytes: private + /range-parser/1.2.1: + range-parser: private + /raw-body/2.5.1: + raw-body: private + /raw-loader/4.0.2_webpack@5.75.0: + raw-loader: private + /react-is/18.2.0: + react-is: private + /react-shallow-renderer/16.15.0_react@18.2.0: + react-shallow-renderer: private + /read-cache/1.0.0: + read-cache: private + /readable-stream/3.6.0: + readable-stream: private + /readdirp/3.6.0: + readdirp: private + /regenerate-unicode-properties/10.1.0: + regenerate-unicode-properties: private + /regenerate/1.4.2: + regenerate: private + /regenerator-transform/0.15.1: + regenerator-transform: private + /regexp.prototype.flags/1.4.3: + regexp.prototype.flags: private + /regexpp/3.2.0: + regexpp: private + /regexpu-core/5.2.2: + regexpu-core: private + /regjsgen/0.7.1: + regjsgen: private + /regjsparser/0.9.1: + regjsparser: private + /request-progress/3.0.0: + request-progress: private + /require-directory/2.1.1: + require-directory: private + /require-from-string/2.0.2: + require-from-string: private + /requires-port/1.0.0: + requires-port: private + /resolve-cwd/3.0.0: + resolve-cwd: private + /resolve-from/4.0.0: + resolve-from: private + /resolve.exports/1.1.0: + resolve.exports: private + /resolve/1.22.1: + resolve: private + /restore-cursor/3.1.0: + restore-cursor: private + /retry/0.13.1: + retry: private + /reusify/1.0.4: + reusify: private + /rfdc/1.3.0: + rfdc: private + /rimraf/3.0.2: + rimraf: private + /rollup-plugin-copy/3.4.0: + rollup-plugin-copy: private + /rollup-plugin-peer-deps-external/2.2.4_rollup@2.79.1: + rollup-plugin-peer-deps-external: private + /rollup-plugin-postcss/4.0.2_ra2vnoek4vhbzktaezawwqbin4: + rollup-plugin-postcss: private + /rollup-plugin-typescript2/0.31.2_gypgyaqhine6mwjfvh7icfhviq: + rollup-plugin-typescript2: private + /rollup-pluginutils/2.8.2: + rollup-pluginutils: private + /rollup/2.79.1: + rollup: private + /run-parallel/1.2.0: + run-parallel: private + /rxjs/6.6.7: + rxjs: private + /safe-buffer/5.2.1: + safe-buffer: private + /safe-identifier/0.4.2: + safe-identifier: private + /safe-regex-test/1.0.0: + safe-regex-test: private + /safer-buffer/2.1.2: + safer-buffer: private + /sass-loader/12.6.0_sass@1.56.2+webpack@5.75.0: + sass-loader: private + /sass/1.56.2: + sass: private + /sax/1.2.4: + sax: private + /saxes/5.0.1: + saxes: private + /scheduler/0.23.0: + scheduler: private + /schema-utils/2.7.1: + schema-utils: private + /secure-compare/3.0.1: + secure-compare: private + /select-hose/2.0.0: + select-hose: private + /selfsigned/2.1.1: + selfsigned: private + /semver/7.3.4: + semver: private + /send/0.18.0: + send: private + /serialize-javascript/6.0.0: + serialize-javascript: private + /serve-index/1.9.1: + serve-index: private + /serve-static/1.15.0: + serve-static: private + /setprototypeof/1.2.0: + setprototypeof: private + /shallow-clone/3.0.1: + shallow-clone: private + /shebang-command/2.0.0: + shebang-command: private + /shebang-regex/3.0.0: + shebang-regex: private + /side-channel/1.0.4: + side-channel: private + /signal-exit/3.0.7: + signal-exit: private + /sisteransi/1.0.5: + sisteransi: private + /slash/3.0.0: + slash: private + /slice-ansi/3.0.0: + slice-ansi: private + /sockjs/0.3.24: + sockjs: private + /source-map-js/1.0.2: + source-map-js: private + /source-map-loader/3.0.2_webpack@5.75.0: + source-map-loader: private + /source-map-resolve/0.6.0: + source-map-resolve: private + /source-map-support/0.5.19: + source-map-support: private + /source-map/0.6.1: + source-map: private + /sourcemap-codec/1.4.8: + sourcemap-codec: private + /spdy-transport/3.0.0: + spdy-transport: private + /spdy/4.0.2: + spdy: private + /sprintf-js/1.0.3: + sprintf-js: private + /sshpk/1.17.0: + sshpk: private + /stable/0.1.8: + stable: private + /stack-utils/2.0.6: + stack-utils: private + /statuses/2.0.1: + statuses: private + /string-hash/1.1.3: + string-hash: private + /string-length/4.0.2: + string-length: private + /string-width/4.2.3: + string-width: private + /string.prototype.matchall/4.0.8: + string.prototype.matchall: private + /string.prototype.trimend/1.0.6: + string.prototype.trimend: private + /string.prototype.trimstart/1.0.6: + string.prototype.trimstart: private + /string_decoder/1.3.0: + string_decoder: private + /strip-ansi/6.0.1: + strip-ansi: private + /strip-bom/3.0.0: + strip-bom: private + /strip-final-newline/2.0.0: + strip-final-newline: private + /strip-json-comments/3.1.1: + strip-json-comments: private + /strip-literal/1.0.0: + strip-literal: private + /strong-log-transformer/2.1.0: + strong-log-transformer: private + /style-inject/0.3.0: + style-inject: private + /style-loader/3.3.1_webpack@5.75.0: + style-loader: private + /styled-jsx/5.1.0_zavbqmrropwrojvx6ojaa4s7im: + styled-jsx: private + /stylehacks/5.1.1_postcss@8.4.20: + stylehacks: private + /stylus-loader/7.1.0_irl2hmhzopg6urv44vymn74p4e: + stylus-loader: private + /stylus/0.55.0: + stylus: private + /supports-color/8.1.1: + supports-color: private + /supports-hyperlinks/2.3.0: + supports-hyperlinks: private + /supports-preserve-symlinks-flag/1.0.0: + supports-preserve-symlinks-flag: private + /svg-parser/2.0.4: + svg-parser: private + /svgo/2.8.0: + svgo: private + /symbol-tree/3.2.4: + symbol-tree: private + /tapable/2.2.1: + tapable: private + /tar-stream/2.2.0: + tar-stream: private + /terminal-link/2.1.1: + terminal-link: private + /terser-webpack-plugin/5.3.6_webpack@5.75.0: + terser-webpack-plugin: private + /terser/5.16.1: + terser: private + /test-exclude/6.0.0: + test-exclude: private + /text-table/0.2.0: + text-table: private + /throttleit/1.0.0: + throttleit: private + /through/2.3.8: + through: private + /thunky/1.1.0: + thunky: private + /tinybench/2.3.1: + tinybench: private + /tinypool/0.3.0: + tinypool: private + /tinyspy/1.0.2: + tinyspy: private + /tmp/0.2.1: + tmp: private + /tmpl/1.0.5: + tmpl: private + /to-fast-properties/2.0.0: + to-fast-properties: private + /to-regex-range/5.0.1: + to-regex-range: private + /toidentifier/1.0.1: + toidentifier: private + /tough-cookie/2.5.0: + tough-cookie: private + /tr46/3.0.0: + tr46: private + /tree-kill/1.2.2: + tree-kill: private + /ts-loader/9.4.2_qw7fmzhoapcndkteb5rsc33stq: + ts-loader: private + /tsconfig-paths-webpack-plugin/3.5.2: + tsconfig-paths-webpack-plugin: private + /tsconfig-paths/3.14.1: + tsconfig-paths: private + /tsutils/3.21.0_typescript@4.8.4: + tsutils: private + /tunnel-agent/0.6.0: + tunnel-agent: private + /tweetnacl/0.14.5: + tweetnacl: private + /type-check/0.4.0: + type-check: private + /type-detect/4.0.8: + type-detect: private + /type-fest/0.20.2: + type-fest: private + /type-is/1.6.18: + type-is: private + /typed-assert/1.0.9: + typed-assert: private + /unbox-primitive/1.0.2: + unbox-primitive: private + /unicode-canonical-property-names-ecmascript/2.0.0: + unicode-canonical-property-names-ecmascript: private + /unicode-match-property-ecmascript/2.0.0: + unicode-match-property-ecmascript: private + /unicode-match-property-value-ecmascript/2.1.0: + unicode-match-property-value-ecmascript: private + /unicode-property-aliases-ecmascript/2.1.0: + unicode-property-aliases-ecmascript: private + /union/0.5.0: + union: private + /universalify/2.0.0: + universalify: private + /unpipe/1.0.0: + unpipe: private + /untildify/4.0.0: + untildify: private + /upath2/3.1.19: + upath2: private + /update-browserslist-db/1.0.10_browserslist@4.21.4: + update-browserslist-db: private + /uri-js/4.4.1: + uri-js: private + /url-join/4.0.1: + url-join: private + /url-loader/4.1.1_webpack@5.75.0: + url-loader: private + /url-parse/1.5.10: + url-parse: private + /use-sync-external-store/1.2.0_react@18.2.0: + use-sync-external-store: private + /util-deprecate/1.0.2: + util-deprecate: private + /utils-merge/1.0.1: + utils-merge: private + /uuid/8.3.2: + uuid: private + /v8-compile-cache-lib/3.0.1: + v8-compile-cache-lib: private + /v8-compile-cache/2.3.0: + v8-compile-cache: private + /v8-to-istanbul/9.0.1: + v8-to-istanbul: private + /vary/1.1.2: + vary: private + /verror/1.10.0: + verror: private + /vite/3.2.5_ln3zd37likqum747dljlxbzdm4: + vite: private + /vitest/0.25.8_less@3.12.2+stylus@0.55.0: + vitest: private + /w3c-hr-time/1.0.2: + w3c-hr-time: private + /w3c-xmlserializer/3.0.0: + w3c-xmlserializer: private + /walker/1.0.8: + walker: private + /watchpack/2.4.0: + watchpack: private + /wbuf/1.7.3: + wbuf: private + /webidl-conversions/7.0.0: + webidl-conversions: private + /webpack-dev-middleware/5.3.3_webpack@5.75.0: + webpack-dev-middleware: private + /webpack-dev-server/4.11.1_webpack@5.75.0: + webpack-dev-server: private + /webpack-merge/5.8.0: + webpack-merge: private + /webpack-node-externals/3.0.0: + webpack-node-externals: private + /webpack-sources/3.2.3: + webpack-sources: private + /webpack-subresource-integrity/5.1.0_webpack@5.75.0: + webpack-subresource-integrity: private + /webpack-virtual-modules/0.4.6: + webpack-virtual-modules: private + /webpack/5.75.0: + webpack: private + /websocket-driver/0.7.4: + websocket-driver: private + /websocket-extensions/0.1.4: + websocket-extensions: private + /whatwg-encoding/2.0.0: + whatwg-encoding: private + /whatwg-mimetype/3.0.0: + whatwg-mimetype: private + /whatwg-url/10.0.0: + whatwg-url: private + /which-boxed-primitive/1.0.2: + which-boxed-primitive: private + /which-collection/1.0.1: + which-collection: private + /which-typed-array/1.1.9: + which-typed-array: private + /which/2.0.2: + which: private + /wildcard/2.0.0: + wildcard: private + /word-wrap/1.2.3: + word-wrap: private + /wrap-ansi/7.0.0: + wrap-ansi: private + /wrappy/1.0.2: + wrappy: private + /write-file-atomic/4.0.2: + write-file-atomic: private + /ws/8.11.0: + ws: private + /xml-name-validator/4.0.0: + xml-name-validator: private + /xmlchars/2.2.0: + xmlchars: private + /y18n/5.0.8: + y18n: private + /yallist/4.0.0: + yallist: private + /yaml/1.10.2: + yaml: private + /yargs-parser/21.1.1: + yargs-parser: private + /yargs/17.6.2: + yargs: private + /yauzl/2.10.0: + yauzl: private + /yn/3.1.1: + yn: private + /yocto-queue/0.1.0: + yocto-queue: private +included: + dependencies: true + devDependencies: true + optionalDependencies: true +injectedDeps: {} +layoutVersion: 5 +nodeLinker: isolated +packageManager: pnpm@7.16.0 +pendingBuilds: [] +prunedAt: Tue, 03 Jan 2023 11:14:46 GMT +publicHoistPattern: + - '*eslint*' + - '*prettier*' +registries: + default: https://registry.npmjs.org/ +skipped: + - /@esbuild/android-arm/0.15.18 + - /@esbuild/linux-loong64/0.15.18 + - /@next/swc-android-arm-eabi/13.0.0 + - /@next/swc-android-arm64/13.0.0 + - /@next/swc-darwin-x64/13.0.0 + - /@next/swc-freebsd-x64/13.0.0 + - /@next/swc-linux-arm-gnueabihf/13.0.0 + - /@next/swc-linux-arm64-gnu/13.0.0 + - /@next/swc-linux-arm64-musl/13.0.0 + - /@next/swc-linux-x64-gnu/13.0.0 + - /@next/swc-linux-x64-musl/13.0.0 + - /@next/swc-win32-arm64-msvc/13.0.0 + - /@next/swc-win32-ia32-msvc/13.0.0 + - /@next/swc-win32-x64-msvc/13.0.0 + - /esbuild-android-64/0.15.18 + - /esbuild-android-arm64/0.15.18 + - /esbuild-darwin-64/0.15.18 + - /esbuild-freebsd-64/0.15.18 + - /esbuild-freebsd-arm64/0.15.18 + - /esbuild-linux-32/0.15.18 + - /esbuild-linux-64/0.15.18 + - /esbuild-linux-arm/0.15.18 + - /esbuild-linux-arm64/0.15.18 + - /esbuild-linux-mips64le/0.15.18 + - /esbuild-linux-ppc64le/0.15.18 + - /esbuild-linux-riscv64/0.15.18 + - /esbuild-linux-s390x/0.15.18 + - /esbuild-netbsd-64/0.15.18 + - /esbuild-openbsd-64/0.15.18 + - /esbuild-sunos-64/0.15.18 + - /esbuild-windows-32/0.15.18 + - /esbuild-windows-64/0.15.18 + - /esbuild-windows-arm64/0.15.18 +storeDir: /Users/miro/Library/pnpm/store/v3 +virtualStoreDir: .pnpm +`; diff --git a/packages/nx/src/lock-file/__fixtures__/nextjs/pnpm-lock.yaml b/packages/nx/src/lock-file/__fixtures__/nextjs/pnpm-lock.yaml.ts similarity index 99% rename from packages/nx/src/lock-file/__fixtures__/nextjs/pnpm-lock.yaml rename to packages/nx/src/lock-file/__fixtures__/nextjs/pnpm-lock.yaml.ts index 05957bec95f6c5..6f0cb7265100ac 100644 --- a/packages/nx/src/lock-file/__fixtures__/nextjs/pnpm-lock.yaml +++ b/packages/nx/src/lock-file/__fixtures__/nextjs/pnpm-lock.yaml.ts @@ -1,4 +1,4 @@ -lockfileVersion: 5.4 +export default `lockfileVersion: 5.4 specifiers: '@babel/preset-react': ^7.14.5 @@ -10281,3 +10281,4 @@ packages: /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} +`; diff --git a/packages/nx/src/lock-file/npm-v2.spec.ts b/packages/nx/src/lock-file/npm-v2.spec.ts index 86653ea732ef81..ec36a4aa578bd9 100644 --- a/packages/nx/src/lock-file/npm-v2.spec.ts +++ b/packages/nx/src/lock-file/npm-v2.spec.ts @@ -38,81 +38,73 @@ describe('NPM lock file utility', () => { expect(resultV1.root.children.size).toEqual(202); expect(resultV1.isValid).toBeTruthy(); + expect(resultV1.nodes.get('node_modules/postgres').name).toEqual( + 'postgres' + ); + expect( + resultV1.nodes.get('node_modules/postgres').packageName + ).toBeUndefined(); + expect(resultV1.nodes.get('node_modules/postgres').version).toMatch( + '3b1a01b2da3e2fafb1a79006f838eff11a8de3cb' + ); + expect( + resultV1.nodes.get('node_modules/postgres').edgesIn.values().next().value + .versionSpec + ).toMatch('charsleysa/postgres#fix-errors-compiled'); + + expect( + resultV1.nodes.get('node_modules/eslint-plugin-disable-autofix').name + ).toEqual('eslint-plugin-disable-autofix'); + expect( + resultV1.nodes.get('node_modules/eslint-plugin-disable-autofix') + .packageName + ).toEqual('@mattlewis92/eslint-plugin-disable-autofix'); + expect( + resultV1.nodes.get('node_modules/eslint-plugin-disable-autofix').version + ).toEqual('3.0.0'); + expect( + resultV1.nodes + .get('node_modules/eslint-plugin-disable-autofix') + .edgesIn.values() + .next().value.versionSpec + ).toEqual('npm:@mattlewis92/eslint-plugin-disable-autofix@3.0.0'); + const resultV2 = parseNpmLockFile( JSON.stringify(rootV2LockFile), packageJson ); - expect(resultV1.root.children.size).toEqual(resultV2.root.children.size); + expect(resultV2.root.children.size).toEqual(resultV2.root.children.size); expect(resultV2.isValid).toBeTruthy(); - }); - xit('should prune', async () => { - // TODO: Check what arborist loads and how are we different - // TODO: probably the whole structure needs to be revisited - const Arborist = require('@npmcli/arborist'); - const arb = new Arborist({ - path: joinPathFragments(__dirname, '__fixtures__/nextjs'), - }); - console.time('load actual'); - const actualTree = await arb.loadVirtual(); - // console.log(actualTree.children.get('ansi-styles')); - // console.log(actualTree.children.get('wrap-ansi').children); - // console.log(Object.keys(tree.children).length, tree.edgesOut); - const newTree = await arb.buildIdealTree({ - // path: joinPathFragments(__dirname, '__fixtures__/nextjs/app'), - add: [], - rm: [ - '@babel/preset-react', - '@nrwl/cypress', - '@nrwl/eslint-plugin-nx', - '@nrwl/jest', - '@nrwl/linter', - // '@nrwl/next', - '@nrwl/react', - '@nrwl/web', - '@nrwl/workspace', - '@testing-library/react', - '@types/jest', - '@types/node', - '@types/react', - '@types/react-dom', - '@typescript-eslint/eslint-plugin', - '@typescript-eslint/parser', - 'babel-jest', - 'core-js', - 'cypress', - 'eslint', - 'eslint-config-next', - 'eslint-config-prettier', - 'eslint-plugin-cypress', - 'eslint-plugin-import', - 'eslint-plugin-jsx-a11y', - 'eslint-plugin-react', - 'eslint-plugin-react-hooks', - 'jest', - 'jest-environment-jsdom', - // 'next', - 'nx', - 'prettier', - // 'react', - // 'react-dom', - 'react-test-renderer', - 'regenerator-runtime', - 'ts-jest', - 'ts-node', - 'tslib', - // 'typescript' - ], - }); - const newTree2 = await arb.buildIdealTree({ - path: joinPathFragments(__dirname, '__fixtures__/nextjs/app'), - }); - console.log(newTree2.children.size); - // console.log(newTree.children.get('@nrwl/next'), newTree.children.size); - // const expectedLockFile = require(joinPathFragments( - // __dirname, - // '__fixtures__/nextjs/app/package-lock.json' - // )); - // console.log(Object.keys(expectedLockFile.packages).length); + expect(resultV2.nodes.get('node_modules/postgres').name).toEqual( + 'postgres' + ); + expect( + resultV2.nodes.get('node_modules/postgres').packageName + ).toBeUndefined(); + expect(resultV2.nodes.get('node_modules/postgres').version).toMatch( + '3b1a01b2da3e2fafb1a79006f838eff11a8de3cb' + ); + expect( + resultV2.nodes.get('node_modules/postgres').edgesIn.values().next().value + .versionSpec + ).toEqual('charsleysa/postgres#fix-errors-compiled'); + + expect( + resultV2.nodes.get('node_modules/eslint-plugin-disable-autofix').name + ).toEqual('eslint-plugin-disable-autofix'); + expect( + resultV2.nodes.get('node_modules/eslint-plugin-disable-autofix') + .packageName + ).toEqual('@mattlewis92/eslint-plugin-disable-autofix'); + expect( + resultV2.nodes.get('node_modules/eslint-plugin-disable-autofix').version + ).toEqual('3.0.0'); + expect( + resultV2.nodes + .get('node_modules/eslint-plugin-disable-autofix') + .edgesIn.values() + .next().value.versionSpec + ).toEqual('npm:@mattlewis92/eslint-plugin-disable-autofix@3.0.0'); }); }); diff --git a/packages/nx/src/lock-file/npm-v2.ts b/packages/nx/src/lock-file/npm-v2.ts index 138bcae1aab93d..34cc24acf0404d 100644 --- a/packages/nx/src/lock-file/npm-v2.ts +++ b/packages/nx/src/lock-file/npm-v2.ts @@ -110,6 +110,7 @@ function processV1Node( packageName = version.slice(4, versionStartIndex); version = version.slice(versionStartIndex + 1); // we don't need `@` } + const node: LockFileNode = { name, ...(packageName && { packageName }), @@ -172,9 +173,16 @@ function parseV3LockFile( // parse node value from lock file into `LockFileNode` function parseV3Node(path: string, value: NpmDependencyV3): LockFileNode { - const { version, resolved, peer, optional, dev, name, integrity } = value; + const { resolved, peer, optional, dev, name, integrity } = value; const devOptional = dev || optional || value.devOptional; const packageName = path.split('node_modules/').pop(); + + let version = value.version; + // for tarball packages version might not exist or be useless + if (!version || (resolved && !resolved.includes(version))) { + version = resolved; + } + const node: LockFileNode = { name: packageName, ...(name && name !== packageName && { packageName: name }), diff --git a/packages/nx/src/lock-file/npm.ts b/packages/nx/src/lock-file/npm.ts index 92d4f108b4d681..bc640537b67a3b 100644 --- a/packages/nx/src/lock-file/npm.ts +++ b/packages/nx/src/lock-file/npm.ts @@ -529,18 +529,6 @@ export function pruneNpmLockFile( ): LockFileData { const isV1 = lockFileData.lockFileMetadata.metadata.lockfileVersion === 1; - // NPM V1 does not track full dependency list in the lock file, - // so we can't reuse the lock file to generate a new one - if (isV1) { - output.warn({ - title: 'Pruning v1 lock file', - bodyLines: [ - `If your "node_modules" are not in sync with the lock file, you might get inaccurate results.`, - `Run "npm ci" to ensure your installed packages are synchronized or upgrade to NPM v7+ to benefit from the new lock file format`, - ], - }); - } - const dependencies = pruneDependencies( lockFileData.dependencies, normalizedPackageJson, diff --git a/packages/nx/src/lock-file/pnpm-v2.spec.ts b/packages/nx/src/lock-file/pnpm-v2.spec.ts new file mode 100644 index 00000000000000..843eaefbcfae15 --- /dev/null +++ b/packages/nx/src/lock-file/pnpm-v2.spec.ts @@ -0,0 +1,204 @@ +import { joinPathFragments } from '../utils/path'; +import { parsePnpmLockFile } from './pnpm-v2'; +import { vol } from 'memfs'; + +jest.mock('fs', () => require('memfs').fs); + +jest.mock('@nrwl/devkit', () => ({ + ...jest.requireActual('@nrwl/devkit'), + workspaceRoot: '/root', +})); + +jest.mock('nx/src/utils/workspace-root', () => ({ + workspaceRoot: '/root', +})); + +/** + * Utility to generate the fileSys report of the versions in the node_modules folder + */ +// const readFileSync = require('fs').readFileSync; +// const readdirSync = require('fs').readdirSync; +// const existsSync = require('fs').existsSync; + +// let report = ''; + +// const packageNames = []; +// readdirSync('node_modules').forEach(folder => { +// if (folder.startsWith('@')) { +// readdirSync(`node_modules/${folder}`).forEach(subfolder => { +// packageNames.push(`${folder}/${subfolder}`); +// }); +// } else { +// packageNames.push(folder); +// } +// }); + +// packageNames.forEach(packageName => { +// const path = `node_modules/${packageName}/package.json`; +// if (existsSync(path)) { +// const content = readFileSync(path, 'utf-8'); +// const version = JSON.parse(content).version; +// report += `'${path}': '{"version": "${version}"}',\n`; +// } +// }); + +// console.log(report); + +describe('pnpm LockFile utility', () => { + it('should parse next.js starter', async () => { + const fileSys = { + 'node_modules/@babel/preset-react/package.json': '{"version": "7.18.6"}', + 'node_modules/@eslint/eslintrc/package.json': '{"version": "1.3.3"}', + 'node_modules/@next/eslint-plugin-next/package.json': + '{"version": "13.0.0"}', + 'node_modules/@nrwl/cypress/package.json': '{"version": "15.3.3"}', + 'node_modules/@nrwl/eslint-plugin-nx/package.json': + '{"version": "15.3.3"}', + 'node_modules/@nrwl/jest/package.json': '{"version": "15.3.3"}', + 'node_modules/@nrwl/linter/package.json': '{"version": "15.3.3"}', + 'node_modules/@nrwl/next/package.json': '{"version": "15.3.3"}', + 'node_modules/@nrwl/react/package.json': '{"version": "15.3.3"}', + 'node_modules/@nrwl/web/package.json': '{"version": "15.3.3"}', + 'node_modules/@nrwl/workspace/package.json': '{"version": "15.3.3"}', + 'node_modules/@rushstack/eslint-patch/package.json': + '{"version": "1.2.0"}', + 'node_modules/@testing-library/react/package.json': + '{"version": "13.4.0"}', + 'node_modules/@types/eslint/package.json': '{"version": "8.4.10"}', + 'node_modules/@types/eslint-scope/package.json': '{"version": "3.7.4"}', + 'node_modules/@types/jest/package.json': '{"version": "28.1.1"}', + 'node_modules/@types/node/package.json': '{"version": "18.11.9"}', + 'node_modules/@types/prettier/package.json': '{"version": "2.7.1"}', + 'node_modules/@types/react/package.json': '{"version": "18.0.25"}', + 'node_modules/@types/react-dom/package.json': '{"version": "18.0.9"}', + 'node_modules/@typescript-eslint/eslint-plugin/package.json': + '{"version": "5.46.1"}', + 'node_modules/@typescript-eslint/parser/package.json': + '{"version": "5.46.1"}', + 'node_modules/@typescript-eslint/scope-manager/package.json': + '{"version": "5.46.1"}', + 'node_modules/@typescript-eslint/type-utils/package.json': + '{"version": "5.46.1"}', + 'node_modules/@typescript-eslint/types/package.json': + '{"version": "5.46.1"}', + 'node_modules/@typescript-eslint/typescript-estree/package.json': + '{"version": "5.46.1"}', + 'node_modules/@typescript-eslint/utils/package.json': + '{"version": "5.46.1"}', + 'node_modules/@typescript-eslint/visitor-keys/package.json': + '{"version": "5.46.1"}', + 'node_modules/babel-jest/package.json': '{"version": "28.1.1"}', + 'node_modules/core-js/package.json': '{"version": "3.26.1"}', + 'node_modules/cypress/package.json': '{"version": "11.2.0"}', + 'node_modules/eslint/package.json': '{"version": "8.15.0"}', + 'node_modules/eslint-config-next/package.json': '{"version": "13.0.0"}', + 'node_modules/eslint-config-prettier/package.json': + '{"version": "8.1.0"}', + 'node_modules/eslint-import-resolver-node/package.json': + '{"version": "0.3.6"}', + 'node_modules/eslint-import-resolver-typescript/package.json': + '{"version": "2.7.1"}', + 'node_modules/eslint-module-utils/package.json': '{"version": "2.7.4"}', + 'node_modules/eslint-plugin-cypress/package.json': + '{"version": "2.12.1"}', + 'node_modules/eslint-plugin-import/package.json': '{"version": "2.26.0"}', + 'node_modules/eslint-plugin-jsx-a11y/package.json': + '{"version": "6.6.1"}', + 'node_modules/eslint-plugin-react/package.json': '{"version": "7.31.11"}', + 'node_modules/eslint-plugin-react-hooks/package.json': + '{"version": "4.6.0"}', + 'node_modules/eslint-scope/package.json': '{"version": "7.1.1"}', + 'node_modules/eslint-utils/package.json': '{"version": "3.0.0"}', + 'node_modules/eslint-visitor-keys/package.json': '{"version": "3.3.0"}', + 'node_modules/jest/package.json': '{"version": "28.1.1"}', + 'node_modules/jest-environment-jsdom/package.json': + '{"version": "28.1.1"}', + 'node_modules/next/package.json': '{"version": "13.0.0"}', + 'node_modules/nx/package.json': '{"version": "15.3.3"}', + 'node_modules/prettier/package.json': '{"version": "2.8.1"}', + 'node_modules/react/package.json': '{"version": "18.2.0"}', + 'node_modules/react-dom/package.json': '{"version": "18.2.0"}', + 'node_modules/react-test-renderer/package.json': '{"version": "18.2.0"}', + 'node_modules/regenerator-runtime/package.json': '{"version": "0.13.7"}', + 'node_modules/ts-jest/package.json': '{"version": "28.0.5"}', + 'node_modules/ts-node/package.json': '{"version": "10.9.1"}', + 'node_modules/tslib/package.json': '{"version": "2.4.1"}', + 'node_modules/typescript/package.json': '{"version": "4.8.4"}', + 'node_modules/.modules.yaml': require(joinPathFragments( + __dirname, + '__fixtures__/nextjs/.modules.yaml' + )).default, + }; + vol.fromJSON(fileSys, '/root'); + + const lockFile = require(joinPathFragments( + __dirname, + '__fixtures__/nextjs/pnpm-lock.yaml' + )).default; + const packageJson = require(joinPathFragments( + __dirname, + '__fixtures__/nextjs/package.json' + )); + const result = parsePnpmLockFile(lockFile, packageJson); + expect(result.root.children.size).toEqual(1143); + expect(result.isValid).toBeTruthy(); + }); + + it('should parse auxiliary packages', async () => { + const fileSys = { + 'node_modules/@eslint/eslintrc/package.json': '{"version": "1.3.3"}', + 'node_modules/@nrwl/devkit/package.json': '{"version": "15.0.13"}', + 'node_modules/eslint/package.json': '{"version": "8.29.0"}', + 'node_modules/eslint-plugin-disable-autofix/package.json': + '{"version": "3.0.0"}', + 'node_modules/eslint-rule-composer/package.json': '{"version": "0.3.0"}', + 'node_modules/eslint-scope/package.json': '{"version": "7.1.1"}', + 'node_modules/eslint-utils/package.json': '{"version": "3.0.0"}', + 'node_modules/eslint-visitor-keys/package.json': '{"version": "3.3.0"}', + 'node_modules/postgres/package.json': '{"version": "3.2.4"}', + 'node_modules/react/package.json': '{"version": "18.2.0"}', + 'node_modules/typescript/package.json': '{"version": "4.8.4"}', + 'node_modules/yargs/package.json': '{"version": "17.6.2"}', + 'node_modules/.modules.yaml': require(joinPathFragments( + __dirname, + '__fixtures__/auxiliary-packages/.modules.yaml' + )).default, + }; + vol.fromJSON(fileSys, '/root'); + + const packageJson = require(joinPathFragments( + __dirname, + '__fixtures__/auxiliary-packages/package.json' + )); + + const lockFile = require(joinPathFragments( + __dirname, + '__fixtures__/auxiliary-packages/pnpm-lock.yaml' + )).default; + const result = parsePnpmLockFile(lockFile, packageJson); + expect(result.root.children.size).toEqual(202); + expect(result.isValid).toBeTruthy(); + + const postgres = result.nodes.get('node_modules/postgres'); + expect(postgres.name).toEqual('postgres'); + expect(postgres.packageName).toBeUndefined(); + expect(postgres.version).toMatch( + '3b1a01b2da3e2fafb1a79006f838eff11a8de3cb' + ); + expect(postgres.edgesIn.values().next().value.versionSpec).toEqual( + 'github.com/charsleysa/postgres/3b1a01b2da3e2fafb1a79006f838eff11a8de3cb' + ); + + const alias = result.nodes.get( + 'node_modules/eslint-plugin-disable-autofix' + ); + expect(alias.name).toEqual('eslint-plugin-disable-autofix'); + expect(alias.packageName).toEqual( + '@mattlewis92/eslint-plugin-disable-autofix' + ); + expect(alias.version).toEqual('3.0.0'); + expect(alias.edgesIn.values().next().value.versionSpec).toEqual( + '/@mattlewis92/eslint-plugin-disable-autofix/3.0.0' + ); + }); +}); diff --git a/packages/nx/src/lock-file/pnpm-v2.ts b/packages/nx/src/lock-file/pnpm-v2.ts new file mode 100644 index 00000000000000..9767d43328cf3a --- /dev/null +++ b/packages/nx/src/lock-file/pnpm-v2.ts @@ -0,0 +1,297 @@ +import { PackageJson } from '../utils/package-json'; +import { + LockFileBuilder, + LockFileGraph, + LockFileNode, +} from './utils/lock-file-builder'; +import { PackageSnapshot, Lockfile } from '@pnpm/lockfile-types'; +import { + loadPnpmHoistedDepsDefinition, + parseAndNormalizePnpmLockfile, +} from './utils/pnpm-helpers'; +import { workspaceRoot } from '../utils/workspace-root'; +import { existsSync, readFileSync } from 'fs'; + +type VersionedPackageSnapshot = PackageSnapshot & { version?: string }; + +export function parsePnpmLockFile( + lockFileContent: string, + packageJson: PackageJson +): LockFileGraph { + const data = parseAndNormalizePnpmLockfile(lockFileContent); + const hoistedDependencies = loadPnpmHoistedDepsDefinition(); + const groupedDependencies = groupDependencies(data); + + const builder = new LockFileBuilder({ + packageJson: data.importers['.'], + lockFileContent, + }); + + // Non-root dependencies that need to be resolved later + // Map[packageName, specKey, PackageSnapshot] + const unresolvedDependencies = new Set< + [string, string, VersionedPackageSnapshot] + >(); + + groupedDependencies.forEach((versionSet, packageName) => { + versionSet.forEach(([specKey, originalKey, packageSnapshot]) => { + // If there is only one version, it is the root version + // otherwise we consult hoistedDependencies to see if it is a root version + let isRootVersion; + if (versionSet.size === 1) { + isRootVersion = true; + } else { + // some hoisted dependencies are in node_modules/{packageName} while others are in node_modules/.pnpm/{packageName}@{version} + const rootVersion = getRootVersion(packageName); + + if (rootVersion) { + isRootVersion = packageSnapshot.version === rootVersion; + } else { + isRootVersion = !!hoistedDependencies[originalKey]; + } + } + + if (isRootVersion) { + const path = `node_modules/${packageName}`; + const node = parseNode(packageName, path, specKey, packageSnapshot); + builder.addNode(path, node); + + builder.addEdgeIn(node, specKey); + if (packageSnapshot.dependencies) { + Object.entries(packageSnapshot.dependencies).forEach( + ([depName, depSpec]) => { + // for pnpm, peerDependencies are always doubled in the dependencies if installed + const isOptional = + packageSnapshot.peerDependenciesMeta?.[depName]?.optional; + builder.addEdgeOut(node, depName, depSpec, isOptional); + } + ); + } + if (packageSnapshot.optionalDependencies) { + Object.entries(packageSnapshot.optionalDependencies).forEach( + ([depName, depSpec]) => { + builder.addEdgeOut(node, depName, depSpec, true); + } + ); + } + // TODO: what does transitivePeerDependencies represents? + } else { + unresolvedDependencies.add([packageName, specKey, packageSnapshot]); + } + }); + }); + + exhaustUnresolvedDependencies(builder, unresolvedDependencies); + + return builder.getLockFileGraph(); +} + +function parseVersionSpec(key: string, packageName: string): string { + if (key.startsWith(`/${packageName}/`)) { + return key.slice(key.lastIndexOf('/') + 1); + } + // for alias or tarball packlage the entire key is the version spec + return key; +} + +function parseNode( + packageName: string, + path: string, + versionSpec: string, + snapshot: PackageSnapshot +): LockFileNode { + const resolution = snapshot.resolution; + + let name = snapshot.name; + // for tarball packages, the version of the snapshot is not accurate + let version = resolution['tarball'] || snapshot.version; + + const node: LockFileNode = { + name: name || packageName, + ...(version && { version }), + path, + ...(resolution && { + integrity: resolution['integrity'] || resolution['tarball'], + }), + }; + + if (!name && versionSpec.startsWith('/')) { + node.packageName = versionSpec.slice(1, versionSpec.lastIndexOf('/')); + } + + return node; +} + +function groupDependencies( + data: Lockfile +): Map> { + // packageName => Set[versionSpec, originalKey, PackageSnapshot] + const groupedDependencies = new Map< + string, + Set<[string, string, VersionedPackageSnapshot]> + >(); + + Object.entries(data.packages).forEach(([key, value]) => { + const packageName = findPackageName(key, value, data); + const versionSpec = parseVersionSpec(key, packageName); + const version = + value.version || + versionSpec.slice(versionSpec.lastIndexOf('/') + 1).split('_')[0]; + const snapshot = { ...value, version }; + + if (!groupedDependencies.has(packageName)) { + groupedDependencies.set( + packageName, + new Set<[string, string, VersionedPackageSnapshot]>().add([ + versionSpec, + key, + snapshot, + ]) + ); + } else { + groupedDependencies.get(packageName).add([versionSpec, key, snapshot]); + } + }); + return groupedDependencies; +} + +function findPackageName( + key: string, + value: PackageSnapshot, + data: Lockfile +): string { + const matchPropValue = (record: Record): string => { + if (!record) { + return undefined; + } + const index = Object.values(record).findIndex((version) => version === key); + if (index > -1) { + return Object.keys(record)[index]; + } + }; + + const matchedDependencyName = ( + snapshot: Partial + ): string => { + return ( + matchPropValue(snapshot.dependencies) || + matchPropValue(snapshot.optionalDependencies) || + matchPropValue(snapshot.peerDependencies) + ); + }; + + if (value.name) { + return value.name; + } + const rootDependencyName = + matchedDependencyName(data.importers['.']) || + // only root importers have devDependencies + matchPropValue(data.importers['.'].devDependencies); + if (rootDependencyName) { + return rootDependencyName; + } + const snapshots = Object.values(data.packages); + for (let i = 0; i < snapshots.length; i++) { + const snapshot = snapshots[i]; + const dependencyName = matchedDependencyName(snapshot); + if (dependencyName) { + return dependencyName; + } + } + return key.startsWith('/') ? key.slice(1, key.lastIndexOf('/')) : key; +} + +// find the top-most parent node that doesn't have the dependency +function findTopParentPath( + builder: LockFileBuilder, + parentNode: LockFileNode, + packageName: string +): string { + let path; + + while (!parentNode.children?.has(packageName)) { + path = parentNode.path; + const searchPath = `node_modules/${parentNode.name}`; + + if (path === searchPath) { + parentNode = builder.nodes.get(''); + } else { + parentNode = builder.nodes.get(path.slice(0, -(searchPath.length + 1))); + } + } + + return path; +} + +function exhaustUnresolvedDependencies( + builder: LockFileBuilder, + unresolvedDependencies: Set<[string, string, PackageSnapshot]> +) { + const initialSize = unresolvedDependencies.size; + unresolvedDependencies.forEach((unresolvedSet) => { + const [packageName, versionSpec, packageSnapshot] = unresolvedSet; + + for (const n of builder.nodes.values()) { + if (n.edgesOut && n.edgesOut.has(packageName)) { + const edge = n.edgesOut.get(packageName); + + if (edge.versionSpec === versionSpec) { + const parentPath = findTopParentPath(builder, n, packageName); + const path = `${parentPath}/node_modules/${packageName}`; + const node = parseNode( + packageName, + path, + versionSpec, + packageSnapshot + ); + builder.addNode(path, node); + if (packageSnapshot.dependencies) { + Object.entries(packageSnapshot.dependencies).forEach( + ([depName, depSpec]) => { + // for pnpm, peerDependencies are always doubled in the dependencies if installed + const isOptional = + packageSnapshot.peerDependenciesMeta?.[depName]?.optional; + builder.addEdgeOut(node, depName, depSpec, isOptional); + } + ); + } + if (packageSnapshot.optionalDependencies) { + Object.entries(packageSnapshot.optionalDependencies).forEach( + ([depName, depSpec]) => { + builder.addEdgeOut(node, depName, depSpec, true); + } + ); + } + unresolvedDependencies.delete(unresolvedSet); + return; + } + } + } + }); + + if (initialSize === unresolvedDependencies.size) { + throw new Error( + `Could not resolve following dependencies\n` + + Array.from(unresolvedDependencies) + .map( + ([packageName, versionSpec]) => `- ${packageName}@${versionSpec}\n` + ) + .join('') + + `Breaking out of the parsing to avoid infinite loop.` + ); + } + if (unresolvedDependencies.size > 0) { + exhaustUnresolvedDependencies(builder, unresolvedDependencies); + } +} + +function getRootVersion(packageName: string): string { + const fullPath = `${workspaceRoot}/node_modules/${packageName}/package.json`; + + if (existsSync(fullPath)) { + const content = readFileSync(fullPath, 'utf-8'); + return JSON.parse(content).version; + } else { + return; + } +} diff --git a/packages/nx/src/lock-file/pnpm.spec.ts b/packages/nx/src/lock-file/pnpm.spec.ts index eebf2697a8a6f7..0574ec2a199184 100644 --- a/packages/nx/src/lock-file/pnpm.spec.ts +++ b/packages/nx/src/lock-file/pnpm.spec.ts @@ -4,7 +4,6 @@ import { joinPathFragments } from '../utils/path'; import { parsePnpmLockFile, prunePnpmLockFile, - prunePnpmLockFileV2, stringifyPnpmLockFile, } from './pnpm'; import { @@ -159,21 +158,6 @@ describe('pnpm LockFile utility', () => { ).toEqual(136); }); - xit('should prune the lock file V2', () => { - const pruned = prunePnpmLockFileV2(lockFile, TypeScriptOnlyPackage); - - expect( - Object.keys( - prunePnpmLockFileV2(lockFile, TypeScriptOnlyPackage).packages - ).length - ).toEqual(1); - expect( - Object.keys( - prunePnpmLockFileV2(lockFile, YargsAndDevkitPackage).packages - ).length - ).toEqual(136); - }); - it('should correctly prune lockfile with single package', () => { expect( stringifyPnpmLockFile( @@ -323,15 +307,15 @@ describe('pnpm LockFile utility', () => { }); describe('next.js generated', () => { - const rootLockFile = readFileSync( - joinPathFragments(__dirname, '__fixtures__/nextjs/pnpm-lock.yaml'), - 'utf-8' - ); + const rootLockFile = require(joinPathFragments( + __dirname, + '__fixtures__/nextjs/pnpm-lock.yaml' + )).default; const projectPackageJson = readJsonFile( joinPathFragments(__dirname, '__fixtures__/nextjs/app/package.json') ); - it('should prune the lockfile correctly', () => { + xit('should prune the lockfile correctly', () => { const parsedLockFile = parsePnpmLockFile(rootLockFile); const prunedLockFile = prunePnpmLockFile( parsedLockFile, diff --git a/packages/nx/src/lock-file/pnpm.ts b/packages/nx/src/lock-file/pnpm.ts index d0ea0af504e08c..827c5ff7a7c3e3 100644 --- a/packages/nx/src/lock-file/pnpm.ts +++ b/packages/nx/src/lock-file/pnpm.ts @@ -9,7 +9,6 @@ import { generatePrunnedHash, hashString } from './utils/hashing'; import { satisfies } from 'semver'; import { PackageJsonDeps } from './utils/pruning'; import { sortObjectByKeys } from '../utils/object-sort'; -import { pruneLockfile } from '@pnpm/prune-lockfile'; type PackageMeta = { key: string; @@ -404,18 +403,6 @@ export function transitiveDependencyPnpmLookup({ return Object.values(versions).find((v) => satisfies(v.version, version)); } -export function prunePnpmLockFileV2( - lockFile: string, - normalizedPackageJson: PackageJsonDeps -): PnpmLockFile { - // TODO: Do these two changes at all times - // TODO: we don't want to support all the possible lockfile versions - const data: PnpmLockFile = convertFromLockfileFileMutable(load(lockFile)); - - // TODO: revert from inline specifiers if needed - return pruneLockfile(data as any, normalizedPackageJson, '.'); -} - /** * Prunes the lock file data based on the list of packages and their transitive dependencies * @@ -622,34 +609,3 @@ function findPackageMeta( // otherwise it's a root dependency return packageMeta.find((m) => !m.key.split('/').pop().includes('_')); } - -/** - * Reverts changes from the "forceSharedFormat" write option if necessary. - */ -function convertFromLockfileFileMutable( - lockfileFile: PnpmLockFile -): PnpmLockFile { - if (typeof lockfileFile?.['importers'] === 'undefined') { - lockfileFile.importers = { - '.': { - specifiers: lockfileFile['specifiers'] ?? {}, - dependenciesMeta: lockfileFile['dependenciesMeta'], - publishDirectory: lockfileFile['publishDirectory'], - }, - }; - delete lockfileFile.specifiers; - for (const depType of DEPENDENCIES_FIELDS) { - if (lockfileFile[depType] != null) { - lockfileFile.importers['.'][depType] = lockfileFile[depType]; - delete lockfileFile[depType]; - } - } - } - return lockfileFile as PnpmLockFile; -} - -export const DEPENDENCIES_FIELDS = [ - 'optionalDependencies', - 'dependencies', - 'devDependencies', -]; diff --git a/packages/nx/src/lock-file/utils/lock-file-builder.ts b/packages/nx/src/lock-file/utils/lock-file-builder.ts index ce0e098982a99e..4a01b82828f078 100644 --- a/packages/nx/src/lock-file/utils/lock-file-builder.ts +++ b/packages/nx/src/lock-file/utils/lock-file-builder.ts @@ -1,9 +1,8 @@ import { PackageJson } from '../../utils/package-json'; -import { generatePrunnedHash, hashString } from './hashing'; +import { hashString } from './hashing'; export type LockFileGraph = { hash: string; - packageJson: PackageJson; root: LockFileNode; nodes: Map; isValid: boolean; @@ -17,7 +16,7 @@ export type LockFileNode = { resolved?: string; integrity?: string; edgesOut?: Map; - children?: Map; + children?: Map; // used for tracking hoisting edgesIn?: Set; isProjectRoot?: true; }; @@ -34,7 +33,6 @@ export type LockFileEdge = { error?: 'MISSING_TARGET' | 'MISSING_SOURCE'; }; -// TODO 1: Check Arborist for links? Perhaps those should be workspace files /** * A builder for a lock file graph. * @@ -45,16 +43,18 @@ export type LockFileEdge = { export class LockFileBuilder { readonly root: LockFileNode; readonly nodes: Map; - readonly packageJson: PackageJson; private hash: string; constructor(input: LockFileGraph); - constructor(input: { packageJson: PackageJson; lockFileContent: string }); + constructor(input: { + packageJson: Partial; + lockFileContent: string; + }); constructor( - input: { packageJson: PackageJson; lockFileContent: string } | LockFileGraph + input: + | { packageJson: Partial; lockFileContent: string } + | LockFileGraph ) { - this.packageJson = input.packageJson; - if ('root' in input) { const { root, hash, nodes } = input; this.root = root; @@ -70,7 +70,7 @@ export class LockFileBuilder { } } - private makeRootNode(packageJson: PackageJson): LockFileNode { + private makeRootNode(packageJson: Partial): LockFileNode { const { name, version, @@ -412,7 +412,9 @@ export class LockFileBuilder { if (edge.error) { isValid = false; console.warn( - `Edge OUT ${edge.name} from ${edge.from?.name} to ${edge.to?.name} has error ${edge.error}` + `Outgoing edge "${edge.name}: ${edge.versionSpec}" from ${ + edge.from?.name + } to ${edge.to?.name || '-'} has error: ${edge.error}` ); } }); @@ -422,7 +424,9 @@ export class LockFileBuilder { if (edge.error) { isValid = false; console.warn( - `Edge IN ${edge.name} from ${edge.from?.name} to ${edge.to?.name} has error ${edge.error}` + `Incoming edge "${edge.name}: ${edge.versionSpec}" from ${ + edge.from?.name || '-' + } to ${edge.to?.name} has error: ${edge.error}` ); } }); @@ -435,25 +439,20 @@ export class LockFileBuilder { return isValid; } - private calculateHash(): string { - return generatePrunnedHash(this.hash, this.packageJson); - } - getLockFileGraph(): LockFileGraph { let isValid = true; - // if (!this.isGraphConsistent()) { - // console.error( - // `Graph is not consistent. Please report this issue via github` - // ); - // isValid = false; - // } + if (!this.isGraphConsistent()) { + console.error( + `Graph is not consistent. Please report this issue via github` + ); + isValid = false; + } return { root: this.root, isValid, - packageJson: this.packageJson, nodes: this.nodes, - hash: this.hash || this.calculateHash(), + hash: this.hash, }; } } diff --git a/packages/nx/src/lock-file/utils/pnpm-helpers.ts b/packages/nx/src/lock-file/utils/pnpm-helpers.ts new file mode 100644 index 00000000000000..5feabb7ef725b6 --- /dev/null +++ b/packages/nx/src/lock-file/utils/pnpm-helpers.ts @@ -0,0 +1,193 @@ +import { + Lockfile, + ProjectSnapshot, + ResolvedDependencies, +} from '@pnpm/lockfile-types'; +import { dump, load } from '@zkochan/js-yaml'; +import { existsSync, readFileSync } from 'fs'; +import { workspaceRoot } from '../../utils/workspace-root'; + +export function parseAndNormalizePnpmLockfile(content: string): Lockfile { + const lockFileData = load(content); + return revertFromInlineSpecifiersFormatIfNecessary( + convertFromLockfileFileMutable(lockFileData) + ); +} + +export function loadPnpmHoistedDepsDefinition() { + const fullPath = `${workspaceRoot}/node_modules/.modules.yaml`; + + if (existsSync(fullPath)) { + const content = readFileSync(fullPath, 'utf-8'); + return load(content)?.hoistedDependencies; + } else { + throw new Error(`Could not find ".modules.yaml" at "${fullPath}"`); + } +} + +/** + * THE FOLLOWING CODE IS COPIED FROM @pnpm/lockfile-file for convenience + */ + +function isMutableLockfile( + lockfileFile: + | (Omit & + Partial & + Partial>) + | InlineSpecifiersLockfile + | Lockfile +): lockfileFile is Omit & + Partial & + Partial> { + return typeof lockfileFile['importers'] === 'undefined'; +} + +/** + * Reverts changes from the "forceSharedFormat" write option if necessary. + */ +function convertFromLockfileFileMutable( + lockfileFile: + | (Omit & + Partial & + Partial>) + | InlineSpecifiersLockfile + | Lockfile +): InlineSpecifiersLockfile | Lockfile { + if (isMutableLockfile(lockfileFile)) { + lockfileFile.importers = { + '.': { + specifiers: lockfileFile['specifiers'] ?? {}, + ...(lockfileFile['dependenciesMeta'] && { + dependenciesMeta: lockfileFile['dependenciesMeta'], + }), + ...(lockfileFile['publishDirectory'] && { + publishDirectory: lockfileFile['publishDirectory'], + }), + }, + }; + delete lockfileFile.specifiers; + for (const depType of DEPENDENCIES_FIELDS) { + if (lockfileFile[depType] != null) { + lockfileFile.importers['.'][depType] = lockfileFile[depType]; + delete lockfileFile[depType]; + } + } + return lockfileFile as Lockfile; + } else { + return lockfileFile; + } +} + +interface InlineSpecifiersLockfile + extends Omit { + lockfileVersion: string; + importers: Record; +} + +interface InlineSpecifiersProjectSnapshot { + dependencies?: InlineSpecifiersResolvedDependencies; + devDependencies?: InlineSpecifiersResolvedDependencies; + optionalDependencies?: InlineSpecifiersResolvedDependencies; + dependenciesMeta?: ProjectSnapshot['dependenciesMeta']; +} + +interface InlineSpecifiersResolvedDependencies { + [depName: string]: SpecifierAndResolution; +} + +interface SpecifierAndResolution { + specifier: string; + version: string; +} + +const INLINE_SPECIFIERS_FORMAT_LOCKFILE_VERSION_SUFFIX = '-inlineSpecifiers'; + +function isInlineSpecifierLockfile( + lockfile: InlineSpecifiersLockfile | Lockfile +): lockfile is InlineSpecifiersLockfile { + return ( + typeof lockfile.lockfileVersion === 'string' && + lockfile.lockfileVersion.endsWith( + INLINE_SPECIFIERS_FORMAT_LOCKFILE_VERSION_SUFFIX + ) + ); +} + +function revertFromInlineSpecifiersFormatIfNecessary( + lockFile: InlineSpecifiersLockfile | Lockfile +): Lockfile { + if (isInlineSpecifierLockfile(lockFile)) { + const { lockfileVersion, importers, ...rest } = lockFile; + + const originalVersionStr = lockfileVersion.replace( + INLINE_SPECIFIERS_FORMAT_LOCKFILE_VERSION_SUFFIX, + '' + ); + const originalVersion = Number(originalVersionStr); + if (isNaN(originalVersion)) { + throw new Error( + `Unable to revert lockfile from inline specifiers format. Invalid version parsed: ${originalVersionStr}` + ); + } + + const mappedImporters: Record = {}; + Object.entries(importers).forEach(([key, value]) => { + mappedImporters[key] = revertProjectSnapshot(value); + }); + + return { + ...rest, + lockfileVersion: originalVersion, + importers: mappedImporters, + }; + } + return lockFile; +} + +function revertProjectSnapshot( + from: InlineSpecifiersProjectSnapshot +): ProjectSnapshot { + const specifiers: ResolvedDependencies = {}; + + function moveSpecifiers( + from: InlineSpecifiersResolvedDependencies + ): ResolvedDependencies { + const resolvedDependencies: ResolvedDependencies = {}; + for (const [depName, { specifier, version }] of Object.entries(from)) { + const existingValue = specifiers[depName]; + if (existingValue != null && existingValue !== specifier) { + throw new Error( + `Project snapshot lists the same dependency more than once with conflicting versions: ${depName}` + ); + } + + specifiers[depName] = specifier; + resolvedDependencies[depName] = version; + } + return resolvedDependencies; + } + + const dependencies: ResolvedDependencies = from.dependencies + ? moveSpecifiers(from.dependencies) + : null; + const devDependencies: ResolvedDependencies = from.devDependencies + ? moveSpecifiers(from.devDependencies) + : null; + const optionalDependencies: ResolvedDependencies = from.optionalDependencies + ? moveSpecifiers(from.optionalDependencies) + : null; + + return { + ...from, + specifiers, + dependencies, + devDependencies, + optionalDependencies, + }; +} + +export const DEPENDENCIES_FIELDS = [ + 'optionalDependencies', + 'dependencies', + 'devDependencies', +]; diff --git a/packages/nx/src/lock-file/yarn-v2.spec.ts b/packages/nx/src/lock-file/yarn-v2.spec.ts index 2d04e6b5243dab..6fbfc4646c04c9 100644 --- a/packages/nx/src/lock-file/yarn-v2.spec.ts +++ b/packages/nx/src/lock-file/yarn-v2.spec.ts @@ -174,6 +174,28 @@ describe('yarn LockFile utility', () => { expect(resultClassic.root.children.size).toEqual(124); expect(resultClassic.isValid).toBeTruthy(); + const classicPostgres = resultClassic.nodes.get('node_modules/postgres'); + expect(classicPostgres.name).toEqual('postgres'); + expect(classicPostgres.packageName).toBeUndefined(); + expect(classicPostgres.version).toMatch( + '3b1a01b2da3e2fafb1a79006f838eff11a8de3cb' + ); + expect(classicPostgres.edgesIn.values().next().value.versionSpec).toEqual( + 'charsleysa/postgres#fix-errors-compiled' + ); + + const classicAlias = resultClassic.nodes.get( + 'node_modules/eslint-plugin-disable-autofix' + ); + expect(classicAlias.name).toEqual('eslint-plugin-disable-autofix'); + expect(classicAlias.packageName).toEqual( + '@mattlewis92/eslint-plugin-disable-autofix' + ); + expect(classicAlias.version).toEqual('3.0.0'); + expect(classicAlias.edgesIn.values().next().value.versionSpec).toEqual( + 'npm:@mattlewis92/eslint-plugin-disable-autofix@3.0.0' + ); + const berryLockFile = require(joinPathFragments( __dirname, '__fixtures__/auxiliary-packages/yarn-berry.lock' @@ -181,5 +203,27 @@ describe('yarn LockFile utility', () => { const resultBerry = parseYarnLockFile(berryLockFile, packageJson); expect(resultBerry.root.children.size).toEqual(124); expect(resultBerry.isValid).toBeTruthy(); + + const berryPostgres = resultBerry.nodes.get('node_modules/postgres'); + expect(berryPostgres.name).toEqual('postgres'); + expect(berryPostgres.packageName).toBeUndefined(); + expect(berryPostgres.version).toMatch( + '3b1a01b2da3e2fafb1a79006f838eff11a8de3cb' + ); + expect(berryPostgres.edgesIn.values().next().value.versionSpec).toEqual( + 'charsleysa/postgres#fix-errors-compiled' + ); + + const berryAlias = resultBerry.nodes.get( + 'node_modules/eslint-plugin-disable-autofix' + ); + expect(berryAlias.name).toEqual('eslint-plugin-disable-autofix'); + expect(berryAlias.packageName).toEqual( + '@mattlewis92/eslint-plugin-disable-autofix' + ); + expect(berryAlias.version).toEqual('3.0.0'); + expect(berryAlias.edgesIn.values().next().value.versionSpec).toEqual( + 'npm:@mattlewis92/eslint-plugin-disable-autofix@3.0.0' + ); }); }); diff --git a/packages/nx/src/lock-file/yarn-v2.ts b/packages/nx/src/lock-file/yarn-v2.ts index ff2c67bffc5815..efb464f63f806a 100644 --- a/packages/nx/src/lock-file/yarn-v2.ts +++ b/packages/nx/src/lock-file/yarn-v2.ts @@ -240,13 +240,19 @@ function parseClassicNode( versionSpec: string, value: YarnDependency ): LockFileNode { - const { version, resolved, integrity } = value; + const { resolved, integrity } = value; // for alias packages, name would not match packageName const name = versionSpec.startsWith('npm:') ? versionSpec.slice(4, versionSpec.lastIndexOf('@')) : packageName; + let version = value.version; + // for tarball packages version might not exist or be useless + if (!version || (resolved && !resolved.includes(version))) { + version = resolved; + } + const node: LockFileNode = { name: packageName, ...(name !== packageName && { packageName: name }), @@ -264,11 +270,17 @@ function parseBerryNode( path: string, value: YarnDependency ): LockFileNode { - const { version, resolution, checksum } = value; + const { resolution, checksum } = value; // for alias packages, name would not match packageName const name = resolution.slice(0, resolution.indexOf('@', 1)); + let version = value.version; + // for tarball packages version might not exist or be useless + if (!version || (resolution && !resolution.includes(version))) { + version = resolution.slice(resolution.indexOf('@', 1) + 1); + } + const node: LockFileNode = { name: packageName, ...(name !== packageName && { packageName: name }), @@ -281,18 +293,6 @@ function parseBerryNode( return node; } -/** - * A -> B@v1 - * B@v1 - * C -> B@v2 - * D -> E@v2 -> B@v3 - * E@v1 - * - * D - * E@v2 - * B@v3 - */ - function exhaustUnresolvedDependencies( builder: LockFileBuilder, { @@ -347,7 +347,7 @@ function exhaustUnresolvedDependencies( } } -function getRootVersion(packageName: string): boolean { +function getRootVersion(packageName: string): string { const fullPath = `${workspaceRoot}/node_modules/${packageName}/package.json`; if (existsSync(fullPath)) { diff --git a/packages/nx/src/lock-file/yarn.spec.ts b/packages/nx/src/lock-file/yarn.spec.ts index 15b32b2d39e1fa..8139d69d513a55 100644 --- a/packages/nx/src/lock-file/yarn.spec.ts +++ b/packages/nx/src/lock-file/yarn.spec.ts @@ -289,10 +289,10 @@ describe('yarn LockFile utility', () => { }); describe('next.js generated', () => { - const rootLockFile = readFileSync( - joinPathFragments(__dirname, '__fixtures__/nextjs/yarn.lock'), - 'utf-8' - ); + const rootLockFile = require(joinPathFragments( + __dirname, + '__fixtures__/nextjs/yarn.lock' + )).default; const projectPackageJson = readJsonFile( joinPathFragments(__dirname, '__fixtures__/nextjs/app/package.json') ); diff --git a/packages/nx/tsconfig.lib.json b/packages/nx/tsconfig.lib.json index 04759bf1f25736..98c0126c0c011b 100644 --- a/packages/nx/tsconfig.lib.json +++ b/packages/nx/tsconfig.lib.json @@ -12,5 +12,8 @@ "jest.config.ts", "**/__fixtures__/*.*" ], - "include": ["**/*.ts"] + "include": [ + "**/*.ts", + "src/lock-file/__fixtures__/auxiliary-packages/.modules.yaml.ts" + ] } diff --git a/yarn.lock b/yarn.lock index 24f6da75e33f04..a16207a9d2dc3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4051,45 +4051,6 @@ treeverse "^2.0.0" walk-up-path "^1.0.0" -"@npmcli/arborist@^6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.1.5.tgz#ff816f94574c69115f1ae708af4b101c7518296f" - integrity sha512-bdnvRL1Js6uz+CDf0NdG5dIbuwYzHwzTV4/WS16JCDdfstjsYSa8J69bYHf9osUwza9zzg2HI/C5SSmeMN+yFg== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.0" - "@npmcli/installed-package-contents" "^2.0.0" - "@npmcli/map-workspaces" "^3.0.0" - "@npmcli/metavuln-calculator" "^5.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^3.0.0" - "@npmcli/query" "^3.0.0" - "@npmcli/run-script" "^6.0.0" - bin-links "^4.0.1" - cacache "^17.0.3" - common-ancestor-path "^1.0.1" - hosted-git-info "^6.1.1" - json-parse-even-better-errors "^3.0.0" - json-stringify-nice "^1.1.4" - minimatch "^5.1.1" - nopt "^7.0.0" - npm-install-checks "^6.0.0" - npm-package-arg "^10.1.0" - npm-pick-manifest "^8.0.1" - npm-registry-fetch "^14.0.3" - npmlog "^7.0.1" - pacote "^15.0.7" - parse-conflict-json "^3.0.0" - proc-log "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^3.0.1" - semver "^7.3.7" - ssri "^10.0.1" - treeverse "^3.0.0" - walk-up-path "^1.0.0" - "@npmcli/fs@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" @@ -4158,7 +4119,7 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/installed-package-contents@^2.0.0", "@npmcli/installed-package-contents@^2.0.1": +"@npmcli/installed-package-contents@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz#3cad3141c95613426820128757a3549bef1b346b" integrity sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA== @@ -4176,16 +4137,6 @@ minimatch "^5.0.1" read-package-json-fast "^2.0.3" -"@npmcli/map-workspaces@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.1.tgz#558941a715361ef51d6ad990cacb1af8990a7136" - integrity sha512-QXwE2p5zRTP6X8Irgf/swYwwdQEalSA1GBm0IGE/86R5EJbUGgKMOP0kOjaJWJxaWPkSqyhM8N50SPxFHTfkNg== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^3.0.0" - "@npmcli/metavuln-calculator@^3.0.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" @@ -4196,16 +4147,6 @@ pacote "^13.0.3" semver "^7.3.5" -"@npmcli/metavuln-calculator@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.0.tgz#917c3be49ebed0b424b07f38060b929127e4c499" - integrity sha512-BBFQx4M12wiEuVwCgtX/Depx0B/+NHMwDWOlXT41/Pdy5W/1Fenk+hibUlMSrFWwASbX+fY90UbILAEIYH02/A== - dependencies: - cacache "^17.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^15.0.0" - semver "^7.3.5" - "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -4235,11 +4176,6 @@ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - "@npmcli/node-gyp@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" @@ -4257,13 +4193,6 @@ dependencies: json-parse-even-better-errors "^2.3.1" -"@npmcli/package-json@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.0.0.tgz#c9219a197e1be8dbf43c4ef8767a72277c0533b6" - integrity sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg== - dependencies: - json-parse-even-better-errors "^3.0.0" - "@npmcli/promise-spawn@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" @@ -4278,13 +4207,6 @@ dependencies: which "^3.0.0" -"@npmcli/query@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" - integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== - dependencies: - postcss-selector-parser "^6.0.10" - "@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": version "4.2.1" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" @@ -4805,6 +4727,18 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@pnpm/lockfile-types@^4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@pnpm/lockfile-types/-/lockfile-types-4.3.6.tgz#9d81aa3547a57af9e229572d4763e48268637a83" + integrity sha512-5vvdV3tEVOCzzeGv2FXK4590qPUVpZ+5gdqCawFuiNTJavx+4rmmY4aDUjdVXUcKGwqkIBPVKe/SNUBA3A2rtg== + dependencies: + "@pnpm/types" "8.10.0" + +"@pnpm/types@8.10.0": + version "8.10.0" + resolved "https://registry.yarnpkg.com/@pnpm/types/-/types-8.10.0.tgz#29ebd095bb0653e5eab8283799c9f59fb6cf216f" + integrity sha512-A4pcNNvFJdkMXArEjTCOIYNL2VxD4uBynWZ6cBIELXb5qJ0tUzwKsaSz4J953I0rQFqnsFpUYqaWIquI10W1sw== + "@popperjs/core@^2.0.0": version "2.11.6" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" @@ -7851,18 +7785,6 @@ abbrev@1, abbrev@^1.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - absolute-path@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" @@ -8229,14 +8151,6 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" - integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== - dependencies: - delegates "^1.0.0" - readable-stream "^4.1.0" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -8983,16 +8897,6 @@ bin-links@^3.0.0: rimraf "^3.0.0" write-file-atomic "^4.0.0" -bin-links@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" - integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -9402,14 +9306,6 @@ buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -9590,25 +9486,6 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -cacache@^17.0.3: - version "17.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.4.tgz#5023ed892ba8843e3b7361c26d0ada37e146290c" - integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^8.0.1" - lru-cache "^7.7.1" - minipass "^4.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -10082,11 +9959,6 @@ cmd-shim@^5.0.0: dependencies: mkdirp-infer-owner "^2.0.0" -cmd-shim@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" - integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -12660,11 +12532,6 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter-asyncresource@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz#734ff2e44bf448e627f7748f905d6bdd57bdb65b" @@ -12680,7 +12547,7 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0, events@^3.2.0, events@^3.3.0: +events@^3.0.0, events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -13479,13 +13346,6 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" -fs-minipass@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.0.tgz#8e6ed2b4e1ba44077cae69971393068a1bbeeed6" - integrity sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA== - dependencies: - minipass "^4.0.0" - fs-monkey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" @@ -13583,20 +13443,6 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -gauge@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.0.tgz#e270ca9d97dae84abf64e5277ef1ebddc7dd1e2f" - integrity sha512-0s5T5eciEG7Q3ugkxAkFtaDhrrhXsCRivA5y8C9WMHWuI8UlMOJg7+Iwf7Mccii+Dfs3H5jHepU0joPVyQU0Lw== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - generic-names@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" @@ -14333,7 +14179,7 @@ hosted-git-info@^5.0.0: dependencies: lru-cache "^7.5.1" -hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: +hosted-git-info@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== @@ -17591,13 +17437,6 @@ minimatch@5.1.0, minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" - integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== - dependencies: - brace-expansion "^2.0.1" - minimatch@~3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" @@ -17684,13 +17523,6 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" - integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== - dependencies: - yallist "^4.0.0" - minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -18137,13 +17969,6 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" -nopt@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.0.0.tgz#09220f930c072109c98ef8aaf39e1d5f0ff9b0d4" - integrity sha512-e6Qw1rcrGoSxEH0hQ4GBSdUjkMOtXGhGFXdNT/3ZR0S37eR9DMj5za3dEDWE6o1T3/DP8ZOsPP4MIiky0c3QeA== - dependencies: - abbrev "^2.0.0" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -18285,16 +18110,6 @@ npm-package-arg@^10.0.0: semver "^7.3.5" validate-npm-package-name "^5.0.0" -npm-package-arg@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" - integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== - dependencies: - hosted-git-info "^6.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - npm-packlist@^5.1.0, npm-packlist@^5.1.1: version "5.1.3" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" @@ -18312,7 +18127,7 @@ npm-packlist@^7.0.0: dependencies: ignore-walk "^5.0.1" -npm-pick-manifest@8.0.1, npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: +npm-pick-manifest@8.0.1, npm-pick-manifest@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== @@ -18358,19 +18173,6 @@ npm-registry-fetch@^14.0.0: npm-package-arg "^10.0.0" proc-log "^3.0.0" -npm-registry-fetch@^14.0.3: - version "14.0.3" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" - integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== - dependencies: - make-fetch-happen "^11.0.0" - minipass "^4.0.0" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^10.0.0" - proc-log "^3.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -18405,16 +18207,6 @@ npmlog@^6.0.0, npmlog@^6.0.2: gauge "^4.0.3" set-blocking "^2.0.0" -npmlog@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" - integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== - dependencies: - are-we-there-yet "^4.0.0" - console-control-strings "^1.1.0" - gauge "^5.0.0" - set-blocking "^2.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -19020,29 +18812,6 @@ pacote@^13.0.3, pacote@^13.6.1: ssri "^9.0.0" tar "^6.1.11" -pacote@^15.0.0, pacote@^15.0.7: - version "15.0.8" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.0.8.tgz#8a1cb1e0207f9f3c74894feaa716aaa9e35f890e" - integrity sha512-UlcumB/XS6xyyIMwg/WwMAyUmga+RivB5KgkRwA1hZNtrx+0Bt41KxHCvg1kr0pZ/ZeD8qjhW4fph6VaYRCbLw== - dependencies: - "@npmcli/git" "^4.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^6.0.1" - "@npmcli/run-script" "^6.0.0" - cacache "^17.0.0" - fs-minipass "^3.0.0" - minipass "^4.0.0" - npm-package-arg "^10.0.0" - npm-packlist "^7.0.0" - npm-pick-manifest "^8.0.0" - npm-registry-fetch "^14.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^6.0.0" - read-package-json-fast "^3.0.0" - ssri "^10.0.0" - tar "^6.1.11" - pako@^1.0.3, pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -19092,15 +18861,6 @@ parse-conflict-json@^2.0.1: just-diff "^5.0.1" just-diff-apply "^5.2.0" -parse-conflict-json@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.0.tgz#eb266cbeeb66e73c3e92806da4d4ace3b798acff" - integrity sha512-ipcKLCmZbAj7n+h9qQREvdvsBUMPetGk9mM4ljCvs5inZznAlkHPk5XPc7ROtknUKw7kO6Jnz10Y3Eec7tky/A== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -20800,11 +20560,6 @@ read-cmd-shim@^3.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== -read-cmd-shim@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" @@ -20821,14 +20576,6 @@ read-package-json-fast@^3.0.0: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" -read-package-json-fast@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - read-package-json@^5.0.0, read-package-json@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" @@ -20931,16 +20678,6 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.2.0.tgz#a7ef523d3b39e4962b0db1a1af22777b10eeca46" - integrity sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - readable-web-to-node-stream@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" @@ -22499,13 +22236,6 @@ ssri@^10.0.0: dependencies: minipass "^3.1.1" -ssri@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.1.tgz#c61f85894bbc6929fc3746f05e31cf5b44c030d5" - integrity sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw== - dependencies: - minipass "^4.0.0" - ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" @@ -23518,11 +23248,6 @@ treeverse@^2.0.0: resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -25028,14 +24753,6 @@ write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -write-file-atomic@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.0.tgz#54303f117e109bf3d540261125c8ea5a7320fab0" - integrity sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a"