diff --git a/.circleci/config.yml b/.circleci/config.yml index 65cb446c3f999e..18e8974cd0b787 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -184,12 +184,12 @@ jobs: command: | pids=() - # npx nx affected --target=lint --base=$NX_BASE --head=$NX_HEAD --parallel --max-parallel=3 + # npx nx affected --target=lint --base=$NX_BASE --head=$NX_HEAD --parallel=3 (yarn nx workspace-lint; echo "Linting is temporarily disabled until ESLint v8 support is published") & pids+=($!) - yarn nx affected --target=test --base=$NX_BASE --head=$NX_HEAD --parallel --max-parallel=3 & + yarn nx affected --target=test --base=$NX_BASE --head=$NX_HEAD --parallel=1 & pids+=($!) - yarn nx affected --target=build --base=$NX_BASE --head=$NX_HEAD --parallel --max-parallel=3 & + yarn nx affected --target=build --base=$NX_BASE --head=$NX_HEAD --parallel=3 & pids+=($!) for pid in "${pids[@]}"; do wait "$pid" diff --git a/.github/ISSUE_TEMPLATE/3-documentation.md b/.github/ISSUE_TEMPLATE/3-documentation.md new file mode 100644 index 00000000000000..9e040500d2bd01 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3-documentation.md @@ -0,0 +1,26 @@ +--- +name: "📖 Documentation issue" +about: Help improve our docs. +labels: "type: docs" +--- +### Documentation issue + + + +- [ ] Reporting a typo +- [ ] Reporting a documentation bug +- [ ] Documentation improvement +- [ ] Documentation feedback + + + +### Is there a specific documentation page you are reporting? + +Enter the URL or documentation section here. + +### Additional context or description + +Provide any additional details here as needed. diff --git a/dep-graph/client/src/app/machines/dep-graph.spec.ts b/dep-graph/client/src/app/machines/dep-graph.spec.ts index 8a786672703838..ae639c47609a2d 100644 --- a/dep-graph/client/src/app/machines/dep-graph.spec.ts +++ b/dep-graph/client/src/app/machines/dep-graph.spec.ts @@ -1,9 +1,5 @@ // nx-ignore-next-line -import { - DependencyType, - ProjectGraphDependency, - ProjectGraphNode, -} from '@nrwl/devkit'; +import type { ProjectGraphDependency, ProjectGraphNode } from '@nrwl/devkit'; import { depGraphMachine } from './dep-graph.machine'; import { interpret } from 'xstate'; @@ -55,38 +51,38 @@ export const mockProjects: ProjectGraphNode[] = [ export const mockDependencies: Record = { app1: [ { - type: DependencyType.static, + type: 'static', source: 'app1', target: 'auth-lib', }, { - type: DependencyType.static, + type: 'static', source: 'app1', target: 'feature-lib1', }, ], app2: [ { - type: DependencyType.static, + type: 'static', source: 'app2', target: 'auth-lib', }, { - type: DependencyType.static, + type: 'static', source: 'app2', target: 'feature-lib2', }, ], 'feature-lib1': [ { - type: DependencyType.static, + type: 'static', source: 'feature-lib1', target: 'ui-lib', }, ], 'feature-lib2': [ { - type: DependencyType.static, + type: 'static', source: 'feature-lib2', target: 'ui-lib', }, diff --git a/dep-graph/client/src/app/mock-project-graph-service.ts b/dep-graph/client/src/app/mock-project-graph-service.ts index 5ab60e9ac71387..7911fd65747302 100644 --- a/dep-graph/client/src/app/mock-project-graph-service.ts +++ b/dep-graph/client/src/app/mock-project-graph-service.ts @@ -33,7 +33,7 @@ export class MockProjectGraphService implements ProjectGraphService { { source: 'existing-app-1', target: 'existing-lib-1', - type: 'static' as any, + type: 'statis', }, ], 'existing-lib-1': [], @@ -82,7 +82,7 @@ export class MockProjectGraphService implements ProjectGraphService { { source: newProject.name, target: targetDependency.name, - type: 'static' as any, + type: 'static', }, ]; diff --git a/dep-graph/client/src/app/styles-graph/edges.ts b/dep-graph/client/src/app/styles-graph/edges.ts index d0ffaf680e97e8..6b7804fbf12324 100644 --- a/dep-graph/client/src/app/styles-graph/edges.ts +++ b/dep-graph/client/src/app/styles-graph/edges.ts @@ -41,22 +41,9 @@ const dynamicEdges: Stylesheet = { }, }; -const typeOnlyEdges: Stylesheet = { - selector: 'edge.typeOnly', - style: { - label: 'type only', - 'font-size': '16px', - 'edge-text-rotation': 'autorotate', - 'curve-style': 'unbundled-bezier', - 'line-dash-pattern': [5, 5], - 'line-style': 'dashed', - }, -}; - export const edgeStyles: Stylesheet[] = [ allEdges, affectedEdges, implicitEdges, dynamicEdges, - typeOnlyEdges, ]; diff --git a/dep-graph/client/src/assets/graphs/nx-examples.json b/dep-graph/client/src/assets/graphs/nx-examples.json index 3895d0c0047381..6cda6243038c65 100644 --- a/dep-graph/client/src/assets/graphs/nx-examples.json +++ b/dep-graph/client/src/assets/graphs/nx-examples.json @@ -185,7 +185,7 @@ { "source": "shared-product-data", "target": "shared-product-types", - "type": "typeOnly" + "type": "static" } ], "products-home-page": [ diff --git a/docs/generated/api-cypress/executors/cypress.md b/docs/generated/api-cypress/executors/cypress.md index b5543ab47b0708..de1d9547f2a34b 100644 --- a/docs/generated/api-cypress/executors/cypress.md +++ b/docs/generated/api-cypress/executors/cypress.md @@ -31,7 +31,7 @@ The browser to run tests in. ### ciBuildId -Type: `string` +Type: `string | number ` A unique identifier for a run to enable grouping or parallelization. diff --git a/docs/generated/api-nx-devkit/index.md b/docs/generated/api-nx-devkit/index.md index 151481ec68c247..c2abb4f5b4e524 100644 --- a/docs/generated/api-nx-devkit/index.md +++ b/docs/generated/api-nx-devkit/index.md @@ -13,139 +13,138 @@ It only uses language primitives and immutable objects ### Project Graph Enumerations -- [DependencyType](../../generated/nx-devkit/index#dependencytype) +- [DependencyType](../../nx-devkit/index#dependencytype) ### Utils Enumerations -- [ChangeType](../../generated/nx-devkit/index#changetype) +- [ChangeType](../../nx-devkit/index#changetype) ### Project Graph Classes -- [ProjectGraphBuilder](../../generated/nx-devkit/index#projectgraphbuilder) +- [ProjectGraphBuilder](../../nx-devkit/index#projectgraphbuilder) ### Commands Interfaces -- [Target](../../generated/nx-devkit/index#target) +- [Target](../../nx-devkit/index#target) ### Other Interfaces -- [NxPlugin](../../generated/nx-devkit/index#nxplugin) +- [NxPlugin](../../nx-devkit/index#nxplugin) ### Project Graph Interfaces -- [FileData](../../generated/nx-devkit/index#filedata) -- [ProjectFileMap](../../generated/nx-devkit/index#projectfilemap) -- [ProjectGraph](../../generated/nx-devkit/index#projectgraph) -- [ProjectGraphBuilderExplicitDependency](../../generated/nx-devkit/index#projectgraphbuilderexplicitdependency) -- [ProjectGraphDependency](../../generated/nx-devkit/index#projectgraphdependency) -- [ProjectGraphExternalNode](../../generated/nx-devkit/index#projectgraphexternalnode) -- [ProjectGraphProcessorContext](../../generated/nx-devkit/index#projectgraphprocessorcontext) -- [ProjectGraphProjectNode](../../generated/nx-devkit/index#projectgraphprojectnode) +- [FileData](../../nx-devkit/index#filedata) +- [ProjectFileMap](../../nx-devkit/index#projectfilemap) +- [ProjectGraph](../../nx-devkit/index#projectgraph) +- [ProjectGraphDependency](../../nx-devkit/index#projectgraphdependency) +- [ProjectGraphExternalNode](../../nx-devkit/index#projectgraphexternalnode) +- [ProjectGraphProcessorContext](../../nx-devkit/index#projectgraphprocessorcontext) +- [ProjectGraphProjectNode](../../nx-devkit/index#projectgraphprojectnode) ### Tree Interfaces -- [FileChange](../../generated/nx-devkit/index#filechange) -- [Tree](../../generated/nx-devkit/index#tree) +- [FileChange](../../nx-devkit/index#filechange) +- [Tree](../../nx-devkit/index#tree) ### Utils Interfaces -- [JsonParseOptions](../../generated/nx-devkit/index#jsonparseoptions) -- [JsonSerializeOptions](../../generated/nx-devkit/index#jsonserializeoptions) -- [StringDeletion](../../generated/nx-devkit/index#stringdeletion) -- [StringInsertion](../../generated/nx-devkit/index#stringinsertion) +- [JsonParseOptions](../../nx-devkit/index#jsonparseoptions) +- [JsonSerializeOptions](../../nx-devkit/index#jsonserializeoptions) +- [StringDeletion](../../nx-devkit/index#stringdeletion) +- [StringInsertion](../../nx-devkit/index#stringinsertion) ### Workspace Interfaces -- [ExecutorContext](../../generated/nx-devkit/index#executorcontext) -- [ImplicitJsonSubsetDependency](../../generated/nx-devkit/index#implicitjsonsubsetdependency) -- [NxAffectedConfig](../../generated/nx-devkit/index#nxaffectedconfig) -- [NxJsonConfiguration](../../generated/nx-devkit/index#nxjsonconfiguration) -- [NxJsonProjectConfiguration](../../generated/nx-devkit/index#nxjsonprojectconfiguration) -- [ProjectConfiguration](../../generated/nx-devkit/index#projectconfiguration) -- [TargetConfiguration](../../generated/nx-devkit/index#targetconfiguration) -- [TargetDependencyConfig](../../generated/nx-devkit/index#targetdependencyconfig) -- [Task](../../generated/nx-devkit/index#task) -- [TaskGraph](../../generated/nx-devkit/index#taskgraph) -- [Workspace](../../generated/nx-devkit/index#workspace) -- [WorkspaceJsonConfiguration](../../generated/nx-devkit/index#workspacejsonconfiguration) +- [ExecutorContext](../../nx-devkit/index#executorcontext) +- [ImplicitJsonSubsetDependency](../../nx-devkit/index#implicitjsonsubsetdependency) +- [NxAffectedConfig](../../nx-devkit/index#nxaffectedconfig) +- [NxJsonConfiguration](../../nx-devkit/index#nxjsonconfiguration) +- [NxJsonProjectConfiguration](../../nx-devkit/index#nxjsonprojectconfiguration) +- [ProjectConfiguration](../../nx-devkit/index#projectconfiguration) +- [TargetConfiguration](../../nx-devkit/index#targetconfiguration) +- [TargetDependencyConfig](../../nx-devkit/index#targetdependencyconfig) +- [Task](../../nx-devkit/index#task) +- [TaskGraph](../../nx-devkit/index#taskgraph) +- [Workspace](../../nx-devkit/index#workspace) +- [WorkspaceJsonConfiguration](../../nx-devkit/index#workspacejsonconfiguration) ### Generators Type aliases -- [WorkspaceConfiguration](../../generated/nx-devkit/index#workspaceconfiguration) +- [WorkspaceConfiguration](../../nx-devkit/index#workspaceconfiguration) ### Other Type aliases -- [ProjectTargetConfigurator](../../generated/nx-devkit/index#projecttargetconfigurator) +- [ProjectTargetConfigurator](../../nx-devkit/index#projecttargetconfigurator) ### Package Manager Type aliases -- [PackageManager](../../generated/nx-devkit/index#packagemanager) +- [PackageManager](../../nx-devkit/index#packagemanager) ### Project Graph Type aliases -- [ProjectGraphNode](../../generated/nx-devkit/index#projectgraphnode) +- [ProjectGraphNode](../../nx-devkit/index#projectgraphnode) ### Utils Type aliases -- [StringChange](../../generated/nx-devkit/index#stringchange) +- [StringChange](../../nx-devkit/index#stringchange) ### Workspace Type aliases -- [Executor](../../generated/nx-devkit/index#executor) -- [Generator](../../generated/nx-devkit/index#generator) -- [GeneratorCallback](../../generated/nx-devkit/index#generatorcallback) -- [ImplicitDependencyEntry](../../generated/nx-devkit/index#implicitdependencyentry) -- [ProjectType](../../generated/nx-devkit/index#projecttype) -- [TaskGraphExecutor](../../generated/nx-devkit/index#taskgraphexecutor) +- [Executor](../../nx-devkit/index#executor) +- [Generator](../../nx-devkit/index#generator) +- [GeneratorCallback](../../nx-devkit/index#generatorcallback) +- [ImplicitDependencyEntry](../../nx-devkit/index#implicitdependencyentry) +- [ProjectType](../../nx-devkit/index#projecttype) +- [TaskGraphExecutor](../../nx-devkit/index#taskgraphexecutor) ### Logger Variables -- [logger](../../generated/nx-devkit/index#logger) +- [logger](../../nx-devkit/index#logger) ### Functions -- [addDependenciesToPackageJson](../../generated/nx-devkit/index#adddependenciestopackagejson) -- [addProjectConfiguration](../../generated/nx-devkit/index#addprojectconfiguration) -- [applyChangesToString](../../generated/nx-devkit/index#applychangestostring) -- [convertNxExecutor](../../generated/nx-devkit/index#convertnxexecutor) -- [convertNxGenerator](../../generated/nx-devkit/index#convertnxgenerator) -- [detectPackageManager](../../generated/nx-devkit/index#detectpackagemanager) -- [formatFiles](../../generated/nx-devkit/index#formatfiles) -- [generateFiles](../../generated/nx-devkit/index#generatefiles) -- [getPackageManagerCommand](../../generated/nx-devkit/index#getpackagemanagercommand) -- [getPackageManagerVersion](../../generated/nx-devkit/index#getpackagemanagerversion) -- [getProjects](../../generated/nx-devkit/index#getprojects) -- [getWorkspaceLayout](../../generated/nx-devkit/index#getworkspacelayout) -- [getWorkspacePath](../../generated/nx-devkit/index#getworkspacepath) -- [installPackagesTask](../../generated/nx-devkit/index#installpackagestask) -- [isStandaloneProject](../../generated/nx-devkit/index#isstandaloneproject) -- [joinPathFragments](../../generated/nx-devkit/index#joinpathfragments) -- [moveFilesToNewDirectory](../../generated/nx-devkit/index#movefilestonewdirectory) -- [names](../../generated/nx-devkit/index#names) -- [normalizePath](../../generated/nx-devkit/index#normalizepath) -- [offsetFromRoot](../../generated/nx-devkit/index#offsetfromroot) -- [parseJson](../../generated/nx-devkit/index#parsejson) -- [parseTargetString](../../generated/nx-devkit/index#parsetargetstring) -- [readJson](../../generated/nx-devkit/index#readjson) -- [readJsonFile](../../generated/nx-devkit/index#readjsonfile) -- [readProjectConfiguration](../../generated/nx-devkit/index#readprojectconfiguration) -- [readTargetOptions](../../generated/nx-devkit/index#readtargetoptions) -- [readWorkspaceConfiguration](../../generated/nx-devkit/index#readworkspaceconfiguration) -- [removeDependenciesFromPackageJson](../../generated/nx-devkit/index#removedependenciesfrompackagejson) -- [removeProjectConfiguration](../../generated/nx-devkit/index#removeprojectconfiguration) -- [runExecutor](../../generated/nx-devkit/index#runexecutor) -- [serializeJson](../../generated/nx-devkit/index#serializejson) -- [stripIndents](../../generated/nx-devkit/index#stripindents) -- [stripJsonComments](../../generated/nx-devkit/index#stripjsoncomments) -- [targetToTargetString](../../generated/nx-devkit/index#targettotargetstring) -- [toJS](../../generated/nx-devkit/index#tojs) -- [updateJson](../../generated/nx-devkit/index#updatejson) -- [updateProjectConfiguration](../../generated/nx-devkit/index#updateprojectconfiguration) -- [updateTsConfigsToJs](../../generated/nx-devkit/index#updatetsconfigstojs) -- [updateWorkspaceConfiguration](../../generated/nx-devkit/index#updateworkspaceconfiguration) -- [visitNotIgnoredFiles](../../generated/nx-devkit/index#visitnotignoredfiles) -- [writeJson](../../generated/nx-devkit/index#writejson) -- [writeJsonFile](../../generated/nx-devkit/index#writejsonfile) +- [addDependenciesToPackageJson](../../nx-devkit/index#adddependenciestopackagejson) +- [addProjectConfiguration](../../nx-devkit/index#addprojectconfiguration) +- [applyChangesToString](../../nx-devkit/index#applychangestostring) +- [convertNxExecutor](../../nx-devkit/index#convertnxexecutor) +- [convertNxGenerator](../../nx-devkit/index#convertnxgenerator) +- [detectPackageManager](../../nx-devkit/index#detectpackagemanager) +- [formatFiles](../../nx-devkit/index#formatfiles) +- [generateFiles](../../nx-devkit/index#generatefiles) +- [getPackageManagerCommand](../../nx-devkit/index#getpackagemanagercommand) +- [getPackageManagerVersion](../../nx-devkit/index#getpackagemanagerversion) +- [getProjects](../../nx-devkit/index#getprojects) +- [getWorkspaceLayout](../../nx-devkit/index#getworkspacelayout) +- [getWorkspacePath](../../nx-devkit/index#getworkspacepath) +- [installPackagesTask](../../nx-devkit/index#installpackagestask) +- [isStandaloneProject](../../nx-devkit/index#isstandaloneproject) +- [joinPathFragments](../../nx-devkit/index#joinpathfragments) +- [moveFilesToNewDirectory](../../nx-devkit/index#movefilestonewdirectory) +- [names](../../nx-devkit/index#names) +- [normalizePath](../../nx-devkit/index#normalizepath) +- [offsetFromRoot](../../nx-devkit/index#offsetfromroot) +- [parseJson](../../nx-devkit/index#parsejson) +- [parseTargetString](../../nx-devkit/index#parsetargetstring) +- [readJson](../../nx-devkit/index#readjson) +- [readJsonFile](../../nx-devkit/index#readjsonfile) +- [readProjectConfiguration](../../nx-devkit/index#readprojectconfiguration) +- [readTargetOptions](../../nx-devkit/index#readtargetoptions) +- [readWorkspaceConfiguration](../../nx-devkit/index#readworkspaceconfiguration) +- [removeDependenciesFromPackageJson](../../nx-devkit/index#removedependenciesfrompackagejson) +- [removeProjectConfiguration](../../nx-devkit/index#removeprojectconfiguration) +- [runExecutor](../../nx-devkit/index#runexecutor) +- [serializeJson](../../nx-devkit/index#serializejson) +- [stripIndents](../../nx-devkit/index#stripindents) +- [stripJsonComments](../../nx-devkit/index#stripjsoncomments) +- [targetToTargetString](../../nx-devkit/index#targettotargetstring) +- [toJS](../../nx-devkit/index#tojs) +- [updateJson](../../nx-devkit/index#updatejson) +- [updateProjectConfiguration](../../nx-devkit/index#updateprojectconfiguration) +- [updateTsConfigsToJs](../../nx-devkit/index#updatetsconfigstojs) +- [updateWorkspaceConfiguration](../../nx-devkit/index#updateworkspaceconfiguration) +- [visitNotIgnoredFiles](../../nx-devkit/index#visitnotignoredfiles) +- [writeJson](../../nx-devkit/index#writejson) +- [writeJsonFile](../../nx-devkit/index#writejsonfile) ## Project Graph Enumerations @@ -211,12 +210,6 @@ A plugin for Nx --- -### ProjectGraphBuilderExplicitDependency - -• **ProjectGraphBuilderExplicitDependency**: `Object` - ---- - ### ProjectGraphDependency • **ProjectGraphDependency**: `Object` @@ -375,7 +368,7 @@ A plugin for Nx ### WorkspaceConfiguration -Ƭ **WorkspaceConfiguration**: `Omit`<[`WorkspaceJsonConfiguration`](../../generated/nx-devkit/index#workspacejsonconfiguration), `"projects"`\> & `Partial`<[`NxJsonConfiguration`](../../generated/nx-devkit/index#nxjsonconfiguration)\> +Ƭ **WorkspaceConfiguration**: `Omit`<[`WorkspaceJsonConfiguration`](../../nx-devkit/index#workspacejsonconfiguration), `"projects"`\> & `Partial`<[`NxJsonConfiguration`](../../nx-devkit/index#nxjsonconfiguration)\> --- @@ -383,11 +376,11 @@ A plugin for Nx ### ProjectTargetConfigurator -Ƭ **ProjectTargetConfigurator**: (`file`: `string`) => `Record`<`string`, [`TargetConfiguration`](../../generated/nx-devkit/index#targetconfiguration)\> +Ƭ **ProjectTargetConfigurator**: (`file`: `string`) => `Record`<`string`, [`TargetConfiguration`](../../nx-devkit/index#targetconfiguration)\> #### Type declaration -▸ (`file`): `Record`<`string`, [`TargetConfiguration`](../../generated/nx-devkit/index#targetconfiguration)\> +▸ (`file`): `Record`<`string`, [`TargetConfiguration`](../../nx-devkit/index#targetconfiguration)\> ##### Parameters @@ -397,7 +390,7 @@ A plugin for Nx ##### Returns -`Record`<`string`, [`TargetConfiguration`](../../generated/nx-devkit/index#targetconfiguration)\> +`Record`<`string`, [`TargetConfiguration`](../../nx-devkit/index#targetconfiguration)\> --- @@ -413,7 +406,7 @@ A plugin for Nx ### ProjectGraphNode -Ƭ **ProjectGraphNode**<`T`\>: [`ProjectGraphProjectNode`](../../generated/nx-devkit/index#projectgraphprojectnode)<`T`\> \| [`ProjectGraphExternalNode`](../../generated/nx-devkit/index#projectgraphexternalnode) +Ƭ **ProjectGraphNode**<`T`\>: [`ProjectGraphProjectNode`](../../nx-devkit/index#projectgraphprojectnode)<`T`\> \| [`ProjectGraphExternalNode`](../../nx-devkit/index#projectgraphexternalnode) #### Type parameters @@ -427,7 +420,7 @@ A plugin for Nx ### StringChange -Ƭ **StringChange**: [`StringInsertion`](../../generated/nx-devkit/index#stringinsertion) \| [`StringDeletion`](../../generated/nx-devkit/index#stringdeletion) +Ƭ **StringChange**: [`StringInsertion`](../../nx-devkit/index#stringinsertion) \| [`StringDeletion`](../../nx-devkit/index#stringdeletion) --- @@ -435,7 +428,7 @@ A plugin for Nx ### Executor -Ƭ **Executor**<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext)) => `Promise`<`Object`\> \| `AsyncIterableIterator`<`Object`\> +Ƭ **Executor**<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../nx-devkit/index#executorcontext)) => `Promise`<`Object`\> \| `AsyncIterableIterator`<`Object`\> #### Type parameters @@ -451,10 +444,10 @@ Implementation of a target of a project ##### Parameters -| Name | Type | -| :-------- | :------------------------------------------------------------------- | -| `options` | `T` | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :-------- | :--------------------------------------------------------- | +| `options` | `T` | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | ##### Returns @@ -464,7 +457,7 @@ Implementation of a target of a project ### Generator -Ƭ **Generator**<`T`\>: (`tree`: `any`, `schema`: `T`) => `void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback)\> +Ƭ **Generator**<`T`\>: (`tree`: `any`, `schema`: `T`) => `void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback)\> #### Type parameters @@ -474,7 +467,7 @@ Implementation of a target of a project #### Type declaration -▸ (`tree`, `schema`): `void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback)\> +▸ (`tree`, `schema`): `void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback)\> A function that schedules updates to the filesystem to be done atomically @@ -487,7 +480,7 @@ A function that schedules updates to the filesystem to be done atomically ##### Returns -`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback)\> +`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback)\> --- @@ -519,7 +512,7 @@ A callback function that is executed after changes are made to the file system #### Index signature -▪ [key: `string`]: `T` \| [`ImplicitJsonSubsetDependency`](../../generated/nx-devkit/index#implicitjsonsubsetdependency)<`T`\> +▪ [key: `string`]: `T` \| [`ImplicitJsonSubsetDependency`](../../nx-devkit/index#implicitjsonsubsetdependency)<`T`\> --- @@ -531,7 +524,7 @@ A callback function that is executed after changes are made to the file system ### TaskGraphExecutor -Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../generated/nx-devkit/index#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext)) => `Promise`<`Record`<`string`, `Object`\>\> +Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../nx-devkit/index#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../nx-devkit/index#executorcontext)) => `Promise`<`Record`<`string`, `Object`\>\> #### Type parameters @@ -547,12 +540,12 @@ Implementation of a target of a project that handles multiple projects to be bat ##### Parameters -| Name | Type | -| :---------- | :------------------------------------------------------------------- | -| `taskGraph` | [`TaskGraph`](../../generated/nx-devkit/index#taskgraph) | -| `options` | `Record`<`string`, `T`\> | -| `overrides` | `T` | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :---------- | :--------------------------------------------------------- | +| `taskGraph` | [`TaskGraph`](../../nx-devkit/index#taskgraph) | +| `options` | `Record`<`string`, `T`\> | +| `overrides` | `T` | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | ##### Returns @@ -579,7 +572,7 @@ Implementation of a target of a project that handles multiple projects to be bat ### addDependenciesToPackageJson -▸ **addDependenciesToPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) +▸ **addDependenciesToPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Add Dependencies and Dev Dependencies to package.json @@ -593,16 +586,16 @@ This will **add** `react` and `jest` to the dependencies and devDependencies sec #### Parameters -| Name | Type | Default value | Description | -| :---------------- | :--------------------------------------------- | :--------------- | :---------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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 | +| Name | Type | Default value | Description | +| :---------------- | :----------------------------------- | :--------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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`](../../generated/nx-devkit/index#generatorcallback) +[`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Callback to install dependencies only if necessary. undefined is returned if changes are not necessary. @@ -619,12 +612,12 @@ The utility will update either files. #### Parameters -| Name | Type | Description | -| :--------------------- | :----------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | -| `projectConfiguration` | [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) | project configuration | -| `standalone?` | `boolean` | should the project use package.json? If false, the project config is inside workspace.json | +| Name | Type | Description | +| :--------------------- | :------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| `projectConfiguration` | [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) | project configuration | +| `standalone?` | `boolean` | should the project use package.json? If false, the project config is inside workspace.json | #### Returns @@ -668,10 +661,10 @@ bootstrap({ #### Parameters -| Name | Type | -| :-------- | :--------------------------------------------------------------- | -| `text` | `string` | -| `changes` | [`StringChange`](../../generated/nx-devkit/index#stringchange)[] | +| Name | Type | +| :-------- | :----------------------------------------------------- | +| `text` | `string` | +| `changes` | [`StringChange`](../../nx-devkit/index#stringchange)[] | #### Returns @@ -689,9 +682,9 @@ Use this to expose a compatible Angular Builder #### Parameters -| Name | Type | -| :--------- | :------------------------------------------------------------- | -| `executor` | [`Executor`](../../generated/nx-devkit/index#executor)<`any`\> | +| Name | Type | +| :--------- | :--------------------------------------------------- | +| `executor` | [`Executor`](../../nx-devkit/index#executor)<`any`\> | #### Returns @@ -713,9 +706,9 @@ Convert an Nx Generator into an Angular Devkit Schematic #### Parameters -| Name | Type | -| :---------- | :------------------------------------------------------------- | -| `generator` | [`Generator`](../../generated/nx-devkit/index#generator)<`T`\> | +| Name | Type | +| :---------- | :--------------------------------------------------- | +| `generator` | [`Generator`](../../nx-devkit/index#generator)<`T`\> | #### Returns @@ -750,7 +743,7 @@ Convert an Nx Generator into an Angular Devkit Schematic ### detectPackageManager -▸ **detectPackageManager**(`dir?`): [`PackageManager`](../../generated/nx-devkit/index#packagemanager) +▸ **detectPackageManager**(`dir?`): [`PackageManager`](../../nx-devkit/index#packagemanager) Detects which package manager is used in the workspace based on the lock file. @@ -762,7 +755,7 @@ Detects which package manager is used in the workspace based on the lock file. #### Returns -[`PackageManager`](../../generated/nx-devkit/index#packagemanager) +[`PackageManager`](../../nx-devkit/index#packagemanager) --- @@ -774,9 +767,9 @@ Formats all the created or updated files using Prettier #### Parameters -| Name | Type | Description | -| :----- | :--------------------------------------------- | :------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | +| Name | Type | Description | +| :----- | :----------------------------------- | :------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | #### Returns @@ -812,12 +805,12 @@ doesn't get confused about incorrect TypeScript files. #### Parameters -| Name | Type | Description | -| :-------------- | :--------------------------------------------- | :-------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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 | +| Name | Type | Description | +| :-------------- | :----------------------------------- | :-------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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 @@ -841,9 +834,9 @@ execSync(`${getPackageManagerCommand().addDev} my-dev-package`); #### Parameters -| Name | Type | -| :--------------- | :----------------------------------------------------------------- | -| `packageManager` | [`PackageManager`](../../generated/nx-devkit/index#packagemanager) | +| Name | Type | +| :--------------- | :------------------------------------------------------- | +| `packageManager` | [`PackageManager`](../../nx-devkit/index#packagemanager) | #### Returns @@ -861,9 +854,9 @@ but it can also be passed in explicitly. #### Parameters -| Name | Type | -| :--------------- | :----------------------------------------------------------------- | -| `packageManager` | [`PackageManager`](../../generated/nx-devkit/index#packagemanager) | +| Name | Type | +| :--------------- | :------------------------------------------------------- | +| `packageManager` | [`PackageManager`](../../nx-devkit/index#packagemanager) | #### Returns @@ -873,21 +866,21 @@ but it can also be passed in explicitly. ### getProjects -▸ **getProjects**(`tree`): `Map`<`string`, [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration)\> +▸ **getProjects**(`tree`): `Map`<`string`, [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration)\> Get a map of all projects in a workspace. -Use [readProjectConfiguration](../../generated/nx-devkit/index#readprojectconfiguration) if only one project is needed. +Use [readProjectConfiguration](../../nx-devkit/index#readprojectconfiguration) if only one project is needed. #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns -`Map`<`string`, [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration)\> +`Map`<`string`, [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration)\> --- @@ -906,9 +899,9 @@ Example: #### Parameters -| Name | Type | Description | -| :----- | :--------------------------------------------- | :--------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | file system tree | +| Name | Type | Description | +| :----- | :----------------------------------- | :--------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | file system tree | #### Returns @@ -929,9 +922,9 @@ Example: #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns @@ -948,12 +941,12 @@ Runs `npm install` or `yarn install`. It will skip running the install if #### Parameters -| Name | Type | Default value | Description | -| :--------------- | :----------------------------------------------------------------- | :------------ | :------------------------------------------------------------ | -| `tree` | [`Tree`](../../generated/nx-devkit/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`](../../generated/nx-devkit/index#packagemanager) | `undefined` | - | +| Name | Type | Default value | Description | +| :--------------- | :------------------------------------------------------- | :------------ | :------------------------------------------------------------ | +| `tree` | [`Tree`](../../nx-devkit/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`](../../nx-devkit/index#packagemanager) | `undefined` | - | #### Returns @@ -969,10 +962,10 @@ Returns if a project has a standalone configuration (project.json). #### Parameters -| Name | Type | Description | -| :-------- | :--------------------------------------------- | :------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `project` | `string` | the project name | +| Name | Type | Description | +| :-------- | :----------------------------------- | :------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `project` | `string` | the project name | #### Returns @@ -1004,11 +997,11 @@ Normalized path fragments and joins them #### Parameters -| Name | Type | -| :------- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `oldDir` | `string` | -| `newDir` | `string` | +| Name | Type | +| :------- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `oldDir` | `string` | +| `newDir` | `string` | #### Returns @@ -1107,10 +1100,10 @@ By default javascript-style comments are allowed. #### Parameters -| Name | Type | Description | -| :--------- | :--------------------------------------------------------------------- | :--------------------- | -| `input` | `string` | JSON content as string | -| `options?` | [`JsonParseOptions`](../../generated/nx-devkit/index#jsonparseoptions) | JSON parse options | +| Name | Type | Description | +| :--------- | :----------------------------------------------------------- | :--------------------- | +| `input` | `string` | JSON content as string | +| `options?` | [`JsonParseOptions`](../../nx-devkit/index#jsonparseoptions) | JSON parse options | #### Returns @@ -1122,7 +1115,7 @@ Object the JSON content represents ### parseTargetString -▸ **parseTargetString**(`targetString`): [`Target`](../../generated/nx-devkit/index#target) +▸ **parseTargetString**(`targetString`): [`Target`](../../nx-devkit/index#target) Parses a target string into {project, target, configuration} @@ -1141,7 +1134,7 @@ parseTargetString('proj:test:production'); // returns { project: "proj", target: #### Returns -[`Target`](../../generated/nx-devkit/index#target) +[`Target`](../../nx-devkit/index#target) --- @@ -1159,11 +1152,11 @@ Reads a json file, removes all comments and parses JSON. #### Parameters -| Name | Type | Description | -| :--------- | :--------------------------------------------------------------------- | :-------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | file system tree | -| `path` | `string` | file path | -| `options?` | [`JsonParseOptions`](../../generated/nx-devkit/index#jsonparseoptions) | Optional JSON Parse Options | +| Name | Type | Description | +| :--------- | :----------------------------------------------------------- | :-------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | file system tree | +| `path` | `string` | file path | +| `options?` | [`JsonParseOptions`](../../nx-devkit/index#jsonparseoptions) | Optional JSON Parse Options | #### Returns @@ -1200,7 +1193,7 @@ Object the JSON content of the file represents ### readProjectConfiguration -▸ **readProjectConfiguration**(`tree`, `projectName`): [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) +▸ **readProjectConfiguration**(`tree`, `projectName`): [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) Reads a project configuration. @@ -1211,14 +1204,14 @@ The utility will read from either file. #### Parameters -| Name | Type | Description | -| :------------ | :--------------------------------------------- | :---------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| Name | Type | Description | +| :------------ | :----------------------------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | #### Returns -[`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) +[`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) --- @@ -1238,10 +1231,10 @@ Works as if you invoked the target yourself without passing any command lint ove #### Parameters -| Name | Type | -| :------------------ | :------------------------------------------------------------------- | -| `__namedParameters` | [`Target`](../../generated/nx-devkit/index#target) | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :------------------ | :--------------------------------------------------------- | +| `__namedParameters` | [`Target`](../../nx-devkit/index#target) | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | #### Returns @@ -1251,27 +1244,27 @@ Works as if you invoked the target yourself without passing any command lint ove ### readWorkspaceConfiguration -▸ **readWorkspaceConfiguration**(`tree`): [`WorkspaceConfiguration`](../../generated/nx-devkit/index#workspaceconfiguration) +▸ **readWorkspaceConfiguration**(`tree`): [`WorkspaceConfiguration`](../../nx-devkit/index#workspaceconfiguration) Read general workspace configuration such as the default project or cli settings -This does _not_ provide projects configuration, use [readProjectConfiguration](../../generated/nx-devkit/index#readprojectconfiguration) instead. +This does _not_ provide projects configuration, use [readProjectConfiguration](../../nx-devkit/index#readprojectconfiguration) instead. #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns -[`WorkspaceConfiguration`](../../generated/nx-devkit/index#workspaceconfiguration) +[`WorkspaceConfiguration`](../../nx-devkit/index#workspaceconfiguration) --- ### removeDependenciesFromPackageJson -▸ **removeDependenciesFromPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) +▸ **removeDependenciesFromPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Remove Dependencies and Dev Dependencies from package.json @@ -1285,16 +1278,16 @@ This will **remove** `react` and `jest` from the dependencies and devDependencie #### Parameters -| Name | Type | Default value | Description | -| :---------------- | :--------------------------------------------- | :--------------- | :-------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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'` | - | +| Name | Type | Default value | Description | +| :---------------- | :----------------------------------- | :--------------- | :-------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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`](../../generated/nx-devkit/index#generatorcallback) +[`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Callback to uninstall dependencies only if necessary. undefined is returned if changes are not necessary. @@ -1311,10 +1304,10 @@ The utility will update either file. #### Parameters -| Name | Type | -| :------------ | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `projectName` | `string` | +| Name | Type | +| :------------ | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `projectName` | `string` | #### Returns @@ -1362,14 +1355,14 @@ Note that the return value is a promise of an iterator, so you need to await bef #### Parameters -| Name | Type | -| :--------------------------------- | :------------------------------------------------------------------- | -| `targetDescription` | `Object` | -| `targetDescription.configuration?` | `string` | -| `targetDescription.project` | `string` | -| `targetDescription.target` | `string` | -| `options` | `Object` | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :--------------------------------- | :--------------------------------------------------------- | +| `targetDescription` | `Object` | +| `targetDescription.configuration?` | `string` | +| `targetDescription.project` | `string` | +| `targetDescription.target` | `string` | +| `options` | `Object` | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | #### Returns @@ -1392,10 +1385,10 @@ By default the JSON string is formatted with a 2 space intendation to be easy re #### Parameters -| Name | Type | Description | -| :--------- | :----------------------------------------------------------------------------- | :---------------------------------------- | -| `input` | `T` | Object which should be serialized to JSON | -| `options?` | [`JsonSerializeOptions`](../../generated/nx-devkit/index#jsonserializeoptions) | JSON serialize options | +| Name | Type | Description | +| :--------- | :------------------------------------------------------------------- | :---------------------------------------- | +| `input` | `T` | Object which should be serialized to JSON | +| `options?` | [`JsonSerializeOptions`](../../nx-devkit/index#jsonserializeoptions) | JSON serialize options | #### Returns @@ -1463,9 +1456,9 @@ Returns a string in the format "project:target[:configuration]" for the target #### Parameters -| Name | Type | Description | -| :------- | :------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `target` | [`Target`](../../generated/nx-devkit/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" ` | +| Name | Type | Description | +| :------- | :--------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `target` | [`Target`](../../nx-devkit/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 @@ -1481,9 +1474,9 @@ Rename and transpile any new typescript files created to javascript files #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns @@ -1506,12 +1499,12 @@ Updates a JSON value to the file system tree #### Parameters -| Name | Type | Description | -| :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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`](../../generated/nx-devkit/index#jsonparseoptions) & [`JsonSerializeOptions`](../../generated/nx-devkit/index#jsonserializeoptions) | Optional JSON Parse and Serialize Options | +| Name | Type | Description | +| :--------- | :---------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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`](../../nx-devkit/index#jsonparseoptions) & [`JsonSerializeOptions`](../../nx-devkit/index#jsonserializeoptions) | Optional JSON Parse and Serialize Options | #### Returns @@ -1530,11 +1523,11 @@ The utility will update either files. #### Parameters -| Name | Type | Description | -| :--------------------- | :----------------------------------------------------------------------------- | :---------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | -| `projectConfiguration` | [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) | project configuration | +| Name | Type | Description | +| :--------------------- | :------------------------------------------------------------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| `projectConfiguration` | [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) | project configuration | #### Returns @@ -1548,11 +1541,11 @@ The utility will update either files. #### Parameters -| Name | Type | -| :-------------------- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `options` | `Object` | -| `options.projectRoot` | `string` | +| Name | Type | +| :-------------------- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `options` | `Object` | +| `options.projectRoot` | `string` | #### Returns @@ -1566,14 +1559,14 @@ The utility will update either files. Update general workspace configuration such as the default project or cli settings. -This does _not_ update projects configuration, use [updateProjectConfiguration](../../generated/nx-devkit/index#updateprojectconfiguration) or [addProjectConfiguration](../../generated/nx-devkit/index#addprojectconfiguration) instead. +This does _not_ update projects configuration, use [updateProjectConfiguration](../../nx-devkit/index#updateprojectconfiguration) or [addProjectConfiguration](../../nx-devkit/index#addprojectconfiguration) instead. #### Parameters -| Name | Type | -| :---------------- | :--------------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `workspaceConfig` | [`WorkspaceConfiguration`](../../generated/nx-devkit/index#workspaceconfiguration) | +| Name | Type | +| :---------------- | :----------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `workspaceConfig` | [`WorkspaceConfiguration`](../../nx-devkit/index#workspaceconfiguration) | #### Returns @@ -1589,11 +1582,11 @@ Utility to act on all files in a tree that are not ignored by git. #### Parameters -| Name | Type | Default value | -| :-------- | :--------------------------------------------- | :------------ | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | `undefined` | -| `dirPath` | `string` | `tree.root` | -| `visitor` | (`path`: `string`) => `void` | `undefined` | +| Name | Type | Default value | +| :-------- | :----------------------------------- | :------------ | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | `undefined` | +| `dirPath` | `string` | `tree.root` | +| `visitor` | (`path`: `string`) => `void` | `undefined` | #### Returns @@ -1615,12 +1608,12 @@ Writes a JSON value to the file system tree #### Parameters -| Name | Type | Description | -| :--------- | :----------------------------------------------------------------------------- | :------------------------------ | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | File system tree | -| `path` | `string` | Path of JSON file in the Tree | -| `value` | `T` | Serializable value to write | -| `options?` | [`JsonSerializeOptions`](../../generated/nx-devkit/index#jsonserializeoptions) | Optional JSON Serialize Options | +| Name | Type | Description | +| :--------- | :------------------------------------------------------------------- | :------------------------------ | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | File system tree | +| `path` | `string` | Path of JSON file in the Tree | +| `value` | `T` | Serializable value to write | +| `options?` | [`JsonSerializeOptions`](../../nx-devkit/index#jsonserializeoptions) | Optional JSON Serialize Options | #### Returns diff --git a/docs/generated/api-nx-devkit/ngcli_adapter.md b/docs/generated/api-nx-devkit/ngcli_adapter.md index 5260c352567d4e..4daeafdca476b9 100644 --- a/docs/generated/api-nx-devkit/ngcli_adapter.md +++ b/docs/generated/api-nx-devkit/ngcli_adapter.md @@ -4,13 +4,13 @@ ### Ng CLI Adapter Classes -- [NxScopedHost](../../generated/nx-devkit/ngcli_adapter#nxscopedhost) +- [NxScopedHost](../../nx-devkit/ngcli_adapter#nxscopedhost) ### Functions -- [mockSchematicsForTesting](../../generated/nx-devkit/ngcli_adapter#mockschematicsfortesting) -- [overrideCollectionResolutionForTesting](../../generated/nx-devkit/ngcli_adapter#overridecollectionresolutionfortesting) -- [wrapAngularDevkitSchematic](../../generated/nx-devkit/ngcli_adapter#wrapangulardevkitschematic) +- [mockSchematicsForTesting](../../nx-devkit/ngcli_adapter#mockschematicsfortesting) +- [overrideCollectionResolutionForTesting](../../nx-devkit/ngcli_adapter#overridecollectionresolutionfortesting) +- [wrapAngularDevkitSchematic](../../nx-devkit/ngcli_adapter#wrapangulardevkitschematic) ## Ng CLI Adapter Classes @@ -91,7 +91,7 @@ overrideCollectionResolutionForTesting({ ### wrapAngularDevkitSchematic -▸ **wrapAngularDevkitSchematic**(`collectionName`, `generatorName`): (`host`: [`Tree`](../../generated/nx-devkit/index#tree), `generatorOptions`: { [k: string]: `any`; }) => `Promise`<`any`\> +▸ **wrapAngularDevkitSchematic**(`collectionName`, `generatorName`): (`host`: [`Tree`](../../nx-devkit/index#tree), `generatorOptions`: { [k: string]: `any`; }) => `Promise`<`any`\> #### Parameters @@ -108,10 +108,10 @@ overrideCollectionResolutionForTesting({ ##### Parameters -| Name | Type | -| :----------------- | :--------------------------------------------- | -| `host` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `generatorOptions` | `Object` | +| Name | Type | +| :----------------- | :----------------------------------- | +| `host` | [`Tree`](../../nx-devkit/index#tree) | +| `generatorOptions` | `Object` | ##### Returns diff --git a/docs/generated/cli/affected-apps.md b/docs/generated/cli/affected-apps.md index 456bfe0e43e466..2849cdc215efff 100644 --- a/docs/generated/cli/affected-apps.md +++ b/docs/generated/cli/affected-apps.md @@ -67,10 +67,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### plain diff --git a/docs/generated/cli/affected-build.md b/docs/generated/cli/affected-build.md index c4f84847643b61..362c4b497764d9 100644 --- a/docs/generated/cli/affected-build.md +++ b/docs/generated/cli/affected-build.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/docs/generated/cli/affected-e2e.md b/docs/generated/cli/affected-e2e.md index f91027a5599a5b..e36525757e97e4 100644 --- a/docs/generated/cli/affected-e2e.md +++ b/docs/generated/cli/affected-e2e.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/docs/generated/cli/affected-graph.md b/docs/generated/cli/affected-graph.md index dcb52e385171ce..ba409666b2fad7 100644 --- a/docs/generated/cli/affected-graph.md +++ b/docs/generated/cli/affected-graph.md @@ -101,10 +101,12 @@ Show help Bind the project graph server to a specific ip address. -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### open diff --git a/docs/generated/cli/affected-libs.md b/docs/generated/cli/affected-libs.md index 21b3a97af47388..27bab31a502bdd 100644 --- a/docs/generated/cli/affected-libs.md +++ b/docs/generated/cli/affected-libs.md @@ -67,10 +67,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### plain diff --git a/docs/generated/cli/affected-lint.md b/docs/generated/cli/affected-lint.md index 33fad6179ef0df..e188e0034d0cde 100644 --- a/docs/generated/cli/affected-lint.md +++ b/docs/generated/cli/affected-lint.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/docs/generated/cli/affected-test.md b/docs/generated/cli/affected-test.md index 913a1e2032a606..da41a3d689ff23 100644 --- a/docs/generated/cli/affected-test.md +++ b/docs/generated/cli/affected-test.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/docs/generated/cli/affected.md b/docs/generated/cli/affected.md index 455a5d8a3c51f1..31c8b5d9515eae 100644 --- a/docs/generated/cli/affected.md +++ b/docs/generated/cli/affected.md @@ -85,10 +85,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/docs/generated/cli/daemon.md b/docs/generated/cli/daemon.md index fb2d28c94042b7..aa9d4a509c7477 100644 --- a/docs/generated/cli/daemon.md +++ b/docs/generated/cli/daemon.md @@ -1,11 +1,11 @@ --- title: 'daemon - CLI command' -description: "EXPERIMENTAL: Nx DaemonThe Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph." +description: "The Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph." --- # daemon -EXPERIMENTAL: Nx DaemonThe Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph. +The Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph. ## Usage diff --git a/docs/generated/cli/format-check.md b/docs/generated/cli/format-check.md index c38f534c2c0d4f..cf036cf7991e2a 100644 --- a/docs/generated/cli/format-check.md +++ b/docs/generated/cli/format-check.md @@ -51,10 +51,12 @@ Show help Format only libraries and applications files. -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### projects diff --git a/docs/generated/cli/format-write.md b/docs/generated/cli/format-write.md index 30040747f42456..19bad53591dcdc 100644 --- a/docs/generated/cli/format-write.md +++ b/docs/generated/cli/format-write.md @@ -51,10 +51,12 @@ Show help Format only libraries and applications files. -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### projects diff --git a/docs/generated/cli/print-affected.md b/docs/generated/cli/print-affected.md index d7c22074dc32ea..cfe647da584504 100644 --- a/docs/generated/cli/print-affected.md +++ b/docs/generated/cli/print-affected.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### runner diff --git a/docs/generated/cli/run-many.md b/docs/generated/cli/run-many.md index ac31209156ef73..5c58a71ab193cb 100644 --- a/docs/generated/cli/run-many.md +++ b/docs/generated/cli/run-many.md @@ -55,10 +55,12 @@ Exclude certain projects from being processed Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Only run the target on projects which previously failed ### parallel diff --git a/docs/generated/cli/workspace-lint.md b/docs/generated/cli/workspace-lint.md index 86f1dd894d7cb9..385120671ef402 100644 --- a/docs/generated/cli/workspace-lint.md +++ b/docs/generated/cli/workspace-lint.md @@ -1,11 +1,11 @@ --- title: 'workspace-lint - CLI command' -description: 'Lint nx specific workspace files (nx.json, workspace.json) and check existence of the configured packages and apps. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file' +description: 'Lint nx specific workspace files (nx.json, workspace.json), checks if your configuration and your source code are in sync. This command identifies projects with no files in the configured project root folder, as well as files that are not part of any projects in the workspace. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file.' --- # workspace-lint -Lint nx specific workspace files (nx.json, workspace.json) and check existence of the configured packages and apps. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file +Lint nx specific workspace files (nx.json, workspace.json), checks if your configuration and your source code are in sync. This command identifies projects with no files in the configured project root folder, as well as files that are not part of any projects in the workspace. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file. ## Usage diff --git a/docs/shared/angular-plugin.md b/docs/shared/angular-plugin.md index fcfed58ac23af4..b2898f0fac7fc1 100644 --- a/docs/shared/angular-plugin.md +++ b/docs/shared/angular-plugin.md @@ -18,10 +18,10 @@ The Nx Plugin for Angular contains executors, generators, and utilities for mana Adding the Angular plugin to an existing Nx workspace can be done with the following: ```bash -#yarn yarn add -D @nrwl/angular +``` -#npm +```bash npm install -D @nrwl/angular ``` diff --git a/docs/shared/configuration/packagejson.md b/docs/shared/configuration/packagejson.md index dc9bcb2cac024f..6086c43b3d72bb 100644 --- a/docs/shared/configuration/packagejson.md +++ b/docs/shared/configuration/packagejson.md @@ -47,8 +47,10 @@ You can add Nx-specific configuration as follows: "test": { "outputs": [], "dependsOn": [ - "target": "build", - "projects": "self" + { + "target": "build", + "projects": "self" + } ] } } diff --git a/docs/shared/configuration/projectjson.md b/docs/shared/configuration/projectjson.md index 73779e6b114ca5..ac8f2e3dccf386 100644 --- a/docs/shared/configuration/projectjson.md +++ b/docs/shared/configuration/projectjson.md @@ -61,7 +61,7 @@ Let's look at the following `project.json`: } }, "tags": ["scope:myteam"], - "implicitDependencies": ["anotherlib"]] + "implicitDependencies": ["anotherlib"] } ``` @@ -151,8 +151,11 @@ or `nx run mylib:build:configuration=production`. The following code snippet shows how the executor options get constructed: ```javascript -require(`@nrwl/jest`).executors['jest']({ ...options, ...selectedConfiguration, ...commandLineArgs } -}) // Pseudocode +require(`@nrwl/jest`).executors['jest']({ + ...options, + ...selectedConfiguration, + ...commandLineArgs, +}); // Pseudocode ``` The selected configuration adds/overrides the default options, and the provided command line args add/override the diff --git a/docs/shared/cypress-plugin.md b/docs/shared/cypress-plugin.md index 25328304462262..1632e656bcac20 100644 --- a/docs/shared/cypress-plugin.md +++ b/docs/shared/cypress-plugin.md @@ -27,19 +27,17 @@ You can create a new Cypress E2E project for an existing project. If the `@nrwl/cypress` package is not installed, install the version that matches your `@nrwl/workspace` version. -```sh -#yarn +```bash yarn add --dev @nrwl/cypress ``` -```sh -#npm +```bash npm install --save-dev @nrwl/cypress ``` Next, generate an E2E project based on an existing project. -```sh +```bash nx g @nrwl/cypress:cypress-project your-app-name-e2e --project=your-app-name ``` @@ -94,9 +92,9 @@ If you need to fine tune your Cypress setup, you can do so by modifying `cypress React Nx Tutorial - [Step 2: Add E2E Tests](/react-tutorial/02-add-e2e-test) -- [Step 3: Display Todso](/react-tutorial/03-display-todos) +- [Step 3: Display Todos](/react-tutorial/03-display-todos) Angular Nx Tutorial - [Step 2: Add E2E Tests](/angular-tutorial/02-add-e2e-test) -- [Step 3: Display Todso](/angular-tutorial/03-display-todos) +- [Step 3: Display Todos](/angular-tutorial/03-display-todos) diff --git a/docs/shared/daemon.md b/docs/shared/daemon.md index e52f7cf49445a8..706887d79b2558 100644 --- a/docs/shared/daemon.md +++ b/docs/shared/daemon.md @@ -6,31 +6,29 @@ In version 13 we introduced the opt-in Nx Daemon which Nx can leverage to dramat Every time you invoke a target directly, such as `nx test myapp`, or run affected commands, such `nx affected:test`, Nx first needs to generate a project graph in order to figure out how all the different projects and files within your workspace fit together. Naturally, the larger your workspace gets, the more expensive this project graph generation becomes. -The first time you ever run a command which requires the project graph will naturally be the most computationally expensive, but Nx has long been able to improve the performance of subsequent project graph creation operations thanks to the fact it will cache its existing knowledge by writing files to disk. This helps quite a bit, but the recomputation is not very surgical because there is no way for the Nx CLI to know what kind of changes you might have made since the last command was run and so it has to consider a wide range of possibilities when recomputing the project graph, even with the cache available. +Thankfully, because Nx stores its metadata on disk, Nx only recomputes what has changed since the last command invocation. -If there were a way for the Nx CLI to keep up with changes _as you made them_ then it could be much more surgical with recomputation of the project graph, and therefore much faster... +This helps quite a bit, but the recomputation is not very surgical because there is no way for Nx to know what kind of changes you have made, so it has to consider a wide range of possibilities when recomputing the project graph, even with the cache available. -This is exactly what the Nx Daemon does. +## What is Nx Daemon -## How does it work? - -The Nx Daemon is a server which runs in the background, exclusively on your local machine. There is one unique Nx Daemon per Nx workspace meaning if you have multiple Nx workspaces on your machine active at the same time, the corresponding Nx Daemon instances will operate independently from one another and can be on different versions of Nx. +The Nx Daemon is a process which runs in the background on your local machine. There is one unique Nx Daemon per Nx workspace meaning if you have multiple Nx workspaces on your machine active at the same time, the corresponding Nx Daemon instances will operate independently of one another and can be on different versions of Nx. > On macOS and linux, the server runs as a unix socket, and on Windows it runs as a named pipe. -When it is running and opted into by the user, it is used as the source of truth for the workspace's project graph, because as well as being able to compute the full thing from scratch it is capable of _maintaining_ the project graph over time as changes are made in your workspace. It does this by watching for changes to the files in your workspace (intelligently throttling to ensure minimal recomputation when changing lots of files) and keeps everything within the memory of the server process, so responses can be super fast, even instant, when the project graph is unchanged between `nx ...` cli commands. +The Nx Daemon is more efficient at recomputing the project graph because it watches the files in your workspaces and updates the project graph right away (intelligently throttling to ensure minimal recomputation). It also keeps everything in memory, so the response tends to be a lot faster. In order to be most efficient, the Nx Daemon has some built in mechanisms to automatically shut down (including removing all file watchers) when it is not needed. These include: - after 3 hours of inactivity (meaning the workspace's Nx Daemon did not receive any requests or detect any file changes in that time) -- when the Nx installation changes (e.g. when you run `nx migrate`) +- when the Nx installation changes -If you ever need to manually shut down the Nx Daemon, you can run `nx reset` within the workspace in question. This will also clear any cached artifacts for the workspace and should rarely, if ever, be needed. +If you ever need to manually shut down the Nx Daemon, you can run `nx reset` within the workspace in question. -## How can it be used? +## Turning it Off -As of v13.0.0, the Nx Daemon is an opt-in feature while we gather real-world feedback. At Nrwl, we are already actively using it on our internal and client workspaces and have seen some huge performance increases for project graph computation on very large workspaces. We encourage you to consider enabling it on your workspace by following the instructions below: +As of v13.6.0, the Nx Daemon is enabled by default. If you want to turn it off, simply set `useDaemonProcess: false` in the runners options in nx.json. You can also set the `NX_DAEMON` env variable to `false`. -- To opt in to using the Nx Daemon, simply set `useDaemonProcess: true` in the runners options in nx.json. +## Logs -- To see information about the running Nx Daemon (such as its background process ID and log output file), run `nx daemon --help`. Once you have the path to that log file, you could either open it in your IDE or stream updates in a separate terminal window by running `tail -f {REPLACE_WITH_LOG_PATH}`, for example. +To see information about the running Nx Daemon (such as its background process ID and log output file), run `nx daemon --help`. Once you have the path to that log file, you could either open it in your IDE or stream updates in a separate terminal window by running `tail -f {REPLACE_WITH_LOG_PATH}`, for example. diff --git a/docs/shared/detox-plugin.md b/docs/shared/detox-plugin.md index ebb56b962f5cab..7a23ea26671b16 100644 --- a/docs/shared/detox-plugin.md +++ b/docs/shared/detox-plugin.md @@ -7,12 +7,12 @@ Detox is gray box end-to-end testing and automation library for mobile apps. It - Cross Platform - Runs on Devices - Automatically Synchronized +- Test Runner Independent +- Debuggable -## How to Use Detox +## Setting Up Detox -### Setup - -#### Install applesimutils (Mac only) +### Install applesimutils (Mac only) [applesimutils](https://github.com/wix/AppleSimulatorUtils) is a collection of utils for Apple simulators. @@ -21,7 +21,7 @@ brew tap wix/brew brew install applesimutils ``` -#### Install Jest Globally +### Install Jest Globally ```sh npm install -g jest @@ -35,30 +35,6 @@ By default, when creating a mobile application, Nx will use Detox to create the nx g @nrwl/react-native:app frontend ``` -```treeview -/ -├── apps/ -│ ├── frontend/ -│ └── frontend-e2e/ -│ ├── .detoxrc.json -│ ├── src/ -│ │ └── app.spec.ts -│ ├── .babelrc -│ ├── jest.config.json -│ ├── project.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── babel.config.json -├── jest.config.js -├── jest.preset.js -├── nx.json -├── package.json -├── tsconfig.base.json -└── workspace.json -``` - ### Creating a Detox E2E project for an existing project You can create a new Detox E2E project for an existing mobile project. @@ -85,6 +61,8 @@ Replace `your-app-name` with the app's name as defined in your `workspace.json` In addition, you need to follow [instructions at Detox](https://github.com/wix/Detox/blob/master/docs/Introduction.Android.md) to do manual setup for Android files. +## Using Detox + ### Testing Applications - Run `nx test-ios frontend-e2e` to build the iOS app and execute e2e tests with Detox for iOS (Mac only) @@ -104,6 +82,8 @@ You can run your e2e test against a production build: - `nx build-ios frontend-e2e --prod`: build the iOS app using Release configuration (Mac only) - `nx build-android frontend-e2e --prod`: build the Android app using release build type +## Configuration + ### Using .detoxrc.json If you need to fine tune your Detox setup, you can do so by modifying `.detoxrc.json` in the e2e project. diff --git a/docs/shared/express-logo.png b/docs/shared/express-logo.png new file mode 100644 index 00000000000000..19ef2ea19e29aa Binary files /dev/null and b/docs/shared/express-logo.png differ diff --git a/docs/shared/express-plugin.md b/docs/shared/express-plugin.md index e46c779e79f48e..fb545a0dbcac49 100644 --- a/docs/shared/express-plugin.md +++ b/docs/shared/express-plugin.md @@ -1,128 +1,88 @@ # Express Plugin -The Express plugin contains generators to add a new Express application to an Nx workspace. +![Express Logo](/shared/express-logo.png) -## Adding the Express plugin +[Express](https://expressjs.com/) is mature, minimal, and an open source web framework for making web applications and +apis. -Adding the Express plugin to a workspace can be done with the following: +## Setting Up Express -```bash -#yarn -yarn add -D @nrwl/express -``` +To create a new workspace with Express, run the following command: -```bash -#npm -npm install -D @nrwl/express +```shell + npx create-nx-workspace --preset=express ``` -> Note: You can create new workspace that has Express and React set up by doing `npx create-nx-workspace@latest --preset=react-express` - -## Applications +### Adding Express to an Existing Project -Generating new applications can be done with the following: +Install the express plugin -```bash -nx generate @nrwl/express:application +```shell +npm install --save-dev @nrwl/express ``` -This creates the following app structure: - -```treeview -my-org/ -├── apps/ - └── express-app/ - ├── jest.config.js - ├── src/ - │ ├── app/ - │ ├── assets/ - │ ├── environments/ - │ │ ├── environment.prod.ts - │ │ └── environment.ts - │ └── main.ts - ├── tsconfig.app.json - ├── tsconfig.json - ├── tsconfig.spec.json - └── tslint.json +```shell +yarn add --dev @nrwl/express ``` -The `main.ts` content should look similar to this: - -```typescript -import * as express from 'express'; - -const app = express(); +## Creating Applications -app.get('/api', (req, res) => { - res.send({ message: 'Welcome to express-app!' }); -}); +Add a new application to your workspace with the following command: -const port = process.env.port || 3333; -const server = app.listen(port, () => { - console.log(`Listening at http://localhost:${port}/api`); -}); -server.on('error', console.error); +```shell +nx g @nrwl/express:app my-app ``` -#### Application Proxies +Serve the application by running -Generating Express applications has an option to configure other projects in the workspace to proxy API requests. This can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. - -```bash -nx generate @nrwl/express:application --frontendProject my-react-app +```shell +nx serve my-app ``` -### Application commands - -When a Express application is added to the workspace.json (or angular.json), the following architect commands are available for execution: +This starts the application on localhost:3333/api by default. -#### build +> Express does not come with any library generators, but you can leverage the[`@nrwl/js`](/js/overview#create-libraries) plugin to generate a Node.js library for your express application. -```bash -nx build -``` +### Application Proxies -The build command will compile the application using Webpack. It supports a production configuration by building with the following command: +The Express application generator has an option to configure other projects in the workspace to proxy API requests. This +can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. -```bash -nx build --configuration=production +```shell +nx g @nrwl/express:app --frontendProject my-react-app ``` -Additional configurations can be added in the workspace.json. Changing the `--configuration` flag with the new configuration name will run that config. +## Using Express -#### serve +### Testing Projects -```bash -nx serve -``` +You can run unit tests with: -The serve command runs the `build` target, and executes the application. - -By default, the serve command will run in watch mode. This allows code to be changed, and the Express application to be rebuilt automatically. -Express applications also have the `inspect` flag set, so you can attach your debugger to the running instance. - -##### Debugging - -Debugging is set to use a random port that is available on the system. The port can be changed by setting the port option in the `serve` architect in the workspace.json. Or by running the serve command with `--port `. +```shell +nx test +``` -For additional information on how to debug Node applications, see the [Node.js debugging getting started guide](https://expressjs.org/en/docs/guides/debugging-getting-started/#inspector-clients). +### Building Projects -##### Waiting for other builds +Express projects can be built with: -Setting the `waitUntilTargets` option with an array of projects (with the following format: `"project:architect"`) will execute those commands before serving the Express application. +```shell +nx build +``` -#### lint +Build artifacts will be found in the `dist` directory under `apps/` by default. Customize the build +configuration by editing `outputPath` in the [project configuration](/configuration/projectjson). -The lint command will run linting within the scope of the Express app. +### Waiting for Other Tasks -```bash -nx lint -``` +You can wait for other tasks to run before serving the express app which can be handy for spinning up various services +the application depends on— for example, other apis in a microservice. -#### test +Setting the `waitUntilTargets` option with an array of targets (format: `"project:target"`) executes those tasks +before serving the Express application. -Test will execute Jest tests within the scope of the Express app. +## More Documentation -```bash -nx test -``` +- [Using Jest](/jest/overview) +- [@nrwl/js](/js/overview) +- [Express](https://expressjs.com/) diff --git a/docs/shared/guides/react-native.md b/docs/shared/guides/react-native.md index 629e1f7733e114..25cfda4425865c 100644 --- a/docs/shared/guides/react-native.md +++ b/docs/shared/guides/react-native.md @@ -266,7 +266,7 @@ NX_BUILD_NUMBER=123 Then access variables defined there from your app: -``` +```js import Config from 'react-native-config'; Config.NX_BUILD_NUMBER; // '123' diff --git a/docs/shared/guides/storybook/plugin-angular.md b/docs/shared/guides/storybook/plugin-angular.md index b45da1fe070799..792597b46b6287 100644 --- a/docs/shared/guides/storybook/plugin-angular.md +++ b/docs/shared/guides/storybook/plugin-angular.md @@ -194,7 +194,7 @@ Storybook for Angular needs a default project specified in order to run. The rea If you're using Nx version `>=13.4.6` either in a new Nx workspace, or you migrated your older Nx workspace to Nx version `>=13.4.6`, Nx will automatically add the `projectBuildConfig` property in your projects `project.json` files, for projects that are using Storybook. It will look like this: -``` +```json "storybook": { "executor": "@nrwl/storybook:storybook", "options": { @@ -224,13 +224,13 @@ In your project's `project.json` file find the `storybook` and `build-storybook` After you add this property, you can run your `storybook` and `build-storybook` executors as normal: -``` +```bash nx storybook my-project ``` and -``` +```bash nx build-storybook my-project ``` @@ -238,13 +238,13 @@ nx build-storybook my-project The way you would run your `storybook` and your `build-storybook` executors would be: -``` +```bash nx storybook my-project --projectBuildConfig=my-project:build-storybook ``` and -``` +```bash nx build-storybook my-project --projectBuildConfig=my-project:build-storybook ``` diff --git a/docs/shared/jest-plugin.md b/docs/shared/jest-plugin.md index ce9e27701b20f5..bb77bc1a9e7348 100644 --- a/docs/shared/jest-plugin.md +++ b/docs/shared/jest-plugin.md @@ -2,109 +2,122 @@ ![Jest logo](/shared/jest-logo.png) -[Jest](https://jestjs.io/) is an open source test runner created by Facebook. It is used within Facebook internally as well as many other enterprise and open source projects including Nx itself! +[Jest](https://jestjs.io/) is an open source test runner created by Facebook. It has a lot of great features: -## Reasons for Using Jest +- Immersive watch mode for providing near instant feedback when developing tests. +- Snapshot testing for validating features. +- Great built-in reporter for printing out test results. -- Jest was built with monorepos in mind and is able to isolate the important parts of a monorepo to test. -- Jest has a great built-in reporter for printing out results of tests. -- Jest has an immersive watch mode which provides near instant feedback when developing tests. -- Jest provides the ability to use Snapshot Testing to validate features. -- And more... - -## How to use Jest +## Setting up Jest By default, Nx will use Jest when creating applications and libraries. -```treeview -/ -├── apps/ -│ ├── frontend/ -│ │ ├── src/ -│ │ ├── browserslist -│ │ ├── jest.config.js # <== jest config -│ │ ├── tsconfig.app.json -│ │ ├── tsconfig.json -│ │ └── tsconfig.spec.json -│ └── frontend-e2e/ -├── libs/ -├── tools/ -├── nx.json -├── package.json -├── README.md -├── workspace.json -└── tsconfig.base.json +```shell +nx g @nrwl/web:app frontend +``` + +### Adding Jest to an Existing Project + +Add Jest to a project using the `jest-project` generator from `@nrwl/jest`. + +First, install `@nrwl/jest`, if not already installed using your preferred package manager. + +```shell +npm install --save-dev @nrwl/jest ``` -Depending on the project you are creating, Nx can support other test runners in addition to Jest. You can configure the test runner you use by passing `--unit-test-runner=jest` when creating applications or libraries. +```shell +yarn add --dev @nrwl/jest +``` -### Running Tests +Once installed, run the `jest-project` generator -```bash +```shell +nx g @nrwl/jest:jest-project --project= +``` + +> Hint: You can use the `--dry-run` flag to see what will be generated. + +Replacing `` with the name of the project you're wanting to add Jest too. + +## Using Jest + +### Testing Applications + +Run the Jest test with + +```shell nx test frontend ``` -### Snapshot Testing +### Watching for Changes + +Using the `--watch` flag will run the tests whenever a file changes. + +```shell +nx test frontend --watch +``` -Jest has support for **Snapshot Testing**, a tool which simplifies validating data did not change. Check out the [official Jest Documentation on Snapshot Testing](https://jestjs.io/docs/en/snapshot-testing). +### Snapshot Testing -#### Writing Tests Using Snapshot Testing +Jest has support for **Snapshot Testing**, a tool which simplifies validating data. Check out the [official Jest Documentation on Snapshot Testing](https://jestjs.io/docs/en/snapshot-testing). -To write a test which uses **Snapshot Testing**, use the `toMatchSnapshot()` matcher. +Example of using snapshots: ```typescript -describe('Home Page', () => { - it('should have a header', () => { - const header = renderHeader(); - expect(header).toMatchSnapshot(); +describe('SuperAwesomFunction', () => { + it('should return the correct data shape', () => { + const actual = superAwesomFunction(); + expect(actual).toMatchSnapshot(); }); }); ``` -The snapshot will be generated the first time the test is run. If the contents of that snapshot change, the test will fail indicating unexpected changes to the snapshot. Below is an example of the test results if the hamburger icon disappears unintentionally. - -```bash -Home Page > should have a header - expect(value).toMatchSnapshot() - Received value does not match stored snapshot "Home Page should have a header 1". - - Snapshot -+ Received -
-

-- -- hamburger -- - Example -

-
+When using snapshots, you can update them with the `--updateSnapshot` flag, `-u` for short. + +> By default, snapshots will be generated when there are not existing snapshots for the associated test. + +```shell +nx test frontend -u ``` -> Note: These snapshot files should be checked in with your code. +Snapshot files should be checked in with your code. -#### Updating Snapshots +## Configurations -When intentionally changing the contents of a snapshot, you can run tests with the `--updateSnapshot` flag to update failing snapshots instead of failing the test. +### Jest -```bash -nx test libname --updateSnapshot -``` +Primary configurations for Jest will be via the `jest.config.js` file that generated for your project. This file will extend the root `jest.config.js` file. Learn more about [Jest configurations](https://jestjs.io/docs/configuration#options). -> Make sure no **unintentional** snapshots are failing **BEFORE** updating failing snapshots. +### Nx -### Watching for Changes +Nx Jest Plugin options can be configured via the [project config file](/configuration/projectjson) or via the [command line flags](/jest/jest). -If you are a developer making changes locally to a library, start jest's interactive watch mode to run the library's tests related to uncommitted changes and then rerun tests whenever files are changed. +> Hint: Use `--help` to see all available options +> +> ```shell +> nx test --help +> ``` -```bash -nx test libname --watch -``` +### Code Coverage + +Enable code coverage with the `--coverage` flag or by adding it to the executor options in the [project configuration file](/configuration/projectjson). + +By default, coverage reports will be generated in the `coverage/` directory under projects name. i.e. `coverage/apps/frontend`. Modify this directory with the `--coverageDirectory` flag. Coverage reporters can also be customized with the `--coverageReporters` flag. -#### Debugging Failing Tests +> `coverageDirectory` and `coverageReporters` are configurable via the project configuration file as well. -To debug failing tests using Chrome Devtools or an IDE you can run the test command through node's `--inspect-brk` flag. +## Debugging Failing Tests -```bash -node --inspect-brk ./node_modules/@nrwl/cli/bin/nx test libname +If your code editor doesn't provide a way to debug your tests, you can leverage the Chrome DevTools to debug your tests with the `--inspect-brk` flag for node. + +```shell +node --inspect-brk ./node_modules/@nrwl/cli/bin/nx test ``` -Now, you can visit [chrome://inspect](chrome://inspect) in Chrome and inspect the target to attach to the node process. You can now use Chrome Devtools to step through your code line by line and debug the cause of the failing tests. Visit the official [Jest documentation](https://jestjs.io/docs/en/troubleshooting#tests-are-failing-and-you-don-t-know-why) to find out more. +Enter [chrome://inspect](chrome://inspect) in Chrome address bar and inspect the target to attach to the node process. Visit the official [Jest documentation](https://jestjs.io/docs/en/troubleshooting#tests-are-failing-and-you-don-t-know-why) to find out more. + +## More Documentation + +- [Jest Docs](https://jestjs.io/) +- [@nrwl/jest options](/jest/jest) diff --git a/docs/shared/node-plugin.md b/docs/shared/node-plugin.md index 814ca23eeed6bb..9e62c5a5dafe54 100644 --- a/docs/shared/node-plugin.md +++ b/docs/shared/node-plugin.md @@ -1,153 +1,98 @@ # Node Plugin -The Node Plugin contains generators and executors to manage Node applications within an Nx workspace. +The Node Plugin contains generators and executors to manage Node applications within an Nx workspace. It provides: -## Installing the Node Plugin +## Setting Up Node -Installing the Node plugin to a workspace can be done with the following: +To add the Node plugin to an existing workspace, run one of the following: ```bash -#yarn -yarn add -D @nrwl/node -``` - -```bash -#npm +# For npm users npm install -D @nrwl/node -``` - -## Applications -Generating new applications can be done with the following: - -```bash -nx generate @nrwl/node:application -``` - -This creates the following app structure: - -```treeview -my-org/ -├── apps/ - └── node-app/ - ├── jest.config.js - ├── src/ - │ ├── app/ - │ ├── assets/ - │ ├── environments/ - │ │ ├── environment.prod.ts - │ │ └── environment.ts - │ └── main.ts - ├── tsconfig.app.json - ├── tsconfig.json - ├── tsconfig.spec.json - └── tslint.json +# For yarn users +yarn add -D @nrwl/node ``` -From here files can be added within the `app` folder. -Make sure to import any files within the `main.ts` file so that they can be executed when the application is ran. +### Creating Applications -#### Application Proxies - -Generating Node applications has an option to configure other projects in the workspace to proxy API requests. This can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. +You can add a new application with the following: ```bash -nx generate @nrwl/node:application --frontendProject my-react-app +nx g @nrwl/node:application my-new-app ``` -### Application commands +You can run your application with `nx serve my-new-app`, which starts it in watch mode. -When a Node application is added to the workspace.json (or angular.json), the following architect commands are available for execution: +### Creating Libraries -#### build +Node libraries are a good way to separate features within your organization. To create a Node library run the following command: ```bash -nx build -``` - -The build command will compile the application using Webpack. It supports a production configuration by building with the following command: +nx g @nrwl/js:node my-new-lib -```bash -nx build --configuration=production +# If you want the library to be buildable or publishable to npm +nx g @nrwl/node:lib my-new-lib --buildable +nx g @nrwl/node:lib my-new-lib \ +--publishable \ +--importPath=@myorg/my-new-lib ``` -Additional configurations can be added in the workspace.json. Changing the `--configuration` flag with the new configuration name will run that config. +## Using Node + +### Testing Projects -#### serve +You can run unit tests with: ```bash -nx serve +nx test my-new-app +nx test my-new-lib ``` -The serve command runs the `build` target, and executes the application. - -By default, the serve command will run in watch mode. This allows code to be changed, and the Node application to be rebuilt automatically. -Node applications also have the `inspect` flag set, so you can attach your debugger to the running instance. - -##### Debugging - -Debugging is set to use a random port that is available on the system. The port can be changed by setting the port option in the `serve` architect in the workspace.json. Or by running the serve command with `--port `. - -For additional information on how to debug Node applications, see the [Node.js debugging getting started guide](https://nodejs.org/en/docs/guides/debugging-getting-started/#inspector-clients). +Replace `my-new-app` with the name or your project. This command works for both applications and libraries. -#### lint +### Building Projects -The lint command will run linting within the scope of the Node app. +Node applications can be build with: ```bash -nx lint +nx build my-new-app ``` -#### test - -Test will execute Jest tests within the scope of the Node app. +And if you generated a library with `--buildable`, then you can build a library as well: ```bash -nx test +nx build my-new-lib ``` -## Libraries +The output is in the `dist` folder. You can customize the output folder by setting `outputPath` in the project's `project.json` file. -Node libraries are a good way to separate features within your organization. To create a Node library run the following command: +### Application Proxies -```bash -nx generate @nrwl/node:library -``` - -#### Buildable libraries - -Libraries can also be enabled to be built separately from apps. To create a buildable library, add the `--buildable` flag to the generate command above. +Generating Node applications has an option to configure other projects in the workspace to proxy API requests. This can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. ```bash -nx generate @nrwl/node:library --buildable +nx g @nrwl/node:application my-new-app \ +--frontendProject my-react-app ``` -### Library commands - -When a Node library is added to the workspace.json (or angular.json), the following architect commands are available for execution: +### Debugging -#### lint - -The lint command will run linting within the scope of the Node library. - -```bash -nx lint -``` +Debugging is set to use a random port that is available on the system. The port can be changed by setting the port option in the `serve` architect in the workspace.json. Or by running the serve command with `--port `. -#### test +For additional information on how to debug Node applications, see the [Node.js debugging getting started guide](https://nodejs.org/en/docs/guides/debugging-getting-started/#inspector-clients). -Test will execute Jest tests within the scope of the Node library. +## More Documentation -```bash -nx test -``` +- [Using Cypress](/cypress/overview) +- [Using Jest](/jest/overview) -#### build +### Executors / Builders -The build command will only be available if the library was generated with the `--buildable` flag. +- [build](/node/build) - Builds a Node application +- [package](/node/package) - Packages a Node library -Buildable Node libraries use TypeScript to compile the source. The tsconfig files that are generated with the library allow customization of the compiled output. +### Generators -```bash -nx build -``` +- [application](/node/application) - Create a Node application +- [library](/node/library) - Create a Node library diff --git a/docs/shared/nx-plugin.md b/docs/shared/nx-plugin.md index 88d91abbe6fa7f..2a6360ff41a5c7 100644 --- a/docs/shared/nx-plugin.md +++ b/docs/shared/nx-plugin.md @@ -20,57 +20,6 @@ This command creates a brand new workspace, and sets up a pre-configured plugin > Note, the command above will create a plugin the package name set to `@my-org/my-plugin`. You can pass `--importPath` to provide a different package name. -## Workspace Structure - -After executing the above command, the following tree structure is created: - -```treeview -my-org/ -├── e2e/ -│ └── my-plugin-e2e/ -│ ├── jest.config.js -│ ├── tests/ -│ │ └── my-plugin.test.ts -│ ├── tsconfig.json -│ └── tsconfig.spec.json -├── packages/ -│ └── my-plugin/ -│ ├── README.md -│ ├── executors.json -│ ├── generators.json -│ ├── jest.config.js -│ ├── package.json -│ ├── src/ -│ │ ├── executors/ -│ │ │ └── my-plugin/ -│ │ │ ├── executor.spec.ts -│ │ │ ├── executor.ts -│ │ │ ├── schema.d.ts -│ │ │ └── schema.json -│ │ ├── index.ts -│ │ └── generators/ -│ │ └── my-plugin/ -│ │ ├── files/ -│ │ │ └── src/ -│ │ │ └── index.ts.__template__ -│ │ ├── schema.d.ts -│ │ ├── schema.json -│ │ ├── generator.spec.ts -│ │ └── generator.ts -│ ├── tsconfig.json -│ ├── tsconfig.lib.json -│ └── tsconfig.spec.json -├── tools -│ ├── generators/ -│ └── tsconfig.tools.json -├── jest.config.js -├── nx.json -├── package.json -├── tsconfig.base.json -├── workspace.json -└── yarn.lock -``` - > If you do not want to create a new workspace, install the `@nrwl/nx-plugin` dependency in an already existing workspace with npm or yarn. Then run `nx g @nrwl/nx-plugin:plugin [pluginName]`. A new plugin is created with a default generator, executor, and e2e app. diff --git a/docs/shared/react-native-plugin.md b/docs/shared/react-native-plugin.md index 3cf53659b29fa3..75881960124b94 100644 --- a/docs/shared/react-native-plugin.md +++ b/docs/shared/react-native-plugin.md @@ -2,90 +2,72 @@ ![React Logo](/shared/react-logo.png) +React Native brings React's declarative UI framework to iOS and Android. With React Native, you use native UI controls and have full access to the native platform. + The Nx Plugin for React Native contains generators for managing React Native applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Jest, Detox, and Storybook. - Scaffolding for creating buildable libraries that can be published to npm. - Utilities for automatic workspace refactoring. -## Adding the React Native plugin +## Setting Up React Native + +### Create a New Workspace -Adding the React plugin to a workspace can be done with the following: +The easiest way to create your workspace is via `npx`. ```bash -#yarn -yarn add -D @nrwl/react-native +npx create-nx-workspace your-workspace-name \ +--preset=react-native \ +--appName=your-app-name ``` +**Note:** You can also run the command without arguments to go through the interactive prompts. + ```bash -#npm -npm install -D @nrwl/react-native +npx create-nx-workspace your-workspace-name ``` -> Note: You can create a new workspace that has React set up by doing `npx create-nx-workspace@latest --preset=react-native` - -The file structure for a React application looks like: - -```treeview -/ -├── apps/ -│ ├── myapp/ -│ │ ├── app.json -│ │ ├── metro.config.js -│ │ ├── android/ -│ │ │ ├── app/ -│ │ │ ├── gradle/ -│ │ │ ├── build.gradle -│ │ │ ├── gradle.properties -│ │ │ ├── gradlew -│ │ │ ├── settings.gradle -│ │ ├── ios/ -│ │ │ ├── Mobile/ -│ │ │ ├── Mobile.xcodeproj/ -│ │ │ ├── Mobile.xcworkspace/ -│ │ │ ├── Podfile -│ │ │ ├── Podfile.lock -│ │ ├── src/ -│ │ │ ├── main.tsx -│ │ │ └── app/ -│ │ │ ├── App.tsx -│ │ │ └── App.spec.tsx -│ │ ├── .babelrc -│ │ ├── jest.config.js -│ │ ├── test-setup.ts -│ │ ├── package.json -│ │ ├── project.json -│ │ ├── tsconfig.json -│ │ ├── tsconfig.app.json -│ │ └── tsconfig.spec.json -│ └── myapp-e2e/ -│ ├── .detoxrc.json -│ ├── src/ -│ │ └── app.spec.ts -│ ├── .babelrc -│ ├── jest.config.json -│ ├── project.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── babel.config.json -├── jest.config.js -├── jest.preset.js -├── nx.json -├── package.json -├── tsconfig.base.json -└── workspace.json +### Adding React Native to an Existing Workspace + +For existing Nx workspaces, install the `@nrwl/react-native` package to add React Native capabilities to it. + +```bash +npm install @nrwl/react-native --save-dev + +# Or with yarn +yarn add @nrwl/react-native --dev ``` -## See Also +### Generating Applications -- [Using Detox](/detox/overview) -- [Using Jest](/jest/overview) +To create additional React Native apps run: + +```bash +nx g @nrwl/react-native:app your-app-name +``` + +### Generating Libraries -## Executors / Builders +To generate a new library run: -- [run-ios](/react-native/run-ios) - Builds your app and starts it on iOS simulator +```bash +npx nx g @nrwl/react-native:lib your-lib-name +``` + +### Generating Components + +To generate a new comopnent inside library run: + +```bash +npx nx g @nrwl/react-native:component your-component-name --project=your-lib-name --export +``` + +Replace `your-lib-name` with the app's name as defined in your workspace.json file. + +## Using React Native + +- [run-ios](/react-native/run-ios) - Builds your app and starts it on iOS simulator or device - [run-android](/react-native/run-android) - Builds your app and starts it on a connected Android emulator or device - [build-android](/react-native/build-android) - Release Build for Android - [start](/react-native/package) - Starts the server that communicates with connected devices @@ -93,8 +75,7 @@ The file structure for a React application looks like: - [sync-deps](/react-native/sync-deps) - Syncs dependencies to package.json (required for autolinking) - [ensure-symlink](/react-native/ensure-symlink) - Ensure workspace node_modules is symlink under app's node_modules folder -## Generators +## More Documentation -- [application](/react-native/application) - Create a React Native application -- [component](/react-native/component) - Create a React Native component -- [library](/react-native/library) - Create a React Native library +- [Using Detox](/detox/overview) +- [Using Jest](/jest/overview) diff --git a/docs/shared/react-plugin.md b/docs/shared/react-plugin.md index 8c01784564b6b0..3e5dbad7f6c748 100644 --- a/docs/shared/react-plugin.md +++ b/docs/shared/react-plugin.md @@ -2,88 +2,140 @@ ![React Logo](/shared/react-logo.png) -The Nx Plugin for React contains generators for managing React applications and libraries within an Nx workspace. It provides: +The React plugin contains executors and generators for managing React applications and libraries within an Nx workspace. +It provides: - Integration with libraries such as Jest, Cypress, and Storybook. -- Scaffolding for state management with Redux Toolkit libraries. -- Scaffolding for creating buildable libraries that can be published to npm. +- Generators for applications, libraries, components, hooks, and more. +- Library build support for publishing packages to npm or other registries. - Utilities for automatic workspace refactoring. -## Adding the React plugin +## Setting Up React -Adding the React plugin to a workspace can be done with the following: +To create a new workspace with React, run `npx create-nx-workspace@latest --preset=react`. + +To add the React plugin to an existing workspace, run one of the following: ```bash -#yarn +# For npm users +npm install -D @nrwl/react + +# For yarn users yarn add -D @nrwl/react ``` +### Creating Applications and Libraries + +You can add a new application with the following: + ```bash -#npm -npm install -D @nrwl/react +nx g @nrwl/react:app my-new-app +``` + +To start the application in development mode, run `nx serve my-new-app`. + +And add a new library as follows: + +```bash +nx g @nrwl/react:lib my-new-lib + +# If you want the library to be buildable or publishable to npm +nx g @nrwl/react:lib my-new-lib --buildable +nx g @nrwl/react:lib my-new-lib \ +--publishable \ +--importPath=@myorg/my-new-lib +``` + +Read more about [building and publishing libraries here](/structure/buildable-and-publishable-libraries). + +### Creating Components + +Adding a component to an existing project can be done with: + +```bash +nx g @nrwl/react:component my-new-component \ +--project=my-new-app + +# Note: If you want to export the component +# from the library use --export +nx g @nrwl/react:component my-new-component \ +--project=my-new-lib \ +--export +``` + +Replace `my-new-app` and `my-new-lib` with the name of your projects. + +### Creating Hooks + +If you want to add a new hook, run the following + +```bash +nx g @nrwl/react:hook my-new-hook --project=my-new-lib +``` + +Replace `my-new-lib` with the name of your project. + +## Using React + +### Testing Projects + +You can run unit tests with: + +```bash +nx test my-new-app +nx test my-new-lib ``` -> Note: You can create a new workspace that has React set up by doing `npx create-nx-workspace@latest --preset=react` - -The file structure for a React application looks like: - -```treeview -myorg/ -├── apps/ -│ ├── myapp/ -│ │ ├── src/ -│ │ │ ├── app/ -│ │ │ ├── assets/ -│ │ │ ├── environments/ -│ │ │ ├── favicon.ico -│ │ │ ├── index.html -│ │ │ ├── main.tsx -│ │ │ ├── polyfills.ts -│ │ │ └── styles.css -│ │ ├── browserslist -│ │ ├── jest.config.js -│ │ ├── tsconfig.app.json -│ │ ├── tsconfig.json -│ │ └── tsconfig.spec.json -│ └── myapp-e2e/ -│ ├── src/ -│ │ ├── fixtures/ -│ │ │ └── example.json -│ │ ├── integration/ -│ │ │ └── app.spec.ts -│ │ ├── plugins/ -│ │ │ └── index.ts -│ │ └── support/ -│ │ ├── app.po.ts -│ │ ├── commands.ts -│ │ └── index.ts -│ ├── cypress.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── README.md -├── workspace.json -├── nx.json -├── package.json -└── tsconfig.base.json +Replace `my-new-app` with the name or your project. This command works for both applications and libraries. + +You can also run E2E tests for applications: + +```bash +nx e2e my-new-app-e2e ``` -## See Also +Replace `my-new-app-e2e` with the name or your project with `-e2e` appended. + +### Building Projects + +React applications can be build with: + +```bash +nx build my-new-app +``` + +And if you generated a library with `--buildable`, then you can build a library as well: + +```bash +nx build my-new-lib +``` + +The output is in the `dist` folder. You can customize the output folder by setting `outputPath` in the +project's `project.json` file. + +The application in `dist` is deployable, and you can try it out locally with: + +```bash +npx http-server dist/apps/my-new-app +``` + +The library in `dist` is publishable to npm or a private registry. + +## More Documentation - [Using Cypress](/cypress/overview) - [Using Jest](/jest/overview) - [Using Storybook](/storybook/overview-react) -## Executors / Builders +### Executors React applications are built using the executors from the `@nrwl/web` plugin. - [build](/web/build) - Builds a web components application - [dev-server](/web/package) - Builds and serves a web application -- [package](/web/package) - Bundles artifacts for a buildable library that can be distributed as an NPM package. +- [package](/web/package) - Bundles artifacts for a buildable library that can be distributed as an npm package. -## Generators +### Generators - [application](/react/application) - Create a React application - [component](/react/component) - Create a React component diff --git a/docs/shared/react-tutorial/03-display-todos.md b/docs/shared/react-tutorial/03-display-todos.md index a546ab29a520f3..91a300cc3044dd 100644 --- a/docs/shared/react-tutorial/03-display-todos.md +++ b/docs/shared/react-tutorial/03-display-todos.md @@ -13,7 +13,7 @@ The best way to work with Cypress is to keep the failing E2E test running while To make the first assertion of the e2e test pass, update `apps/todos/src/app/app.tsx`: ```typescript -import React, { useState } from 'react'; +import { useState } from 'react'; interface Todo { title: string; @@ -47,7 +47,7 @@ export default App; **Add the `add-todo` button with the corresponding click handler.** ```typescript -import React, { useState } from 'react'; +import { useState } from 'react'; interface Todo { title: string; diff --git a/docs/shared/react-tutorial/04-connect-to-api.md b/docs/shared/react-tutorial/04-connect-to-api.md index a801517ab2e1f0..1c0ebc3e99ffc4 100644 --- a/docs/shared/react-tutorial/04-connect-to-api.md +++ b/docs/shared/react-tutorial/04-connect-to-api.md @@ -7,7 +7,7 @@ Real-world applications do not live in isolation — they need APIs to talk **Let's change our application to fetch the data from the API.** ```typescript -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; interface Todo { title: string; diff --git a/docs/shared/react-tutorial/05-add-node-app.md b/docs/shared/react-tutorial/05-add-node-app.md index 5cee68c09b142a..0ade3853bb4179 100644 --- a/docs/shared/react-tutorial/05-add-node-app.md +++ b/docs/shared/react-tutorial/05-add-node-app.md @@ -9,18 +9,19 @@ The requests fail because the API has not been created yet. Using Nx you develop Nx is an open platform with plugins for many modern tools and frameworks. **To see some plugins, run `npx nx list`:** ```bash -> NX Installed plugins: +> NX Installed plugins: - @nrwl/cypress (builders,generators) - @nrwl/jest (builders,generators) - @nrwl/linter (builders,generators) + @nrwl/cypress (executors,generators) + @nrwl/jest (executors,generators) + @nrwl/linter (executors,generators) + @nrwl/nx-cloud (generators) @nrwl/react (generators) - @nrwl/storybook (builders,generators) - @nrwl/web (builders,generators) - @nrwl/workspace (builders,generators) + @nrwl/storybook (executors,generators) + @nrwl/web (executors,generators) + @nrwl/workspace (executors,generators) -> NX Also available: +> NX Also available: @nrwl/angular (generators) @nrwl/express (executors,generators) @@ -30,21 +31,13 @@ Nx is an open platform with plugins for many modern tools and frameworks. **To s @nrwl/nx-plugin (executors,generators) -> NX Community plugins: +> NX Community plugins: - @nxtend/ionic-react - An Nx plugin for developing Ionic React applications and libraries - @angular-architects/ddd - Nx plugin for structuring a monorepo with domains and layers + nx-plugins - Nx plugin integrations with ESBuild / Vite / Snowpack / Prisma, with derived ESBuild / nowpack / ... plugins. + @codebrew/nx-aws-cdk - An Nx plugin for aws cdk develop. ... ``` -**Now run `npx nx list @nrwl/express`, and you see:** - -```bash -> NX NOTE @nrwl/express is not currently installed - - Use "yarn add --dev @nrwl/express" to add new capabilities -``` - **Add the dependency:** ```bash @@ -72,24 +65,24 @@ After this is done, you should see something like this: ```treeview myorg/ ├── apps/ -│   ├── todos/ -│   │   ├── src/ -│   │   ├── project.json -│   │   └── proxy.conf.json -│ ├── todos-e2e/ -│ └── api/ -│ ├── src/ -│ │ ├── app/ -│ │ ├── assets/ -│ │ ├── environments/ -│ │ │ ├── environment.ts -│ │ │ └── environment.prod.ts -│ │ └── main.ts -│ ├── jest.conf.js -│ ├── project.json -│ ├── tsconfig.app.json -│ ├── tsconfig.json -│ └── tsconfig.spec.json +│ ├── api/ +│ │ ├── src/ +│ │ │ ├── app/ +│ │ │ ├── assets/ +│ │ │ ├── environments/ +│ │ │ │ ├── environment.ts +│ │ │ │ └── environment.prod.ts +│ │ │ └── main.ts +│ │ ├── jest.conf.js +│ │ ├── project.json +│ │ ├── tsconfig.app.json +│ │ ├── tsconfig.json +│ │ └── tsconfig.spec.json +│ ├── todos/ +│ │ ├── src/ +│ │ ├── project.json +│ │ └── proxy.conf.json +│ └── todos-e2e/ ├── libs/ ├── tools/ ├── workspace.json @@ -129,7 +122,7 @@ export function addTodoRoutes(app: Express) { } ``` -Here, you are building an Express application with Nx. Nx also comes with Nest support, and you can also use any other node library you want. +Here, you are building an Express application with Nx. Nx also comes with Next support, and you can also use any other node library you want. **Next update `apps/api/src/main.ts` to register the routes** diff --git a/docs/shared/react-tutorial/06-proxy.md b/docs/shared/react-tutorial/06-proxy.md index 1bb46ef15ee0a9..a1f88c3fa2cb45 100644 --- a/docs/shared/react-tutorial/06-proxy.md +++ b/docs/shared/react-tutorial/06-proxy.md @@ -51,7 +51,7 @@ Every target uses an executor which actually runs this target. So targets are an There are a lot of advantages to providing additional metadata to the build tool. For instance, you can introspect targets. `npx nx serve todos --help` results in: ```bash -npx nx run todos:serve [options,...] +nx run todos:serve [options,...] Options: --buildTarget Target which builds the application @@ -68,9 +68,11 @@ Options: --allowedHosts This option allows you to whitelist services that are allowed to access the dev server. --memoryLimit Memory limit for type checking service process in MB. --maxWorkers Number of workers to use for type checking. + --baseHref Base url for the application being built. + --skip-nx-cache Skip the use of Nx cache. --help Show available options for project target. ``` It helps with good editor integration (see [VSCode Support](/using-nx/console#nx-console-for-vscode)). -But, most importantly, it provides a holistic dev experience regardless of the tools used, and enables advanced build features like distributed computation caching and distributed builds. +But, most importantly, it provides a holistic dev experience regardless of the tools used, and enables advanced build features like distributed [computation caching](/using-nx/caching) and [distributed builds](/using-nx/dte). diff --git a/docs/shared/react-tutorial/07-share-code.md b/docs/shared/react-tutorial/07-share-code.md index 3c1772e2928add..fc2d3d69024073 100644 --- a/docs/shared/react-tutorial/07-share-code.md +++ b/docs/shared/react-tutorial/07-share-code.md @@ -24,7 +24,7 @@ myorg/ │ │ ├── lib/ │ │ │ └── data.ts │ │ └── index.ts -│ ├── jest.conf.js +│ ├── jest.config.js │ ├── project.json │ ├── tsconfig.json │ ├── tsconfig.lib.json @@ -45,7 +45,7 @@ export interface Todo { ### A note about VS Code : -If you're using [VS Code](https://code.visualstudio.com/) it may be necessary at this point to restart the TS server so that the new `@myorg/data` package is recognised. This may need to be done **every time a new workspace library is added**. +If you're using [VS Code](https://code.visualstudio.com/) it may be necessary at this point to restart the TS server so that the new `@myorg/data` package is recognised. This may need to be done **every time a new workspace library is added**. If you install the [Nx Console](/using-nx/console) extension you won't need to take this step. ## Refactor the API @@ -74,7 +74,7 @@ export function addTodoRoutes(app: Express) { **Next import the interface in `apps/todos/src/app/app.tsx`:** ```typescript -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { Todo } from '@myorg/data'; export const App = () => { diff --git a/docs/shared/react-tutorial/08-create-libs.md b/docs/shared/react-tutorial/08-create-libs.md index 4cf79bc9b2a984..a554b17a014297 100644 --- a/docs/shared/react-tutorial/08-create-libs.md +++ b/docs/shared/react-tutorial/08-create-libs.md @@ -31,18 +31,17 @@ myorg/ │ └── ui/ │ ├── src/ │ │ ├── lib/ -│ │ │ ├── ui.css +│ │ │ ├── ui.module.css │ │ │ ├── ui.spec.tsx │ │ │ └── ui.tsx │ │ └── index.ts -│ ├── jest.conf.js +│ ├── jest.config.js │ ├── project.json │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── tsconfig.spec.json ├── tools/ ├── nx.json -├── workspace.json ├── package.json └── tsconfig.base.json ``` @@ -88,7 +87,7 @@ myorg/ │ ├── src/ │ │ ├── lib/ │ │ │ └── todos/ -│ │ │ │ ├── todos.css +│ │ │ │ ├── todos.module.css │ │ │ │ ├── todos.spec.tsx │ │ │ │ └── todos.tsx │ │ │ ├── ui.css @@ -109,6 +108,8 @@ myorg/ **Implement the Todos component.** +`libs/ui/src/lib/todos/todos.tsx` + ```typescript import { Todo } from '@myorg/data'; import './todos.module.css'; @@ -135,7 +136,7 @@ export default Todos; **Now import `Todos` into `apps/todos/src/app/app.tsx`.** ```typescript -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { Todo } from '@myorg/data'; import { Todos } from '@myorg/ui'; diff --git a/docs/shared/web-plugin.md b/docs/shared/web-plugin.md index c2372491a946dd..0f9466927a635e 100644 --- a/docs/shared/web-plugin.md +++ b/docs/shared/web-plugin.md @@ -1,4 +1,4 @@ -# Nx Plugin for Web +# Web Plugin The Nx Plugin for Web Components contains generators for managing Web Component applications and libraries within an Nx workspace. It provides: @@ -6,72 +6,99 @@ The Nx Plugin for Web Components contains generators for managing Web Component - Scaffolding for creating buildable libraries that can be published to npm. - Utilities for automatic workspace refactoring. -## Adding the Web plugin +## Setting Up Web -Adding the Web plugin to a workspace can be done with the following: +To create a new workspace with web, run `npx create-nx-workspace@latest --preset=web`. + +To add the web plugin to an existing workspace, run one of the following: ```bash -#yarn +# For npm users +npm install -D @nrwl/web + +# For yarn users yarn add -D @nrwl/web ``` +### Creating Applications + +You can add a new application with the following: + ```bash -#npm -npm install -D @nrwl/web +nx g @nrwl/web:app my-new-app +``` + +The application uses no framework and generates with web components. You can add any framework you want on top of the default setup. + +To start the application in development mode, run `nx serve my-new-app`. + +**Note:** If you are looking to add a React application, check out the [React plugin](/react/overview). + +### Creating Libraries + +To create a generic TypeScript library (i.e. non-framework specific), use the [`@nrwl/js`](/js/overview) plugin. + +```bash +nx g @nrwl/js:lib my-new-lib + +# If you want the library to be buildable or publishable to npm +nx g @nrwl/web:lib my-new-lib --buildable +nx g @nrwl/web:lib my-new-lib \ +--publishable \ +--importPath=@myorg/my-new-lib +``` + +## Using Web + +### Testing Projects + +You can run unit tests with: + +```bash +nx test my-new-app +nx test my-new-lib +``` + +Replace `my-new-app` with the name or your project. This command works for both applications and libraries. + +You can also run E2E tests for applications: + +```bash +nx e2e my-new-app-e2e +``` + +Replace `my-new-app-e2e` with the name or your project with `-e2e` appended. + +### Building Projects + +React applications can be build with: + +```bash +nx build my-new-app +``` + +And if you generated a library with `--buildable`, then you can build a library as well: + +```bash +nx build my-new-lib ``` -> Note: You can create a new workspace that has Web Components set up by doing `npx create-nx-workspace@latest --preset=web-components` - -The file structure for a Web Components application looks like: - -```treeview -myorg/ -├── apps/ -│ ├── todos/ -│ │ ├── src/ -│ │ │ ├── app/ -│ │ │ ├── assets/ -│ │ │ ├── environments/ -│ │ │ ├── favicon.ico -│ │ │ ├── index.html -│ │ │ ├── main.ts -│ │ │ ├── polyfills.ts -│ │ │ └── styles.css -│ │ ├── browserslist -│ │ ├── jest.config.js -│ │ ├── tsconfig.app.json -│ │ ├── tsconfig.json -│ │ └── tsconfig.spec.json -│ └── todos-e2e/ -│ ├── src/ -│ │ ├── fixtures/ -│ │ │ └── example.json -│ │ ├── integration/ -│ │ │ └── app.spec.ts -│ │ ├── plugins/ -│ │ │ └── index.ts -│ │ └── support/ -│ │ ├── app.po.ts -│ │ ├── commands.ts -│ │ └── index.ts -│ ├── cypress.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── README.md -├── workspace.json -├── nx.json -├── package.json -└── tsconfig.base.json +The output is in the `dist` folder. You can customize the output folder by setting `outputPath` in the project's `project.json` file. + +The application in `dist` is deployable, and you can try it out locally with: + +```bash +npx http-server dist/apps/my-new-app ``` -## See Also +The library in `dist` is publishable to npm or a private registry. + +## More Documentation - [Using Cypress](/cypress/overview) - [Using Jest](/cypress/overview) -## Executors / Builders +## Executors - [build](/web/build) - Builds a web components application - [dev-server](/web/dev-server) - Builds and serves a web application diff --git a/docs/shared/workspace-plugin.md b/docs/shared/workspace-plugin.md index 6c4b8dc435bdf0..f6488a0b67bad3 100644 --- a/docs/shared/workspace-plugin.md +++ b/docs/shared/workspace-plugin.md @@ -48,15 +48,3 @@ Executors provide an optimized way of running targets but unfortunately, not eve Running `nx g @nrwl/workspace:run-commands printhello --project my-feature-lib --command 'echo hello'` will create a `my-feature-lib:printhello` target that executes `echo hello` in the shell. > See more about [`@nrwl/workspace:run-commands`](/workspace/run-commands-executor) - -## Generators - -- [library](/workspace/library) - Create a plain typescript library -- [move](/workspace/move) - Move a project to another directory and update all references -- [remove](/workspace/remove) - Remove a project from the workspace -- [run-commands](/workspace/run-commands-generator) - Add a target to a project that uses the run-commands executor -- [workspace-generator](/workspace/workspace-generator) - Scaffold a custom generator for use within your workspace - -## Executors / Builders - -- [run-commands](/workspace/run-commands-executor) - Execute an arbitrary command line script diff --git a/e2e/linter/src/linter.test.ts b/e2e/linter/src/linter.test.ts index af4cc5ca191c2f..607b9c0068a139 100644 --- a/e2e/linter/src/linter.test.ts +++ b/e2e/linter/src/linter.test.ts @@ -4,11 +4,9 @@ import { newProject, readFile, readJson, - removeFile, runCLI, uniq, updateFile, - updateProjectConfig, } from '@nrwl/e2e/utils'; import * as ts from 'typescript'; @@ -138,9 +136,20 @@ describe('Linter', () => { describe('workspace lint rules', () => { it('should supporting creating, testing and using workspace lint rules', () => { - newProject(); const myapp = uniq('myapp'); + const mylib = uniq('mylib'); + + const messageId = 'e2eMessageId'; + const libMethodName = 'getMessageId'; + + const projScope = newProject(); runCLI(`generate @nrwl/react:app ${myapp}`); + runCLI(`generate @nrwl/workspace:lib ${mylib}`); + // add custom function + updateFile( + `libs/${mylib}/src/lib/${mylib}.ts`, + `export const ${libMethodName} = (): '${messageId}' => '${messageId}';` + ); // Generate a new rule (should also scaffold the required workspace project and tests) const newRuleName = 'e2e-test-rule-name'; @@ -157,7 +166,10 @@ describe('Linter', () => { const updatedRuleContents = updateGeneratedRuleImplementation( newRulePath, newRuleGeneratedContents, - knownLintErrorMessage + knownLintErrorMessage, + messageId, + libMethodName, + `@${projScope}/${mylib}` ); updateFile(newRulePath, updatedRuleContents); @@ -172,7 +184,9 @@ describe('Linter', () => { }); updateFile('.eslintrc.json', JSON.stringify(eslintrc, null, 2)); - const lintOutput = runCLI(`lint ${myapp}`, { silenceError: true }); + const lintOutput = runCLI(`lint ${myapp} --verbose`, { + silenceError: true, + }); expect(lintOutput).toContain(newRuleNameForUsage); expect(lintOutput).toContain(knownLintErrorMessage); }, 1000000); @@ -189,7 +203,10 @@ describe('Linter', () => { function updateGeneratedRuleImplementation( newRulePath: string, newRuleGeneratedContents: string, - knownLintErrorMessage: string + knownLintErrorMessage: string, + messageId, + libMethodName: string, + libPath: string ): string { const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }); const newRuleSourceFile = ts.createSourceFile( @@ -199,10 +216,8 @@ function updateGeneratedRuleImplementation( true ); - const messageId = 'e2eMessageId'; - const transformer = - (context: ts.TransformationContext) => + (context: ts.TransformationContext) => (rootNode: T) => { function visit(node: ts.Node): ts.Node { /** @@ -234,13 +249,20 @@ function updateGeneratedRuleImplementation( /** * Update the rule implementation to report the knownLintErrorMessage on every Program node * + * During the debugging of the switch from ts-node to swc-node we found out + * that regular rules would work even without explicit path mapping registration, + * but rules that import runtime functionality from within the workspace + * would break the rule registration. + * + * Instead of having a static literal messageId we retreieved it via imported getMessageId method. + * * i.e. * * create(context) { * return { * Program(node) { * context.report({ - * messageId: 'e2eMessageId', + * messageId: getMessageId(), * node, * }); * } @@ -296,7 +318,11 @@ function updateGeneratedRuleImplementation( ts.factory.createObjectLiteralExpression([ ts.factory.createPropertyAssignment( 'messageId', - ts.factory.createStringLiteral(messageId) + ts.factory.createCallExpression( + ts.factory.createIdentifier(libMethodName), + [], + [] + ) ), ts.factory.createShorthandPropertyAssignment( 'node' @@ -315,7 +341,35 @@ function updateGeneratedRuleImplementation( return ts.visitEachChild(node, visit, context); } - return ts.visitNode(rootNode, visit); + /** + * Add lib import as a first line of the rule file. + * Needed for the access of getMessageId in the context report above. + * + * i.e. + * + * import { getMessageId } from "@myproj/mylib"; + * + */ + const importAdded = ts.factory.updateSourceFile(rootNode, [ + ts.factory.createImportDeclaration( + undefined, + undefined, + ts.factory.createImportClause( + false, + undefined, + ts.factory.createNamedImports([ + ts.factory.createImportSpecifier( + false, + undefined, + ts.factory.createIdentifier(libMethodName) + ), + ]) + ), + ts.factory.createStringLiteral(libPath) + ), + ...rootNode.statements, + ]); + return ts.visitNode(importAdded, visit); }; const result: ts.TransformationResult = diff --git a/e2e/workspace-integrations/src/workspace-aux-commands.test.ts b/e2e/workspace-integrations/src/workspace-aux-commands.test.ts index 00c78ac2193a6b..98e1173de26c0b 100644 --- a/e2e/workspace-integrations/src/workspace-aux-commands.test.ts +++ b/e2e/workspace-integrations/src/workspace-aux-commands.test.ts @@ -282,7 +282,7 @@ describe('dep-graph', () => { target: mylib, type: 'static', }, - { source: myapp, target: mylib2, type: 'dynamic' }, + { source: myapp, target: mylib2, type: 'static' }, ], [myappE2e]: [ { diff --git a/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx b/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx index 25486f03e1f2c4..e7b42432e4bde4 100644 --- a/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx +++ b/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx @@ -50,11 +50,42 @@ export function DocViewer({ diff --git a/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-directive.md b/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-directive.md index cb067fd1d431c4..7a7a787337ad8d 100644 --- a/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-directive.md +++ b/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-directive.md @@ -35,6 +35,14 @@ Type: `string` The name of the directive. +### export + +Default: `false` + +Type: `boolean` + +Specifies if the SCAM should be exported from the project's entry point (normally `index.ts`). It only applies to libraries. + ### flat Default: `true` diff --git a/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-pipe.md b/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-pipe.md index 877cfb04a4bdf7..64739e7f66ce13 100644 --- a/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-pipe.md +++ b/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam-pipe.md @@ -35,6 +35,14 @@ Type: `string` The name of the pipe. +### export + +Default: `false` + +Type: `boolean` + +Specifies if the SCAM should be exported from the project's entry point (normally `index.ts`). It only applies to libraries. + ### flat Default: `true` diff --git a/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam.md b/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam.md index 3fb61ccb7565c4..da181d31ebd22e 100644 --- a/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam.md +++ b/nx-dev/nx-dev/public/documentation/generated/api-angular/generators/scam.md @@ -57,6 +57,14 @@ Type: `boolean` Specifies if the style will contain `:host { display: block; }`. +### export + +Default: `false` + +Type: `boolean` + +Specifies if the SCAM should be exported from the project's entry point (normally `index.ts`). It only applies to libraries. + ### flat Default: `false` diff --git a/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/index.md b/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/index.md index 151481ec68c247..c2abb4f5b4e524 100644 --- a/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/index.md +++ b/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/index.md @@ -13,139 +13,138 @@ It only uses language primitives and immutable objects ### Project Graph Enumerations -- [DependencyType](../../generated/nx-devkit/index#dependencytype) +- [DependencyType](../../nx-devkit/index#dependencytype) ### Utils Enumerations -- [ChangeType](../../generated/nx-devkit/index#changetype) +- [ChangeType](../../nx-devkit/index#changetype) ### Project Graph Classes -- [ProjectGraphBuilder](../../generated/nx-devkit/index#projectgraphbuilder) +- [ProjectGraphBuilder](../../nx-devkit/index#projectgraphbuilder) ### Commands Interfaces -- [Target](../../generated/nx-devkit/index#target) +- [Target](../../nx-devkit/index#target) ### Other Interfaces -- [NxPlugin](../../generated/nx-devkit/index#nxplugin) +- [NxPlugin](../../nx-devkit/index#nxplugin) ### Project Graph Interfaces -- [FileData](../../generated/nx-devkit/index#filedata) -- [ProjectFileMap](../../generated/nx-devkit/index#projectfilemap) -- [ProjectGraph](../../generated/nx-devkit/index#projectgraph) -- [ProjectGraphBuilderExplicitDependency](../../generated/nx-devkit/index#projectgraphbuilderexplicitdependency) -- [ProjectGraphDependency](../../generated/nx-devkit/index#projectgraphdependency) -- [ProjectGraphExternalNode](../../generated/nx-devkit/index#projectgraphexternalnode) -- [ProjectGraphProcessorContext](../../generated/nx-devkit/index#projectgraphprocessorcontext) -- [ProjectGraphProjectNode](../../generated/nx-devkit/index#projectgraphprojectnode) +- [FileData](../../nx-devkit/index#filedata) +- [ProjectFileMap](../../nx-devkit/index#projectfilemap) +- [ProjectGraph](../../nx-devkit/index#projectgraph) +- [ProjectGraphDependency](../../nx-devkit/index#projectgraphdependency) +- [ProjectGraphExternalNode](../../nx-devkit/index#projectgraphexternalnode) +- [ProjectGraphProcessorContext](../../nx-devkit/index#projectgraphprocessorcontext) +- [ProjectGraphProjectNode](../../nx-devkit/index#projectgraphprojectnode) ### Tree Interfaces -- [FileChange](../../generated/nx-devkit/index#filechange) -- [Tree](../../generated/nx-devkit/index#tree) +- [FileChange](../../nx-devkit/index#filechange) +- [Tree](../../nx-devkit/index#tree) ### Utils Interfaces -- [JsonParseOptions](../../generated/nx-devkit/index#jsonparseoptions) -- [JsonSerializeOptions](../../generated/nx-devkit/index#jsonserializeoptions) -- [StringDeletion](../../generated/nx-devkit/index#stringdeletion) -- [StringInsertion](../../generated/nx-devkit/index#stringinsertion) +- [JsonParseOptions](../../nx-devkit/index#jsonparseoptions) +- [JsonSerializeOptions](../../nx-devkit/index#jsonserializeoptions) +- [StringDeletion](../../nx-devkit/index#stringdeletion) +- [StringInsertion](../../nx-devkit/index#stringinsertion) ### Workspace Interfaces -- [ExecutorContext](../../generated/nx-devkit/index#executorcontext) -- [ImplicitJsonSubsetDependency](../../generated/nx-devkit/index#implicitjsonsubsetdependency) -- [NxAffectedConfig](../../generated/nx-devkit/index#nxaffectedconfig) -- [NxJsonConfiguration](../../generated/nx-devkit/index#nxjsonconfiguration) -- [NxJsonProjectConfiguration](../../generated/nx-devkit/index#nxjsonprojectconfiguration) -- [ProjectConfiguration](../../generated/nx-devkit/index#projectconfiguration) -- [TargetConfiguration](../../generated/nx-devkit/index#targetconfiguration) -- [TargetDependencyConfig](../../generated/nx-devkit/index#targetdependencyconfig) -- [Task](../../generated/nx-devkit/index#task) -- [TaskGraph](../../generated/nx-devkit/index#taskgraph) -- [Workspace](../../generated/nx-devkit/index#workspace) -- [WorkspaceJsonConfiguration](../../generated/nx-devkit/index#workspacejsonconfiguration) +- [ExecutorContext](../../nx-devkit/index#executorcontext) +- [ImplicitJsonSubsetDependency](../../nx-devkit/index#implicitjsonsubsetdependency) +- [NxAffectedConfig](../../nx-devkit/index#nxaffectedconfig) +- [NxJsonConfiguration](../../nx-devkit/index#nxjsonconfiguration) +- [NxJsonProjectConfiguration](../../nx-devkit/index#nxjsonprojectconfiguration) +- [ProjectConfiguration](../../nx-devkit/index#projectconfiguration) +- [TargetConfiguration](../../nx-devkit/index#targetconfiguration) +- [TargetDependencyConfig](../../nx-devkit/index#targetdependencyconfig) +- [Task](../../nx-devkit/index#task) +- [TaskGraph](../../nx-devkit/index#taskgraph) +- [Workspace](../../nx-devkit/index#workspace) +- [WorkspaceJsonConfiguration](../../nx-devkit/index#workspacejsonconfiguration) ### Generators Type aliases -- [WorkspaceConfiguration](../../generated/nx-devkit/index#workspaceconfiguration) +- [WorkspaceConfiguration](../../nx-devkit/index#workspaceconfiguration) ### Other Type aliases -- [ProjectTargetConfigurator](../../generated/nx-devkit/index#projecttargetconfigurator) +- [ProjectTargetConfigurator](../../nx-devkit/index#projecttargetconfigurator) ### Package Manager Type aliases -- [PackageManager](../../generated/nx-devkit/index#packagemanager) +- [PackageManager](../../nx-devkit/index#packagemanager) ### Project Graph Type aliases -- [ProjectGraphNode](../../generated/nx-devkit/index#projectgraphnode) +- [ProjectGraphNode](../../nx-devkit/index#projectgraphnode) ### Utils Type aliases -- [StringChange](../../generated/nx-devkit/index#stringchange) +- [StringChange](../../nx-devkit/index#stringchange) ### Workspace Type aliases -- [Executor](../../generated/nx-devkit/index#executor) -- [Generator](../../generated/nx-devkit/index#generator) -- [GeneratorCallback](../../generated/nx-devkit/index#generatorcallback) -- [ImplicitDependencyEntry](../../generated/nx-devkit/index#implicitdependencyentry) -- [ProjectType](../../generated/nx-devkit/index#projecttype) -- [TaskGraphExecutor](../../generated/nx-devkit/index#taskgraphexecutor) +- [Executor](../../nx-devkit/index#executor) +- [Generator](../../nx-devkit/index#generator) +- [GeneratorCallback](../../nx-devkit/index#generatorcallback) +- [ImplicitDependencyEntry](../../nx-devkit/index#implicitdependencyentry) +- [ProjectType](../../nx-devkit/index#projecttype) +- [TaskGraphExecutor](../../nx-devkit/index#taskgraphexecutor) ### Logger Variables -- [logger](../../generated/nx-devkit/index#logger) +- [logger](../../nx-devkit/index#logger) ### Functions -- [addDependenciesToPackageJson](../../generated/nx-devkit/index#adddependenciestopackagejson) -- [addProjectConfiguration](../../generated/nx-devkit/index#addprojectconfiguration) -- [applyChangesToString](../../generated/nx-devkit/index#applychangestostring) -- [convertNxExecutor](../../generated/nx-devkit/index#convertnxexecutor) -- [convertNxGenerator](../../generated/nx-devkit/index#convertnxgenerator) -- [detectPackageManager](../../generated/nx-devkit/index#detectpackagemanager) -- [formatFiles](../../generated/nx-devkit/index#formatfiles) -- [generateFiles](../../generated/nx-devkit/index#generatefiles) -- [getPackageManagerCommand](../../generated/nx-devkit/index#getpackagemanagercommand) -- [getPackageManagerVersion](../../generated/nx-devkit/index#getpackagemanagerversion) -- [getProjects](../../generated/nx-devkit/index#getprojects) -- [getWorkspaceLayout](../../generated/nx-devkit/index#getworkspacelayout) -- [getWorkspacePath](../../generated/nx-devkit/index#getworkspacepath) -- [installPackagesTask](../../generated/nx-devkit/index#installpackagestask) -- [isStandaloneProject](../../generated/nx-devkit/index#isstandaloneproject) -- [joinPathFragments](../../generated/nx-devkit/index#joinpathfragments) -- [moveFilesToNewDirectory](../../generated/nx-devkit/index#movefilestonewdirectory) -- [names](../../generated/nx-devkit/index#names) -- [normalizePath](../../generated/nx-devkit/index#normalizepath) -- [offsetFromRoot](../../generated/nx-devkit/index#offsetfromroot) -- [parseJson](../../generated/nx-devkit/index#parsejson) -- [parseTargetString](../../generated/nx-devkit/index#parsetargetstring) -- [readJson](../../generated/nx-devkit/index#readjson) -- [readJsonFile](../../generated/nx-devkit/index#readjsonfile) -- [readProjectConfiguration](../../generated/nx-devkit/index#readprojectconfiguration) -- [readTargetOptions](../../generated/nx-devkit/index#readtargetoptions) -- [readWorkspaceConfiguration](../../generated/nx-devkit/index#readworkspaceconfiguration) -- [removeDependenciesFromPackageJson](../../generated/nx-devkit/index#removedependenciesfrompackagejson) -- [removeProjectConfiguration](../../generated/nx-devkit/index#removeprojectconfiguration) -- [runExecutor](../../generated/nx-devkit/index#runexecutor) -- [serializeJson](../../generated/nx-devkit/index#serializejson) -- [stripIndents](../../generated/nx-devkit/index#stripindents) -- [stripJsonComments](../../generated/nx-devkit/index#stripjsoncomments) -- [targetToTargetString](../../generated/nx-devkit/index#targettotargetstring) -- [toJS](../../generated/nx-devkit/index#tojs) -- [updateJson](../../generated/nx-devkit/index#updatejson) -- [updateProjectConfiguration](../../generated/nx-devkit/index#updateprojectconfiguration) -- [updateTsConfigsToJs](../../generated/nx-devkit/index#updatetsconfigstojs) -- [updateWorkspaceConfiguration](../../generated/nx-devkit/index#updateworkspaceconfiguration) -- [visitNotIgnoredFiles](../../generated/nx-devkit/index#visitnotignoredfiles) -- [writeJson](../../generated/nx-devkit/index#writejson) -- [writeJsonFile](../../generated/nx-devkit/index#writejsonfile) +- [addDependenciesToPackageJson](../../nx-devkit/index#adddependenciestopackagejson) +- [addProjectConfiguration](../../nx-devkit/index#addprojectconfiguration) +- [applyChangesToString](../../nx-devkit/index#applychangestostring) +- [convertNxExecutor](../../nx-devkit/index#convertnxexecutor) +- [convertNxGenerator](../../nx-devkit/index#convertnxgenerator) +- [detectPackageManager](../../nx-devkit/index#detectpackagemanager) +- [formatFiles](../../nx-devkit/index#formatfiles) +- [generateFiles](../../nx-devkit/index#generatefiles) +- [getPackageManagerCommand](../../nx-devkit/index#getpackagemanagercommand) +- [getPackageManagerVersion](../../nx-devkit/index#getpackagemanagerversion) +- [getProjects](../../nx-devkit/index#getprojects) +- [getWorkspaceLayout](../../nx-devkit/index#getworkspacelayout) +- [getWorkspacePath](../../nx-devkit/index#getworkspacepath) +- [installPackagesTask](../../nx-devkit/index#installpackagestask) +- [isStandaloneProject](../../nx-devkit/index#isstandaloneproject) +- [joinPathFragments](../../nx-devkit/index#joinpathfragments) +- [moveFilesToNewDirectory](../../nx-devkit/index#movefilestonewdirectory) +- [names](../../nx-devkit/index#names) +- [normalizePath](../../nx-devkit/index#normalizepath) +- [offsetFromRoot](../../nx-devkit/index#offsetfromroot) +- [parseJson](../../nx-devkit/index#parsejson) +- [parseTargetString](../../nx-devkit/index#parsetargetstring) +- [readJson](../../nx-devkit/index#readjson) +- [readJsonFile](../../nx-devkit/index#readjsonfile) +- [readProjectConfiguration](../../nx-devkit/index#readprojectconfiguration) +- [readTargetOptions](../../nx-devkit/index#readtargetoptions) +- [readWorkspaceConfiguration](../../nx-devkit/index#readworkspaceconfiguration) +- [removeDependenciesFromPackageJson](../../nx-devkit/index#removedependenciesfrompackagejson) +- [removeProjectConfiguration](../../nx-devkit/index#removeprojectconfiguration) +- [runExecutor](../../nx-devkit/index#runexecutor) +- [serializeJson](../../nx-devkit/index#serializejson) +- [stripIndents](../../nx-devkit/index#stripindents) +- [stripJsonComments](../../nx-devkit/index#stripjsoncomments) +- [targetToTargetString](../../nx-devkit/index#targettotargetstring) +- [toJS](../../nx-devkit/index#tojs) +- [updateJson](../../nx-devkit/index#updatejson) +- [updateProjectConfiguration](../../nx-devkit/index#updateprojectconfiguration) +- [updateTsConfigsToJs](../../nx-devkit/index#updatetsconfigstojs) +- [updateWorkspaceConfiguration](../../nx-devkit/index#updateworkspaceconfiguration) +- [visitNotIgnoredFiles](../../nx-devkit/index#visitnotignoredfiles) +- [writeJson](../../nx-devkit/index#writejson) +- [writeJsonFile](../../nx-devkit/index#writejsonfile) ## Project Graph Enumerations @@ -211,12 +210,6 @@ A plugin for Nx --- -### ProjectGraphBuilderExplicitDependency - -• **ProjectGraphBuilderExplicitDependency**: `Object` - ---- - ### ProjectGraphDependency • **ProjectGraphDependency**: `Object` @@ -375,7 +368,7 @@ A plugin for Nx ### WorkspaceConfiguration -Ƭ **WorkspaceConfiguration**: `Omit`<[`WorkspaceJsonConfiguration`](../../generated/nx-devkit/index#workspacejsonconfiguration), `"projects"`\> & `Partial`<[`NxJsonConfiguration`](../../generated/nx-devkit/index#nxjsonconfiguration)\> +Ƭ **WorkspaceConfiguration**: `Omit`<[`WorkspaceJsonConfiguration`](../../nx-devkit/index#workspacejsonconfiguration), `"projects"`\> & `Partial`<[`NxJsonConfiguration`](../../nx-devkit/index#nxjsonconfiguration)\> --- @@ -383,11 +376,11 @@ A plugin for Nx ### ProjectTargetConfigurator -Ƭ **ProjectTargetConfigurator**: (`file`: `string`) => `Record`<`string`, [`TargetConfiguration`](../../generated/nx-devkit/index#targetconfiguration)\> +Ƭ **ProjectTargetConfigurator**: (`file`: `string`) => `Record`<`string`, [`TargetConfiguration`](../../nx-devkit/index#targetconfiguration)\> #### Type declaration -▸ (`file`): `Record`<`string`, [`TargetConfiguration`](../../generated/nx-devkit/index#targetconfiguration)\> +▸ (`file`): `Record`<`string`, [`TargetConfiguration`](../../nx-devkit/index#targetconfiguration)\> ##### Parameters @@ -397,7 +390,7 @@ A plugin for Nx ##### Returns -`Record`<`string`, [`TargetConfiguration`](../../generated/nx-devkit/index#targetconfiguration)\> +`Record`<`string`, [`TargetConfiguration`](../../nx-devkit/index#targetconfiguration)\> --- @@ -413,7 +406,7 @@ A plugin for Nx ### ProjectGraphNode -Ƭ **ProjectGraphNode**<`T`\>: [`ProjectGraphProjectNode`](../../generated/nx-devkit/index#projectgraphprojectnode)<`T`\> \| [`ProjectGraphExternalNode`](../../generated/nx-devkit/index#projectgraphexternalnode) +Ƭ **ProjectGraphNode**<`T`\>: [`ProjectGraphProjectNode`](../../nx-devkit/index#projectgraphprojectnode)<`T`\> \| [`ProjectGraphExternalNode`](../../nx-devkit/index#projectgraphexternalnode) #### Type parameters @@ -427,7 +420,7 @@ A plugin for Nx ### StringChange -Ƭ **StringChange**: [`StringInsertion`](../../generated/nx-devkit/index#stringinsertion) \| [`StringDeletion`](../../generated/nx-devkit/index#stringdeletion) +Ƭ **StringChange**: [`StringInsertion`](../../nx-devkit/index#stringinsertion) \| [`StringDeletion`](../../nx-devkit/index#stringdeletion) --- @@ -435,7 +428,7 @@ A plugin for Nx ### Executor -Ƭ **Executor**<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext)) => `Promise`<`Object`\> \| `AsyncIterableIterator`<`Object`\> +Ƭ **Executor**<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../nx-devkit/index#executorcontext)) => `Promise`<`Object`\> \| `AsyncIterableIterator`<`Object`\> #### Type parameters @@ -451,10 +444,10 @@ Implementation of a target of a project ##### Parameters -| Name | Type | -| :-------- | :------------------------------------------------------------------- | -| `options` | `T` | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :-------- | :--------------------------------------------------------- | +| `options` | `T` | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | ##### Returns @@ -464,7 +457,7 @@ Implementation of a target of a project ### Generator -Ƭ **Generator**<`T`\>: (`tree`: `any`, `schema`: `T`) => `void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback)\> +Ƭ **Generator**<`T`\>: (`tree`: `any`, `schema`: `T`) => `void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback)\> #### Type parameters @@ -474,7 +467,7 @@ Implementation of a target of a project #### Type declaration -▸ (`tree`, `schema`): `void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback)\> +▸ (`tree`, `schema`): `void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback)\> A function that schedules updates to the filesystem to be done atomically @@ -487,7 +480,7 @@ A function that schedules updates to the filesystem to be done atomically ##### Returns -`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback)\> +`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) \| `Promise`<`void` \| [`GeneratorCallback`](../../nx-devkit/index#generatorcallback)\> --- @@ -519,7 +512,7 @@ A callback function that is executed after changes are made to the file system #### Index signature -▪ [key: `string`]: `T` \| [`ImplicitJsonSubsetDependency`](../../generated/nx-devkit/index#implicitjsonsubsetdependency)<`T`\> +▪ [key: `string`]: `T` \| [`ImplicitJsonSubsetDependency`](../../nx-devkit/index#implicitjsonsubsetdependency)<`T`\> --- @@ -531,7 +524,7 @@ A callback function that is executed after changes are made to the file system ### TaskGraphExecutor -Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../generated/nx-devkit/index#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext)) => `Promise`<`Record`<`string`, `Object`\>\> +Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../nx-devkit/index#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../nx-devkit/index#executorcontext)) => `Promise`<`Record`<`string`, `Object`\>\> #### Type parameters @@ -547,12 +540,12 @@ Implementation of a target of a project that handles multiple projects to be bat ##### Parameters -| Name | Type | -| :---------- | :------------------------------------------------------------------- | -| `taskGraph` | [`TaskGraph`](../../generated/nx-devkit/index#taskgraph) | -| `options` | `Record`<`string`, `T`\> | -| `overrides` | `T` | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :---------- | :--------------------------------------------------------- | +| `taskGraph` | [`TaskGraph`](../../nx-devkit/index#taskgraph) | +| `options` | `Record`<`string`, `T`\> | +| `overrides` | `T` | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | ##### Returns @@ -579,7 +572,7 @@ Implementation of a target of a project that handles multiple projects to be bat ### addDependenciesToPackageJson -▸ **addDependenciesToPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) +▸ **addDependenciesToPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Add Dependencies and Dev Dependencies to package.json @@ -593,16 +586,16 @@ This will **add** `react` and `jest` to the dependencies and devDependencies sec #### Parameters -| Name | Type | Default value | Description | -| :---------------- | :--------------------------------------------- | :--------------- | :---------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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 | +| Name | Type | Default value | Description | +| :---------------- | :----------------------------------- | :--------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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`](../../generated/nx-devkit/index#generatorcallback) +[`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Callback to install dependencies only if necessary. undefined is returned if changes are not necessary. @@ -619,12 +612,12 @@ The utility will update either files. #### Parameters -| Name | Type | Description | -| :--------------------- | :----------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | -| `projectConfiguration` | [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) | project configuration | -| `standalone?` | `boolean` | should the project use package.json? If false, the project config is inside workspace.json | +| Name | Type | Description | +| :--------------------- | :------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| `projectConfiguration` | [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) | project configuration | +| `standalone?` | `boolean` | should the project use package.json? If false, the project config is inside workspace.json | #### Returns @@ -668,10 +661,10 @@ bootstrap({ #### Parameters -| Name | Type | -| :-------- | :--------------------------------------------------------------- | -| `text` | `string` | -| `changes` | [`StringChange`](../../generated/nx-devkit/index#stringchange)[] | +| Name | Type | +| :-------- | :----------------------------------------------------- | +| `text` | `string` | +| `changes` | [`StringChange`](../../nx-devkit/index#stringchange)[] | #### Returns @@ -689,9 +682,9 @@ Use this to expose a compatible Angular Builder #### Parameters -| Name | Type | -| :--------- | :------------------------------------------------------------- | -| `executor` | [`Executor`](../../generated/nx-devkit/index#executor)<`any`\> | +| Name | Type | +| :--------- | :--------------------------------------------------- | +| `executor` | [`Executor`](../../nx-devkit/index#executor)<`any`\> | #### Returns @@ -713,9 +706,9 @@ Convert an Nx Generator into an Angular Devkit Schematic #### Parameters -| Name | Type | -| :---------- | :------------------------------------------------------------- | -| `generator` | [`Generator`](../../generated/nx-devkit/index#generator)<`T`\> | +| Name | Type | +| :---------- | :--------------------------------------------------- | +| `generator` | [`Generator`](../../nx-devkit/index#generator)<`T`\> | #### Returns @@ -750,7 +743,7 @@ Convert an Nx Generator into an Angular Devkit Schematic ### detectPackageManager -▸ **detectPackageManager**(`dir?`): [`PackageManager`](../../generated/nx-devkit/index#packagemanager) +▸ **detectPackageManager**(`dir?`): [`PackageManager`](../../nx-devkit/index#packagemanager) Detects which package manager is used in the workspace based on the lock file. @@ -762,7 +755,7 @@ Detects which package manager is used in the workspace based on the lock file. #### Returns -[`PackageManager`](../../generated/nx-devkit/index#packagemanager) +[`PackageManager`](../../nx-devkit/index#packagemanager) --- @@ -774,9 +767,9 @@ Formats all the created or updated files using Prettier #### Parameters -| Name | Type | Description | -| :----- | :--------------------------------------------- | :------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | +| Name | Type | Description | +| :----- | :----------------------------------- | :------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | #### Returns @@ -812,12 +805,12 @@ doesn't get confused about incorrect TypeScript files. #### Parameters -| Name | Type | Description | -| :-------------- | :--------------------------------------------- | :-------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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 | +| Name | Type | Description | +| :-------------- | :----------------------------------- | :-------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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 @@ -841,9 +834,9 @@ execSync(`${getPackageManagerCommand().addDev} my-dev-package`); #### Parameters -| Name | Type | -| :--------------- | :----------------------------------------------------------------- | -| `packageManager` | [`PackageManager`](../../generated/nx-devkit/index#packagemanager) | +| Name | Type | +| :--------------- | :------------------------------------------------------- | +| `packageManager` | [`PackageManager`](../../nx-devkit/index#packagemanager) | #### Returns @@ -861,9 +854,9 @@ but it can also be passed in explicitly. #### Parameters -| Name | Type | -| :--------------- | :----------------------------------------------------------------- | -| `packageManager` | [`PackageManager`](../../generated/nx-devkit/index#packagemanager) | +| Name | Type | +| :--------------- | :------------------------------------------------------- | +| `packageManager` | [`PackageManager`](../../nx-devkit/index#packagemanager) | #### Returns @@ -873,21 +866,21 @@ but it can also be passed in explicitly. ### getProjects -▸ **getProjects**(`tree`): `Map`<`string`, [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration)\> +▸ **getProjects**(`tree`): `Map`<`string`, [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration)\> Get a map of all projects in a workspace. -Use [readProjectConfiguration](../../generated/nx-devkit/index#readprojectconfiguration) if only one project is needed. +Use [readProjectConfiguration](../../nx-devkit/index#readprojectconfiguration) if only one project is needed. #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns -`Map`<`string`, [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration)\> +`Map`<`string`, [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration)\> --- @@ -906,9 +899,9 @@ Example: #### Parameters -| Name | Type | Description | -| :----- | :--------------------------------------------- | :--------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | file system tree | +| Name | Type | Description | +| :----- | :----------------------------------- | :--------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | file system tree | #### Returns @@ -929,9 +922,9 @@ Example: #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns @@ -948,12 +941,12 @@ Runs `npm install` or `yarn install`. It will skip running the install if #### Parameters -| Name | Type | Default value | Description | -| :--------------- | :----------------------------------------------------------------- | :------------ | :------------------------------------------------------------ | -| `tree` | [`Tree`](../../generated/nx-devkit/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`](../../generated/nx-devkit/index#packagemanager) | `undefined` | - | +| Name | Type | Default value | Description | +| :--------------- | :------------------------------------------------------- | :------------ | :------------------------------------------------------------ | +| `tree` | [`Tree`](../../nx-devkit/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`](../../nx-devkit/index#packagemanager) | `undefined` | - | #### Returns @@ -969,10 +962,10 @@ Returns if a project has a standalone configuration (project.json). #### Parameters -| Name | Type | Description | -| :-------- | :--------------------------------------------- | :------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `project` | `string` | the project name | +| Name | Type | Description | +| :-------- | :----------------------------------- | :------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `project` | `string` | the project name | #### Returns @@ -1004,11 +997,11 @@ Normalized path fragments and joins them #### Parameters -| Name | Type | -| :------- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `oldDir` | `string` | -| `newDir` | `string` | +| Name | Type | +| :------- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `oldDir` | `string` | +| `newDir` | `string` | #### Returns @@ -1107,10 +1100,10 @@ By default javascript-style comments are allowed. #### Parameters -| Name | Type | Description | -| :--------- | :--------------------------------------------------------------------- | :--------------------- | -| `input` | `string` | JSON content as string | -| `options?` | [`JsonParseOptions`](../../generated/nx-devkit/index#jsonparseoptions) | JSON parse options | +| Name | Type | Description | +| :--------- | :----------------------------------------------------------- | :--------------------- | +| `input` | `string` | JSON content as string | +| `options?` | [`JsonParseOptions`](../../nx-devkit/index#jsonparseoptions) | JSON parse options | #### Returns @@ -1122,7 +1115,7 @@ Object the JSON content represents ### parseTargetString -▸ **parseTargetString**(`targetString`): [`Target`](../../generated/nx-devkit/index#target) +▸ **parseTargetString**(`targetString`): [`Target`](../../nx-devkit/index#target) Parses a target string into {project, target, configuration} @@ -1141,7 +1134,7 @@ parseTargetString('proj:test:production'); // returns { project: "proj", target: #### Returns -[`Target`](../../generated/nx-devkit/index#target) +[`Target`](../../nx-devkit/index#target) --- @@ -1159,11 +1152,11 @@ Reads a json file, removes all comments and parses JSON. #### Parameters -| Name | Type | Description | -| :--------- | :--------------------------------------------------------------------- | :-------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | file system tree | -| `path` | `string` | file path | -| `options?` | [`JsonParseOptions`](../../generated/nx-devkit/index#jsonparseoptions) | Optional JSON Parse Options | +| Name | Type | Description | +| :--------- | :----------------------------------------------------------- | :-------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | file system tree | +| `path` | `string` | file path | +| `options?` | [`JsonParseOptions`](../../nx-devkit/index#jsonparseoptions) | Optional JSON Parse Options | #### Returns @@ -1200,7 +1193,7 @@ Object the JSON content of the file represents ### readProjectConfiguration -▸ **readProjectConfiguration**(`tree`, `projectName`): [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) +▸ **readProjectConfiguration**(`tree`, `projectName`): [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) Reads a project configuration. @@ -1211,14 +1204,14 @@ The utility will read from either file. #### Parameters -| Name | Type | Description | -| :------------ | :--------------------------------------------- | :---------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| Name | Type | Description | +| :------------ | :----------------------------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | #### Returns -[`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) +[`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) --- @@ -1238,10 +1231,10 @@ Works as if you invoked the target yourself without passing any command lint ove #### Parameters -| Name | Type | -| :------------------ | :------------------------------------------------------------------- | -| `__namedParameters` | [`Target`](../../generated/nx-devkit/index#target) | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :------------------ | :--------------------------------------------------------- | +| `__namedParameters` | [`Target`](../../nx-devkit/index#target) | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | #### Returns @@ -1251,27 +1244,27 @@ Works as if you invoked the target yourself without passing any command lint ove ### readWorkspaceConfiguration -▸ **readWorkspaceConfiguration**(`tree`): [`WorkspaceConfiguration`](../../generated/nx-devkit/index#workspaceconfiguration) +▸ **readWorkspaceConfiguration**(`tree`): [`WorkspaceConfiguration`](../../nx-devkit/index#workspaceconfiguration) Read general workspace configuration such as the default project or cli settings -This does _not_ provide projects configuration, use [readProjectConfiguration](../../generated/nx-devkit/index#readprojectconfiguration) instead. +This does _not_ provide projects configuration, use [readProjectConfiguration](../../nx-devkit/index#readprojectconfiguration) instead. #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns -[`WorkspaceConfiguration`](../../generated/nx-devkit/index#workspaceconfiguration) +[`WorkspaceConfiguration`](../../nx-devkit/index#workspaceconfiguration) --- ### removeDependenciesFromPackageJson -▸ **removeDependenciesFromPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../generated/nx-devkit/index#generatorcallback) +▸ **removeDependenciesFromPackageJson**(`tree`, `dependencies`, `devDependencies`, `packageJsonPath?`): [`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Remove Dependencies and Dev Dependencies from package.json @@ -1285,16 +1278,16 @@ This will **remove** `react` and `jest` from the dependencies and devDependencie #### Parameters -| Name | Type | Default value | Description | -| :---------------- | :--------------------------------------------- | :--------------- | :-------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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'` | - | +| Name | Type | Default value | Description | +| :---------------- | :----------------------------------- | :--------------- | :-------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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`](../../generated/nx-devkit/index#generatorcallback) +[`GeneratorCallback`](../../nx-devkit/index#generatorcallback) Callback to uninstall dependencies only if necessary. undefined is returned if changes are not necessary. @@ -1311,10 +1304,10 @@ The utility will update either file. #### Parameters -| Name | Type | -| :------------ | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `projectName` | `string` | +| Name | Type | +| :------------ | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `projectName` | `string` | #### Returns @@ -1362,14 +1355,14 @@ Note that the return value is a promise of an iterator, so you need to await bef #### Parameters -| Name | Type | -| :--------------------------------- | :------------------------------------------------------------------- | -| `targetDescription` | `Object` | -| `targetDescription.configuration?` | `string` | -| `targetDescription.project` | `string` | -| `targetDescription.target` | `string` | -| `options` | `Object` | -| `context` | [`ExecutorContext`](../../generated/nx-devkit/index#executorcontext) | +| Name | Type | +| :--------------------------------- | :--------------------------------------------------------- | +| `targetDescription` | `Object` | +| `targetDescription.configuration?` | `string` | +| `targetDescription.project` | `string` | +| `targetDescription.target` | `string` | +| `options` | `Object` | +| `context` | [`ExecutorContext`](../../nx-devkit/index#executorcontext) | #### Returns @@ -1392,10 +1385,10 @@ By default the JSON string is formatted with a 2 space intendation to be easy re #### Parameters -| Name | Type | Description | -| :--------- | :----------------------------------------------------------------------------- | :---------------------------------------- | -| `input` | `T` | Object which should be serialized to JSON | -| `options?` | [`JsonSerializeOptions`](../../generated/nx-devkit/index#jsonserializeoptions) | JSON serialize options | +| Name | Type | Description | +| :--------- | :------------------------------------------------------------------- | :---------------------------------------- | +| `input` | `T` | Object which should be serialized to JSON | +| `options?` | [`JsonSerializeOptions`](../../nx-devkit/index#jsonserializeoptions) | JSON serialize options | #### Returns @@ -1463,9 +1456,9 @@ Returns a string in the format "project:target[:configuration]" for the target #### Parameters -| Name | Type | Description | -| :------- | :------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `target` | [`Target`](../../generated/nx-devkit/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" ` | +| Name | Type | Description | +| :------- | :--------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `target` | [`Target`](../../nx-devkit/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 @@ -1481,9 +1474,9 @@ Rename and transpile any new typescript files created to javascript files #### Parameters -| Name | Type | -| :----- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | +| Name | Type | +| :----- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | #### Returns @@ -1506,12 +1499,12 @@ Updates a JSON value to the file system tree #### Parameters -| Name | Type | Description | -| :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/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`](../../generated/nx-devkit/index#jsonparseoptions) & [`JsonSerializeOptions`](../../generated/nx-devkit/index#jsonserializeoptions) | Optional JSON Parse and Serialize Options | +| Name | Type | Description | +| :--------- | :---------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/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`](../../nx-devkit/index#jsonparseoptions) & [`JsonSerializeOptions`](../../nx-devkit/index#jsonserializeoptions) | Optional JSON Parse and Serialize Options | #### Returns @@ -1530,11 +1523,11 @@ The utility will update either files. #### Parameters -| Name | Type | Description | -| :--------------------- | :----------------------------------------------------------------------------- | :---------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | the file system tree | -| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | -| `projectConfiguration` | [`ProjectConfiguration`](../../generated/nx-devkit/index#projectconfiguration) | project configuration | +| Name | Type | Description | +| :--------------------- | :------------------------------------------------------------------- | :---------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | the file system tree | +| `projectName` | `string` | unique name. Often directories are part of the name (e.g., mydir-mylib) | +| `projectConfiguration` | [`ProjectConfiguration`](../../nx-devkit/index#projectconfiguration) | project configuration | #### Returns @@ -1548,11 +1541,11 @@ The utility will update either files. #### Parameters -| Name | Type | -| :-------------------- | :--------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `options` | `Object` | -| `options.projectRoot` | `string` | +| Name | Type | +| :-------------------- | :----------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `options` | `Object` | +| `options.projectRoot` | `string` | #### Returns @@ -1566,14 +1559,14 @@ The utility will update either files. Update general workspace configuration such as the default project or cli settings. -This does _not_ update projects configuration, use [updateProjectConfiguration](../../generated/nx-devkit/index#updateprojectconfiguration) or [addProjectConfiguration](../../generated/nx-devkit/index#addprojectconfiguration) instead. +This does _not_ update projects configuration, use [updateProjectConfiguration](../../nx-devkit/index#updateprojectconfiguration) or [addProjectConfiguration](../../nx-devkit/index#addprojectconfiguration) instead. #### Parameters -| Name | Type | -| :---------------- | :--------------------------------------------------------------------------------- | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `workspaceConfig` | [`WorkspaceConfiguration`](../../generated/nx-devkit/index#workspaceconfiguration) | +| Name | Type | +| :---------------- | :----------------------------------------------------------------------- | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | +| `workspaceConfig` | [`WorkspaceConfiguration`](../../nx-devkit/index#workspaceconfiguration) | #### Returns @@ -1589,11 +1582,11 @@ Utility to act on all files in a tree that are not ignored by git. #### Parameters -| Name | Type | Default value | -| :-------- | :--------------------------------------------- | :------------ | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | `undefined` | -| `dirPath` | `string` | `tree.root` | -| `visitor` | (`path`: `string`) => `void` | `undefined` | +| Name | Type | Default value | +| :-------- | :----------------------------------- | :------------ | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | `undefined` | +| `dirPath` | `string` | `tree.root` | +| `visitor` | (`path`: `string`) => `void` | `undefined` | #### Returns @@ -1615,12 +1608,12 @@ Writes a JSON value to the file system tree #### Parameters -| Name | Type | Description | -| :--------- | :----------------------------------------------------------------------------- | :------------------------------ | -| `tree` | [`Tree`](../../generated/nx-devkit/index#tree) | File system tree | -| `path` | `string` | Path of JSON file in the Tree | -| `value` | `T` | Serializable value to write | -| `options?` | [`JsonSerializeOptions`](../../generated/nx-devkit/index#jsonserializeoptions) | Optional JSON Serialize Options | +| Name | Type | Description | +| :--------- | :------------------------------------------------------------------- | :------------------------------ | +| `tree` | [`Tree`](../../nx-devkit/index#tree) | File system tree | +| `path` | `string` | Path of JSON file in the Tree | +| `value` | `T` | Serializable value to write | +| `options?` | [`JsonSerializeOptions`](../../nx-devkit/index#jsonserializeoptions) | Optional JSON Serialize Options | #### Returns diff --git a/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/ngcli_adapter.md b/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/ngcli_adapter.md index 5260c352567d4e..4daeafdca476b9 100644 --- a/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/ngcli_adapter.md +++ b/nx-dev/nx-dev/public/documentation/generated/api-nx-devkit/ngcli_adapter.md @@ -4,13 +4,13 @@ ### Ng CLI Adapter Classes -- [NxScopedHost](../../generated/nx-devkit/ngcli_adapter#nxscopedhost) +- [NxScopedHost](../../nx-devkit/ngcli_adapter#nxscopedhost) ### Functions -- [mockSchematicsForTesting](../../generated/nx-devkit/ngcli_adapter#mockschematicsfortesting) -- [overrideCollectionResolutionForTesting](../../generated/nx-devkit/ngcli_adapter#overridecollectionresolutionfortesting) -- [wrapAngularDevkitSchematic](../../generated/nx-devkit/ngcli_adapter#wrapangulardevkitschematic) +- [mockSchematicsForTesting](../../nx-devkit/ngcli_adapter#mockschematicsfortesting) +- [overrideCollectionResolutionForTesting](../../nx-devkit/ngcli_adapter#overridecollectionresolutionfortesting) +- [wrapAngularDevkitSchematic](../../nx-devkit/ngcli_adapter#wrapangulardevkitschematic) ## Ng CLI Adapter Classes @@ -91,7 +91,7 @@ overrideCollectionResolutionForTesting({ ### wrapAngularDevkitSchematic -▸ **wrapAngularDevkitSchematic**(`collectionName`, `generatorName`): (`host`: [`Tree`](../../generated/nx-devkit/index#tree), `generatorOptions`: { [k: string]: `any`; }) => `Promise`<`any`\> +▸ **wrapAngularDevkitSchematic**(`collectionName`, `generatorName`): (`host`: [`Tree`](../../nx-devkit/index#tree), `generatorOptions`: { [k: string]: `any`; }) => `Promise`<`any`\> #### Parameters @@ -108,10 +108,10 @@ overrideCollectionResolutionForTesting({ ##### Parameters -| Name | Type | -| :----------------- | :--------------------------------------------- | -| `host` | [`Tree`](../../generated/nx-devkit/index#tree) | -| `generatorOptions` | `Object` | +| Name | Type | +| :----------------- | :----------------------------------- | +| `host` | [`Tree`](../../nx-devkit/index#tree) | +| `generatorOptions` | `Object` | ##### Returns diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected-apps.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected-apps.md index 456bfe0e43e466..2849cdc215efff 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected-apps.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected-apps.md @@ -67,10 +67,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### plain diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected-build.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected-build.md index c4f84847643b61..362c4b497764d9 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected-build.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected-build.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected-e2e.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected-e2e.md index f91027a5599a5b..e36525757e97e4 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected-e2e.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected-e2e.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected-graph.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected-graph.md index dcb52e385171ce..ba409666b2fad7 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected-graph.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected-graph.md @@ -101,10 +101,12 @@ Show help Bind the project graph server to a specific ip address. -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### open diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected-libs.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected-libs.md index 21b3a97af47388..27bab31a502bdd 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected-libs.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected-libs.md @@ -67,10 +67,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### plain diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected-lint.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected-lint.md index 33fad6179ef0df..e188e0034d0cde 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected-lint.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected-lint.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected-test.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected-test.md index 913a1e2032a606..da41a3d689ff23 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected-test.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected-test.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/affected.md b/nx-dev/nx-dev/public/documentation/generated/cli/affected.md index 455a5d8a3c51f1..31c8b5d9515eae 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/affected.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/affected.md @@ -85,10 +85,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### parallel diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/daemon.md b/nx-dev/nx-dev/public/documentation/generated/cli/daemon.md index fb2d28c94042b7..aa9d4a509c7477 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/daemon.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/daemon.md @@ -1,11 +1,11 @@ --- title: 'daemon - CLI command' -description: "EXPERIMENTAL: Nx DaemonThe Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph." +description: "The Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph." --- # daemon -EXPERIMENTAL: Nx DaemonThe Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph. +The Nx Daemon is a local server which runs in the background in order to intelligently cache information about the workspace's project graph. ## Usage diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/format-check.md b/nx-dev/nx-dev/public/documentation/generated/cli/format-check.md index c38f534c2c0d4f..cf036cf7991e2a 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/format-check.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/format-check.md @@ -51,10 +51,12 @@ Show help Format only libraries and applications files. -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### projects diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/format-write.md b/nx-dev/nx-dev/public/documentation/generated/cli/format-write.md index 30040747f42456..19bad53591dcdc 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/format-write.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/format-write.md @@ -51,10 +51,12 @@ Show help Format only libraries and applications files. -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### projects diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/print-affected.md b/nx-dev/nx-dev/public/documentation/generated/cli/print-affected.md index d7c22074dc32ea..cfe647da584504 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/print-affected.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/print-affected.md @@ -79,10 +79,12 @@ Latest commit of the current branch (usually HEAD) Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Isolate projects which previously failed ### runner diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/run-many.md b/nx-dev/nx-dev/public/documentation/generated/cli/run-many.md index ac31209156ef73..5c58a71ab193cb 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/run-many.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/run-many.md @@ -55,10 +55,12 @@ Exclude certain projects from being processed Show help -### only-failed +### ~~only-failed~~ Default: `false` +**Deprecated:** The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15. + Only run the target on projects which previously failed ### parallel diff --git a/nx-dev/nx-dev/public/documentation/generated/cli/workspace-lint.md b/nx-dev/nx-dev/public/documentation/generated/cli/workspace-lint.md index 86f1dd894d7cb9..385120671ef402 100644 --- a/nx-dev/nx-dev/public/documentation/generated/cli/workspace-lint.md +++ b/nx-dev/nx-dev/public/documentation/generated/cli/workspace-lint.md @@ -1,11 +1,11 @@ --- title: 'workspace-lint - CLI command' -description: 'Lint nx specific workspace files (nx.json, workspace.json) and check existence of the configured packages and apps. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file' +description: 'Lint nx specific workspace files (nx.json, workspace.json), checks if your configuration and your source code are in sync. This command identifies projects with no files in the configured project root folder, as well as files that are not part of any projects in the workspace. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file.' --- # workspace-lint -Lint nx specific workspace files (nx.json, workspace.json) and check existence of the configured packages and apps. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file +Lint nx specific workspace files (nx.json, workspace.json), checks if your configuration and your source code are in sync. This command identifies projects with no files in the configured project root folder, as well as files that are not part of any projects in the workspace. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file. ## Usage diff --git a/nx-dev/nx-dev/public/documentation/shared/angular-plugin.md b/nx-dev/nx-dev/public/documentation/shared/angular-plugin.md index fcfed58ac23af4..b2898f0fac7fc1 100644 --- a/nx-dev/nx-dev/public/documentation/shared/angular-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/angular-plugin.md @@ -18,10 +18,10 @@ The Nx Plugin for Angular contains executors, generators, and utilities for mana Adding the Angular plugin to an existing Nx workspace can be done with the following: ```bash -#yarn yarn add -D @nrwl/angular +``` -#npm +```bash npm install -D @nrwl/angular ``` diff --git a/nx-dev/nx-dev/public/documentation/shared/configuration/packagejson.md b/nx-dev/nx-dev/public/documentation/shared/configuration/packagejson.md index dc9bcb2cac024f..6086c43b3d72bb 100644 --- a/nx-dev/nx-dev/public/documentation/shared/configuration/packagejson.md +++ b/nx-dev/nx-dev/public/documentation/shared/configuration/packagejson.md @@ -47,8 +47,10 @@ You can add Nx-specific configuration as follows: "test": { "outputs": [], "dependsOn": [ - "target": "build", - "projects": "self" + { + "target": "build", + "projects": "self" + } ] } } diff --git a/nx-dev/nx-dev/public/documentation/shared/configuration/projectjson.md b/nx-dev/nx-dev/public/documentation/shared/configuration/projectjson.md index 73779e6b114ca5..ac8f2e3dccf386 100644 --- a/nx-dev/nx-dev/public/documentation/shared/configuration/projectjson.md +++ b/nx-dev/nx-dev/public/documentation/shared/configuration/projectjson.md @@ -61,7 +61,7 @@ Let's look at the following `project.json`: } }, "tags": ["scope:myteam"], - "implicitDependencies": ["anotherlib"]] + "implicitDependencies": ["anotherlib"] } ``` @@ -151,8 +151,11 @@ or `nx run mylib:build:configuration=production`. The following code snippet shows how the executor options get constructed: ```javascript -require(`@nrwl/jest`).executors['jest']({ ...options, ...selectedConfiguration, ...commandLineArgs } -}) // Pseudocode +require(`@nrwl/jest`).executors['jest']({ + ...options, + ...selectedConfiguration, + ...commandLineArgs, +}); // Pseudocode ``` The selected configuration adds/overrides the default options, and the provided command line args add/override the diff --git a/nx-dev/nx-dev/public/documentation/shared/cypress-plugin.md b/nx-dev/nx-dev/public/documentation/shared/cypress-plugin.md index 25328304462262..1632e656bcac20 100644 --- a/nx-dev/nx-dev/public/documentation/shared/cypress-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/cypress-plugin.md @@ -27,19 +27,17 @@ You can create a new Cypress E2E project for an existing project. If the `@nrwl/cypress` package is not installed, install the version that matches your `@nrwl/workspace` version. -```sh -#yarn +```bash yarn add --dev @nrwl/cypress ``` -```sh -#npm +```bash npm install --save-dev @nrwl/cypress ``` Next, generate an E2E project based on an existing project. -```sh +```bash nx g @nrwl/cypress:cypress-project your-app-name-e2e --project=your-app-name ``` @@ -94,9 +92,9 @@ If you need to fine tune your Cypress setup, you can do so by modifying `cypress React Nx Tutorial - [Step 2: Add E2E Tests](/react-tutorial/02-add-e2e-test) -- [Step 3: Display Todso](/react-tutorial/03-display-todos) +- [Step 3: Display Todos](/react-tutorial/03-display-todos) Angular Nx Tutorial - [Step 2: Add E2E Tests](/angular-tutorial/02-add-e2e-test) -- [Step 3: Display Todso](/angular-tutorial/03-display-todos) +- [Step 3: Display Todos](/angular-tutorial/03-display-todos) diff --git a/nx-dev/nx-dev/public/documentation/shared/daemon.md b/nx-dev/nx-dev/public/documentation/shared/daemon.md index e52f7cf49445a8..b95047655feb88 100644 --- a/nx-dev/nx-dev/public/documentation/shared/daemon.md +++ b/nx-dev/nx-dev/public/documentation/shared/daemon.md @@ -6,31 +6,29 @@ In version 13 we introduced the opt-in Nx Daemon which Nx can leverage to dramat Every time you invoke a target directly, such as `nx test myapp`, or run affected commands, such `nx affected:test`, Nx first needs to generate a project graph in order to figure out how all the different projects and files within your workspace fit together. Naturally, the larger your workspace gets, the more expensive this project graph generation becomes. -The first time you ever run a command which requires the project graph will naturally be the most computationally expensive, but Nx has long been able to improve the performance of subsequent project graph creation operations thanks to the fact it will cache its existing knowledge by writing files to disk. This helps quite a bit, but the recomputation is not very surgical because there is no way for the Nx CLI to know what kind of changes you might have made since the last command was run and so it has to consider a wide range of possibilities when recomputing the project graph, even with the cache available. +Thankfully, because Nx stores its metadata on disk, Nx only recomputes what has changed since the last command invocation. -If there were a way for the Nx CLI to keep up with changes _as you made them_ then it could be much more surgical with recomputation of the project graph, and therefore much faster... +This helps quite a bit, but the recomputation is not very surgical because there is no way for Nx to know what kind of changes you have made, so it has to consider a wide range of possibilities when recomputing the project graph, even with the cache available. -This is exactly what the Nx Daemon does. +## What is Nx Daemon -## How does it work? - -The Nx Daemon is a server which runs in the background, exclusively on your local machine. There is one unique Nx Daemon per Nx workspace meaning if you have multiple Nx workspaces on your machine active at the same time, the corresponding Nx Daemon instances will operate independently from one another and can be on different versions of Nx. +The Nx Daemon is a process which runs in the background on your local machine. There is one unique Nx Daemon per Nx workspace meaning if you have multiple Nx workspaces on your machine active at the same time, the corresponding Nx Daemon instances will operate independently of one another and can be on different versions of Nx. > On macOS and linux, the server runs as a unix socket, and on Windows it runs as a named pipe. -When it is running and opted into by the user, it is used as the source of truth for the workspace's project graph, because as well as being able to compute the full thing from scratch it is capable of _maintaining_ the project graph over time as changes are made in your workspace. It does this by watching for changes to the files in your workspace (intelligently throttling to ensure minimal recomputation when changing lots of files) and keeps everything within the memory of the server process, so responses can be super fast, even instant, when the project graph is unchanged between `nx ...` cli commands. +The Nx Deamon is more efficient at recomputing the project graph because it watches the files in your workspaces and updates the project graph right away (intelligently throttling to ensure minimal recomputation). It also keeps everything in memory, so the response tends to be a lot faster. In order to be most efficient, the Nx Daemon has some built in mechanisms to automatically shut down (including removing all file watchers) when it is not needed. These include: - after 3 hours of inactivity (meaning the workspace's Nx Daemon did not receive any requests or detect any file changes in that time) -- when the Nx installation changes (e.g. when you run `nx migrate`) +- when the Nx installation changes -If you ever need to manually shut down the Nx Daemon, you can run `nx reset` within the workspace in question. This will also clear any cached artifacts for the workspace and should rarely, if ever, be needed. +If you ever need to manually shut down the Nx Daemon, you can run `nx reset` within the workspace in question. -## How can it be used? +## Turning it Off -As of v13.0.0, the Nx Daemon is an opt-in feature while we gather real-world feedback. At Nrwl, we are already actively using it on our internal and client workspaces and have seen some huge performance increases for project graph computation on very large workspaces. We encourage you to consider enabling it on your workspace by following the instructions below: +As of v13.6.0, the Nx Daemon is enabled by default. If you want to turn it off, simply set `useDaemonProcess: false` in the runners options in nx.json. You can also set the `NX_DEAMON` env variable to `false`. -- To opt in to using the Nx Daemon, simply set `useDaemonProcess: true` in the runners options in nx.json. +## Logs -- To see information about the running Nx Daemon (such as its background process ID and log output file), run `nx daemon --help`. Once you have the path to that log file, you could either open it in your IDE or stream updates in a separate terminal window by running `tail -f {REPLACE_WITH_LOG_PATH}`, for example. +To see information about the running Nx Daemon (such as its background process ID and log output file), run `nx daemon --help`. Once you have the path to that log file, you could either open it in your IDE or stream updates in a separate terminal window by running `tail -f {REPLACE_WITH_LOG_PATH}`, for example. diff --git a/nx-dev/nx-dev/public/documentation/shared/detox-plugin.md b/nx-dev/nx-dev/public/documentation/shared/detox-plugin.md index ebb56b962f5cab..7a23ea26671b16 100644 --- a/nx-dev/nx-dev/public/documentation/shared/detox-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/detox-plugin.md @@ -7,12 +7,12 @@ Detox is gray box end-to-end testing and automation library for mobile apps. It - Cross Platform - Runs on Devices - Automatically Synchronized +- Test Runner Independent +- Debuggable -## How to Use Detox +## Setting Up Detox -### Setup - -#### Install applesimutils (Mac only) +### Install applesimutils (Mac only) [applesimutils](https://github.com/wix/AppleSimulatorUtils) is a collection of utils for Apple simulators. @@ -21,7 +21,7 @@ brew tap wix/brew brew install applesimutils ``` -#### Install Jest Globally +### Install Jest Globally ```sh npm install -g jest @@ -35,30 +35,6 @@ By default, when creating a mobile application, Nx will use Detox to create the nx g @nrwl/react-native:app frontend ``` -```treeview -/ -├── apps/ -│ ├── frontend/ -│ └── frontend-e2e/ -│ ├── .detoxrc.json -│ ├── src/ -│ │ └── app.spec.ts -│ ├── .babelrc -│ ├── jest.config.json -│ ├── project.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── babel.config.json -├── jest.config.js -├── jest.preset.js -├── nx.json -├── package.json -├── tsconfig.base.json -└── workspace.json -``` - ### Creating a Detox E2E project for an existing project You can create a new Detox E2E project for an existing mobile project. @@ -85,6 +61,8 @@ Replace `your-app-name` with the app's name as defined in your `workspace.json` In addition, you need to follow [instructions at Detox](https://github.com/wix/Detox/blob/master/docs/Introduction.Android.md) to do manual setup for Android files. +## Using Detox + ### Testing Applications - Run `nx test-ios frontend-e2e` to build the iOS app and execute e2e tests with Detox for iOS (Mac only) @@ -104,6 +82,8 @@ You can run your e2e test against a production build: - `nx build-ios frontend-e2e --prod`: build the iOS app using Release configuration (Mac only) - `nx build-android frontend-e2e --prod`: build the Android app using release build type +## Configuration + ### Using .detoxrc.json If you need to fine tune your Detox setup, you can do so by modifying `.detoxrc.json` in the e2e project. diff --git a/nx-dev/nx-dev/public/documentation/shared/express-logo.png b/nx-dev/nx-dev/public/documentation/shared/express-logo.png new file mode 100644 index 00000000000000..19ef2ea19e29aa Binary files /dev/null and b/nx-dev/nx-dev/public/documentation/shared/express-logo.png differ diff --git a/nx-dev/nx-dev/public/documentation/shared/express-plugin.md b/nx-dev/nx-dev/public/documentation/shared/express-plugin.md index e46c779e79f48e..cfa723c3536dcb 100644 --- a/nx-dev/nx-dev/public/documentation/shared/express-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/express-plugin.md @@ -1,128 +1,88 @@ # Express Plugin -The Express plugin contains generators to add a new Express application to an Nx workspace. +![Express Logo](/shared/express-logo.png) -## Adding the Express plugin +[Express](https://expressjs.com/) is mature, minimal, and an open source web framework for making web applications and +apis. -Adding the Express plugin to a workspace can be done with the following: +## Setting Up Express -```bash -#yarn -yarn add -D @nrwl/express -``` +To create a new workspace with Express, run the following command: -```bash -#npm -npm install -D @nrwl/express +```shell + npx create-nx-workspace --preset=express ``` -> Note: You can create new workspace that has Express and React set up by doing `npx create-nx-workspace@latest --preset=react-express` - -## Applications - -Generating new applications can be done with the following: +### Adding Express to an Existing Project -```bash -nx generate @nrwl/express:application -``` +Install the express plugin -This creates the following app structure: - -```treeview -my-org/ -├── apps/ - └── express-app/ - ├── jest.config.js - ├── src/ - │ ├── app/ - │ ├── assets/ - │ ├── environments/ - │ │ ├── environment.prod.ts - │ │ └── environment.ts - │ └── main.ts - ├── tsconfig.app.json - ├── tsconfig.json - ├── tsconfig.spec.json - └── tslint.json +```shell +npm install -D @nrwl/express ``` -The `main.ts` content should look similar to this: - -```typescript -import * as express from 'express'; - -const app = express(); - -app.get('/api', (req, res) => { - res.send({ message: 'Welcome to express-app!' }); -}); - -const port = process.env.port || 3333; -const server = app.listen(port, () => { - console.log(`Listening at http://localhost:${port}/api`); -}); -server.on('error', console.error); +```shell +yarn add -D @nrwl/express ``` -#### Application Proxies +## Creating Applications -Generating Express applications has an option to configure other projects in the workspace to proxy API requests. This can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. +Add a new application to your workspace with the following command: -```bash -nx generate @nrwl/express:application --frontendProject my-react-app +```shell +nx g @nrwl/express:app my-app ``` -### Application commands - -When a Express application is added to the workspace.json (or angular.json), the following architect commands are available for execution: +Serve the application by running -#### build - -```bash -nx build +```shell +nx serve my-app ``` -The build command will compile the application using Webpack. It supports a production configuration by building with the following command: +This starts the application on localhost:3333/api by default. -```bash -nx build --configuration=production -``` +> Express does not come with any library generators, but you can leverage the[`@nrwl/js`](/js/overview#create-libraries) plugin to generate a Node.js library for your express application. -Additional configurations can be added in the workspace.json. Changing the `--configuration` flag with the new configuration name will run that config. +### Application Proxies -#### serve +The Express application generator has an option to configure other projects in the workspace to proxy API requests. This +can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. -```bash -nx serve +```shell +nx g @nrwl/express:app --frontendProject my-react-app ``` -The serve command runs the `build` target, and executes the application. +## Using Express -By default, the serve command will run in watch mode. This allows code to be changed, and the Express application to be rebuilt automatically. -Express applications also have the `inspect` flag set, so you can attach your debugger to the running instance. +### Testing Projects -##### Debugging +You can run unit tests with: -Debugging is set to use a random port that is available on the system. The port can be changed by setting the port option in the `serve` architect in the workspace.json. Or by running the serve command with `--port `. +```shell +nx test +``` -For additional information on how to debug Node applications, see the [Node.js debugging getting started guide](https://expressjs.org/en/docs/guides/debugging-getting-started/#inspector-clients). +### Building Projects -##### Waiting for other builds +Express projects can be built with: -Setting the `waitUntilTargets` option with an array of projects (with the following format: `"project:architect"`) will execute those commands before serving the Express application. +```shell +nx build +``` -#### lint +Build artifacts will be found in the `dist` directory under `apps/` by default. Customize the build +configuration by editing `outputPath` in the [project configuration](/configuration/projectjson). -The lint command will run linting within the scope of the Express app. +### Waiting for Other Tasks -```bash -nx lint -``` +You can wait for other tasks to run before serving the express app which can be handy for spinning up various services +the application depends on— for example, other apis in a microservice. -#### test +Setting the `waitUntilTargets` option with an array of targets (format: `"project:target"`) executes those tasks +before serving the Express application. -Test will execute Jest tests within the scope of the Express app. +## More Documentation -```bash -nx test -``` +- [Using Jest](/jest/overview) +- [@nrwl/js](/js/overview) +- [Express](https://expressjs.com/) diff --git a/nx-dev/nx-dev/public/documentation/shared/guides/react-native.md b/nx-dev/nx-dev/public/documentation/shared/guides/react-native.md index 629e1f7733e114..25cfda4425865c 100644 --- a/nx-dev/nx-dev/public/documentation/shared/guides/react-native.md +++ b/nx-dev/nx-dev/public/documentation/shared/guides/react-native.md @@ -266,7 +266,7 @@ NX_BUILD_NUMBER=123 Then access variables defined there from your app: -``` +```js import Config from 'react-native-config'; Config.NX_BUILD_NUMBER; // '123' diff --git a/nx-dev/nx-dev/public/documentation/shared/guides/storybook/plugin-angular.md b/nx-dev/nx-dev/public/documentation/shared/guides/storybook/plugin-angular.md index b45da1fe070799..792597b46b6287 100644 --- a/nx-dev/nx-dev/public/documentation/shared/guides/storybook/plugin-angular.md +++ b/nx-dev/nx-dev/public/documentation/shared/guides/storybook/plugin-angular.md @@ -194,7 +194,7 @@ Storybook for Angular needs a default project specified in order to run. The rea If you're using Nx version `>=13.4.6` either in a new Nx workspace, or you migrated your older Nx workspace to Nx version `>=13.4.6`, Nx will automatically add the `projectBuildConfig` property in your projects `project.json` files, for projects that are using Storybook. It will look like this: -``` +```json "storybook": { "executor": "@nrwl/storybook:storybook", "options": { @@ -224,13 +224,13 @@ In your project's `project.json` file find the `storybook` and `build-storybook` After you add this property, you can run your `storybook` and `build-storybook` executors as normal: -``` +```bash nx storybook my-project ``` and -``` +```bash nx build-storybook my-project ``` @@ -238,13 +238,13 @@ nx build-storybook my-project The way you would run your `storybook` and your `build-storybook` executors would be: -``` +```bash nx storybook my-project --projectBuildConfig=my-project:build-storybook ``` and -``` +```bash nx build-storybook my-project --projectBuildConfig=my-project:build-storybook ``` diff --git a/nx-dev/nx-dev/public/documentation/shared/jest-plugin.md b/nx-dev/nx-dev/public/documentation/shared/jest-plugin.md index ce9e27701b20f5..bb77bc1a9e7348 100644 --- a/nx-dev/nx-dev/public/documentation/shared/jest-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/jest-plugin.md @@ -2,109 +2,122 @@ ![Jest logo](/shared/jest-logo.png) -[Jest](https://jestjs.io/) is an open source test runner created by Facebook. It is used within Facebook internally as well as many other enterprise and open source projects including Nx itself! +[Jest](https://jestjs.io/) is an open source test runner created by Facebook. It has a lot of great features: -## Reasons for Using Jest +- Immersive watch mode for providing near instant feedback when developing tests. +- Snapshot testing for validating features. +- Great built-in reporter for printing out test results. -- Jest was built with monorepos in mind and is able to isolate the important parts of a monorepo to test. -- Jest has a great built-in reporter for printing out results of tests. -- Jest has an immersive watch mode which provides near instant feedback when developing tests. -- Jest provides the ability to use Snapshot Testing to validate features. -- And more... - -## How to use Jest +## Setting up Jest By default, Nx will use Jest when creating applications and libraries. -```treeview -/ -├── apps/ -│ ├── frontend/ -│ │ ├── src/ -│ │ ├── browserslist -│ │ ├── jest.config.js # <== jest config -│ │ ├── tsconfig.app.json -│ │ ├── tsconfig.json -│ │ └── tsconfig.spec.json -│ └── frontend-e2e/ -├── libs/ -├── tools/ -├── nx.json -├── package.json -├── README.md -├── workspace.json -└── tsconfig.base.json +```shell +nx g @nrwl/web:app frontend +``` + +### Adding Jest to an Existing Project + +Add Jest to a project using the `jest-project` generator from `@nrwl/jest`. + +First, install `@nrwl/jest`, if not already installed using your preferred package manager. + +```shell +npm install --save-dev @nrwl/jest ``` -Depending on the project you are creating, Nx can support other test runners in addition to Jest. You can configure the test runner you use by passing `--unit-test-runner=jest` when creating applications or libraries. +```shell +yarn add --dev @nrwl/jest +``` -### Running Tests +Once installed, run the `jest-project` generator -```bash +```shell +nx g @nrwl/jest:jest-project --project= +``` + +> Hint: You can use the `--dry-run` flag to see what will be generated. + +Replacing `` with the name of the project you're wanting to add Jest too. + +## Using Jest + +### Testing Applications + +Run the Jest test with + +```shell nx test frontend ``` -### Snapshot Testing +### Watching for Changes + +Using the `--watch` flag will run the tests whenever a file changes. + +```shell +nx test frontend --watch +``` -Jest has support for **Snapshot Testing**, a tool which simplifies validating data did not change. Check out the [official Jest Documentation on Snapshot Testing](https://jestjs.io/docs/en/snapshot-testing). +### Snapshot Testing -#### Writing Tests Using Snapshot Testing +Jest has support for **Snapshot Testing**, a tool which simplifies validating data. Check out the [official Jest Documentation on Snapshot Testing](https://jestjs.io/docs/en/snapshot-testing). -To write a test which uses **Snapshot Testing**, use the `toMatchSnapshot()` matcher. +Example of using snapshots: ```typescript -describe('Home Page', () => { - it('should have a header', () => { - const header = renderHeader(); - expect(header).toMatchSnapshot(); +describe('SuperAwesomFunction', () => { + it('should return the correct data shape', () => { + const actual = superAwesomFunction(); + expect(actual).toMatchSnapshot(); }); }); ``` -The snapshot will be generated the first time the test is run. If the contents of that snapshot change, the test will fail indicating unexpected changes to the snapshot. Below is an example of the test results if the hamburger icon disappears unintentionally. - -```bash -Home Page > should have a header - expect(value).toMatchSnapshot() - Received value does not match stored snapshot "Home Page should have a header 1". - - Snapshot -+ Received -
-

-- -- hamburger -- - Example -

-
+When using snapshots, you can update them with the `--updateSnapshot` flag, `-u` for short. + +> By default, snapshots will be generated when there are not existing snapshots for the associated test. + +```shell +nx test frontend -u ``` -> Note: These snapshot files should be checked in with your code. +Snapshot files should be checked in with your code. -#### Updating Snapshots +## Configurations -When intentionally changing the contents of a snapshot, you can run tests with the `--updateSnapshot` flag to update failing snapshots instead of failing the test. +### Jest -```bash -nx test libname --updateSnapshot -``` +Primary configurations for Jest will be via the `jest.config.js` file that generated for your project. This file will extend the root `jest.config.js` file. Learn more about [Jest configurations](https://jestjs.io/docs/configuration#options). -> Make sure no **unintentional** snapshots are failing **BEFORE** updating failing snapshots. +### Nx -### Watching for Changes +Nx Jest Plugin options can be configured via the [project config file](/configuration/projectjson) or via the [command line flags](/jest/jest). -If you are a developer making changes locally to a library, start jest's interactive watch mode to run the library's tests related to uncommitted changes and then rerun tests whenever files are changed. +> Hint: Use `--help` to see all available options +> +> ```shell +> nx test --help +> ``` -```bash -nx test libname --watch -``` +### Code Coverage + +Enable code coverage with the `--coverage` flag or by adding it to the executor options in the [project configuration file](/configuration/projectjson). + +By default, coverage reports will be generated in the `coverage/` directory under projects name. i.e. `coverage/apps/frontend`. Modify this directory with the `--coverageDirectory` flag. Coverage reporters can also be customized with the `--coverageReporters` flag. -#### Debugging Failing Tests +> `coverageDirectory` and `coverageReporters` are configurable via the project configuration file as well. -To debug failing tests using Chrome Devtools or an IDE you can run the test command through node's `--inspect-brk` flag. +## Debugging Failing Tests -```bash -node --inspect-brk ./node_modules/@nrwl/cli/bin/nx test libname +If your code editor doesn't provide a way to debug your tests, you can leverage the Chrome DevTools to debug your tests with the `--inspect-brk` flag for node. + +```shell +node --inspect-brk ./node_modules/@nrwl/cli/bin/nx test ``` -Now, you can visit [chrome://inspect](chrome://inspect) in Chrome and inspect the target to attach to the node process. You can now use Chrome Devtools to step through your code line by line and debug the cause of the failing tests. Visit the official [Jest documentation](https://jestjs.io/docs/en/troubleshooting#tests-are-failing-and-you-don-t-know-why) to find out more. +Enter [chrome://inspect](chrome://inspect) in Chrome address bar and inspect the target to attach to the node process. Visit the official [Jest documentation](https://jestjs.io/docs/en/troubleshooting#tests-are-failing-and-you-don-t-know-why) to find out more. + +## More Documentation + +- [Jest Docs](https://jestjs.io/) +- [@nrwl/jest options](/jest/jest) diff --git a/nx-dev/nx-dev/public/documentation/shared/node-plugin.md b/nx-dev/nx-dev/public/documentation/shared/node-plugin.md index 814ca23eeed6bb..9e62c5a5dafe54 100644 --- a/nx-dev/nx-dev/public/documentation/shared/node-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/node-plugin.md @@ -1,153 +1,98 @@ # Node Plugin -The Node Plugin contains generators and executors to manage Node applications within an Nx workspace. +The Node Plugin contains generators and executors to manage Node applications within an Nx workspace. It provides: -## Installing the Node Plugin +## Setting Up Node -Installing the Node plugin to a workspace can be done with the following: +To add the Node plugin to an existing workspace, run one of the following: ```bash -#yarn -yarn add -D @nrwl/node -``` - -```bash -#npm +# For npm users npm install -D @nrwl/node -``` - -## Applications -Generating new applications can be done with the following: - -```bash -nx generate @nrwl/node:application -``` - -This creates the following app structure: - -```treeview -my-org/ -├── apps/ - └── node-app/ - ├── jest.config.js - ├── src/ - │ ├── app/ - │ ├── assets/ - │ ├── environments/ - │ │ ├── environment.prod.ts - │ │ └── environment.ts - │ └── main.ts - ├── tsconfig.app.json - ├── tsconfig.json - ├── tsconfig.spec.json - └── tslint.json +# For yarn users +yarn add -D @nrwl/node ``` -From here files can be added within the `app` folder. -Make sure to import any files within the `main.ts` file so that they can be executed when the application is ran. +### Creating Applications -#### Application Proxies - -Generating Node applications has an option to configure other projects in the workspace to proxy API requests. This can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. +You can add a new application with the following: ```bash -nx generate @nrwl/node:application --frontendProject my-react-app +nx g @nrwl/node:application my-new-app ``` -### Application commands +You can run your application with `nx serve my-new-app`, which starts it in watch mode. -When a Node application is added to the workspace.json (or angular.json), the following architect commands are available for execution: +### Creating Libraries -#### build +Node libraries are a good way to separate features within your organization. To create a Node library run the following command: ```bash -nx build -``` - -The build command will compile the application using Webpack. It supports a production configuration by building with the following command: +nx g @nrwl/js:node my-new-lib -```bash -nx build --configuration=production +# If you want the library to be buildable or publishable to npm +nx g @nrwl/node:lib my-new-lib --buildable +nx g @nrwl/node:lib my-new-lib \ +--publishable \ +--importPath=@myorg/my-new-lib ``` -Additional configurations can be added in the workspace.json. Changing the `--configuration` flag with the new configuration name will run that config. +## Using Node + +### Testing Projects -#### serve +You can run unit tests with: ```bash -nx serve +nx test my-new-app +nx test my-new-lib ``` -The serve command runs the `build` target, and executes the application. - -By default, the serve command will run in watch mode. This allows code to be changed, and the Node application to be rebuilt automatically. -Node applications also have the `inspect` flag set, so you can attach your debugger to the running instance. - -##### Debugging - -Debugging is set to use a random port that is available on the system. The port can be changed by setting the port option in the `serve` architect in the workspace.json. Or by running the serve command with `--port `. - -For additional information on how to debug Node applications, see the [Node.js debugging getting started guide](https://nodejs.org/en/docs/guides/debugging-getting-started/#inspector-clients). +Replace `my-new-app` with the name or your project. This command works for both applications and libraries. -#### lint +### Building Projects -The lint command will run linting within the scope of the Node app. +Node applications can be build with: ```bash -nx lint +nx build my-new-app ``` -#### test - -Test will execute Jest tests within the scope of the Node app. +And if you generated a library with `--buildable`, then you can build a library as well: ```bash -nx test +nx build my-new-lib ``` -## Libraries +The output is in the `dist` folder. You can customize the output folder by setting `outputPath` in the project's `project.json` file. -Node libraries are a good way to separate features within your organization. To create a Node library run the following command: +### Application Proxies -```bash -nx generate @nrwl/node:library -``` - -#### Buildable libraries - -Libraries can also be enabled to be built separately from apps. To create a buildable library, add the `--buildable` flag to the generate command above. +Generating Node applications has an option to configure other projects in the workspace to proxy API requests. This can be done by passing the `--frontendProject` with the project name you wish to enable proxy support for. ```bash -nx generate @nrwl/node:library --buildable +nx g @nrwl/node:application my-new-app \ +--frontendProject my-react-app ``` -### Library commands - -When a Node library is added to the workspace.json (or angular.json), the following architect commands are available for execution: +### Debugging -#### lint - -The lint command will run linting within the scope of the Node library. - -```bash -nx lint -``` +Debugging is set to use a random port that is available on the system. The port can be changed by setting the port option in the `serve` architect in the workspace.json. Or by running the serve command with `--port `. -#### test +For additional information on how to debug Node applications, see the [Node.js debugging getting started guide](https://nodejs.org/en/docs/guides/debugging-getting-started/#inspector-clients). -Test will execute Jest tests within the scope of the Node library. +## More Documentation -```bash -nx test -``` +- [Using Cypress](/cypress/overview) +- [Using Jest](/jest/overview) -#### build +### Executors / Builders -The build command will only be available if the library was generated with the `--buildable` flag. +- [build](/node/build) - Builds a Node application +- [package](/node/package) - Packages a Node library -Buildable Node libraries use TypeScript to compile the source. The tsconfig files that are generated with the library allow customization of the compiled output. +### Generators -```bash -nx build -``` +- [application](/node/application) - Create a Node application +- [library](/node/library) - Create a Node library diff --git a/nx-dev/nx-dev/public/documentation/shared/nx-plugin.md b/nx-dev/nx-dev/public/documentation/shared/nx-plugin.md index 88d91abbe6fa7f..2a6360ff41a5c7 100644 --- a/nx-dev/nx-dev/public/documentation/shared/nx-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/nx-plugin.md @@ -20,57 +20,6 @@ This command creates a brand new workspace, and sets up a pre-configured plugin > Note, the command above will create a plugin the package name set to `@my-org/my-plugin`. You can pass `--importPath` to provide a different package name. -## Workspace Structure - -After executing the above command, the following tree structure is created: - -```treeview -my-org/ -├── e2e/ -│ └── my-plugin-e2e/ -│ ├── jest.config.js -│ ├── tests/ -│ │ └── my-plugin.test.ts -│ ├── tsconfig.json -│ └── tsconfig.spec.json -├── packages/ -│ └── my-plugin/ -│ ├── README.md -│ ├── executors.json -│ ├── generators.json -│ ├── jest.config.js -│ ├── package.json -│ ├── src/ -│ │ ├── executors/ -│ │ │ └── my-plugin/ -│ │ │ ├── executor.spec.ts -│ │ │ ├── executor.ts -│ │ │ ├── schema.d.ts -│ │ │ └── schema.json -│ │ ├── index.ts -│ │ └── generators/ -│ │ └── my-plugin/ -│ │ ├── files/ -│ │ │ └── src/ -│ │ │ └── index.ts.__template__ -│ │ ├── schema.d.ts -│ │ ├── schema.json -│ │ ├── generator.spec.ts -│ │ └── generator.ts -│ ├── tsconfig.json -│ ├── tsconfig.lib.json -│ └── tsconfig.spec.json -├── tools -│ ├── generators/ -│ └── tsconfig.tools.json -├── jest.config.js -├── nx.json -├── package.json -├── tsconfig.base.json -├── workspace.json -└── yarn.lock -``` - > If you do not want to create a new workspace, install the `@nrwl/nx-plugin` dependency in an already existing workspace with npm or yarn. Then run `nx g @nrwl/nx-plugin:plugin [pluginName]`. A new plugin is created with a default generator, executor, and e2e app. diff --git a/nx-dev/nx-dev/public/documentation/shared/react-native-plugin.md b/nx-dev/nx-dev/public/documentation/shared/react-native-plugin.md index 3cf53659b29fa3..75881960124b94 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-native-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-native-plugin.md @@ -2,90 +2,72 @@ ![React Logo](/shared/react-logo.png) +React Native brings React's declarative UI framework to iOS and Android. With React Native, you use native UI controls and have full access to the native platform. + The Nx Plugin for React Native contains generators for managing React Native applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Jest, Detox, and Storybook. - Scaffolding for creating buildable libraries that can be published to npm. - Utilities for automatic workspace refactoring. -## Adding the React Native plugin +## Setting Up React Native + +### Create a New Workspace -Adding the React plugin to a workspace can be done with the following: +The easiest way to create your workspace is via `npx`. ```bash -#yarn -yarn add -D @nrwl/react-native +npx create-nx-workspace your-workspace-name \ +--preset=react-native \ +--appName=your-app-name ``` +**Note:** You can also run the command without arguments to go through the interactive prompts. + ```bash -#npm -npm install -D @nrwl/react-native +npx create-nx-workspace your-workspace-name ``` -> Note: You can create a new workspace that has React set up by doing `npx create-nx-workspace@latest --preset=react-native` - -The file structure for a React application looks like: - -```treeview -/ -├── apps/ -│ ├── myapp/ -│ │ ├── app.json -│ │ ├── metro.config.js -│ │ ├── android/ -│ │ │ ├── app/ -│ │ │ ├── gradle/ -│ │ │ ├── build.gradle -│ │ │ ├── gradle.properties -│ │ │ ├── gradlew -│ │ │ ├── settings.gradle -│ │ ├── ios/ -│ │ │ ├── Mobile/ -│ │ │ ├── Mobile.xcodeproj/ -│ │ │ ├── Mobile.xcworkspace/ -│ │ │ ├── Podfile -│ │ │ ├── Podfile.lock -│ │ ├── src/ -│ │ │ ├── main.tsx -│ │ │ └── app/ -│ │ │ ├── App.tsx -│ │ │ └── App.spec.tsx -│ │ ├── .babelrc -│ │ ├── jest.config.js -│ │ ├── test-setup.ts -│ │ ├── package.json -│ │ ├── project.json -│ │ ├── tsconfig.json -│ │ ├── tsconfig.app.json -│ │ └── tsconfig.spec.json -│ └── myapp-e2e/ -│ ├── .detoxrc.json -│ ├── src/ -│ │ └── app.spec.ts -│ ├── .babelrc -│ ├── jest.config.json -│ ├── project.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── babel.config.json -├── jest.config.js -├── jest.preset.js -├── nx.json -├── package.json -├── tsconfig.base.json -└── workspace.json +### Adding React Native to an Existing Workspace + +For existing Nx workspaces, install the `@nrwl/react-native` package to add React Native capabilities to it. + +```bash +npm install @nrwl/react-native --save-dev + +# Or with yarn +yarn add @nrwl/react-native --dev ``` -## See Also +### Generating Applications -- [Using Detox](/detox/overview) -- [Using Jest](/jest/overview) +To create additional React Native apps run: + +```bash +nx g @nrwl/react-native:app your-app-name +``` + +### Generating Libraries -## Executors / Builders +To generate a new library run: -- [run-ios](/react-native/run-ios) - Builds your app and starts it on iOS simulator +```bash +npx nx g @nrwl/react-native:lib your-lib-name +``` + +### Generating Components + +To generate a new comopnent inside library run: + +```bash +npx nx g @nrwl/react-native:component your-component-name --project=your-lib-name --export +``` + +Replace `your-lib-name` with the app's name as defined in your workspace.json file. + +## Using React Native + +- [run-ios](/react-native/run-ios) - Builds your app and starts it on iOS simulator or device - [run-android](/react-native/run-android) - Builds your app and starts it on a connected Android emulator or device - [build-android](/react-native/build-android) - Release Build for Android - [start](/react-native/package) - Starts the server that communicates with connected devices @@ -93,8 +75,7 @@ The file structure for a React application looks like: - [sync-deps](/react-native/sync-deps) - Syncs dependencies to package.json (required for autolinking) - [ensure-symlink](/react-native/ensure-symlink) - Ensure workspace node_modules is symlink under app's node_modules folder -## Generators +## More Documentation -- [application](/react-native/application) - Create a React Native application -- [component](/react-native/component) - Create a React Native component -- [library](/react-native/library) - Create a React Native library +- [Using Detox](/detox/overview) +- [Using Jest](/jest/overview) diff --git a/nx-dev/nx-dev/public/documentation/shared/react-plugin.md b/nx-dev/nx-dev/public/documentation/shared/react-plugin.md index 8c01784564b6b0..3e5dbad7f6c748 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-plugin.md @@ -2,88 +2,140 @@ ![React Logo](/shared/react-logo.png) -The Nx Plugin for React contains generators for managing React applications and libraries within an Nx workspace. It provides: +The React plugin contains executors and generators for managing React applications and libraries within an Nx workspace. +It provides: - Integration with libraries such as Jest, Cypress, and Storybook. -- Scaffolding for state management with Redux Toolkit libraries. -- Scaffolding for creating buildable libraries that can be published to npm. +- Generators for applications, libraries, components, hooks, and more. +- Library build support for publishing packages to npm or other registries. - Utilities for automatic workspace refactoring. -## Adding the React plugin +## Setting Up React -Adding the React plugin to a workspace can be done with the following: +To create a new workspace with React, run `npx create-nx-workspace@latest --preset=react`. + +To add the React plugin to an existing workspace, run one of the following: ```bash -#yarn +# For npm users +npm install -D @nrwl/react + +# For yarn users yarn add -D @nrwl/react ``` +### Creating Applications and Libraries + +You can add a new application with the following: + ```bash -#npm -npm install -D @nrwl/react +nx g @nrwl/react:app my-new-app +``` + +To start the application in development mode, run `nx serve my-new-app`. + +And add a new library as follows: + +```bash +nx g @nrwl/react:lib my-new-lib + +# If you want the library to be buildable or publishable to npm +nx g @nrwl/react:lib my-new-lib --buildable +nx g @nrwl/react:lib my-new-lib \ +--publishable \ +--importPath=@myorg/my-new-lib +``` + +Read more about [building and publishing libraries here](/structure/buildable-and-publishable-libraries). + +### Creating Components + +Adding a component to an existing project can be done with: + +```bash +nx g @nrwl/react:component my-new-component \ +--project=my-new-app + +# Note: If you want to export the component +# from the library use --export +nx g @nrwl/react:component my-new-component \ +--project=my-new-lib \ +--export +``` + +Replace `my-new-app` and `my-new-lib` with the name of your projects. + +### Creating Hooks + +If you want to add a new hook, run the following + +```bash +nx g @nrwl/react:hook my-new-hook --project=my-new-lib +``` + +Replace `my-new-lib` with the name of your project. + +## Using React + +### Testing Projects + +You can run unit tests with: + +```bash +nx test my-new-app +nx test my-new-lib ``` -> Note: You can create a new workspace that has React set up by doing `npx create-nx-workspace@latest --preset=react` - -The file structure for a React application looks like: - -```treeview -myorg/ -├── apps/ -│ ├── myapp/ -│ │ ├── src/ -│ │ │ ├── app/ -│ │ │ ├── assets/ -│ │ │ ├── environments/ -│ │ │ ├── favicon.ico -│ │ │ ├── index.html -│ │ │ ├── main.tsx -│ │ │ ├── polyfills.ts -│ │ │ └── styles.css -│ │ ├── browserslist -│ │ ├── jest.config.js -│ │ ├── tsconfig.app.json -│ │ ├── tsconfig.json -│ │ └── tsconfig.spec.json -│ └── myapp-e2e/ -│ ├── src/ -│ │ ├── fixtures/ -│ │ │ └── example.json -│ │ ├── integration/ -│ │ │ └── app.spec.ts -│ │ ├── plugins/ -│ │ │ └── index.ts -│ │ └── support/ -│ │ ├── app.po.ts -│ │ ├── commands.ts -│ │ └── index.ts -│ ├── cypress.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── README.md -├── workspace.json -├── nx.json -├── package.json -└── tsconfig.base.json +Replace `my-new-app` with the name or your project. This command works for both applications and libraries. + +You can also run E2E tests for applications: + +```bash +nx e2e my-new-app-e2e ``` -## See Also +Replace `my-new-app-e2e` with the name or your project with `-e2e` appended. + +### Building Projects + +React applications can be build with: + +```bash +nx build my-new-app +``` + +And if you generated a library with `--buildable`, then you can build a library as well: + +```bash +nx build my-new-lib +``` + +The output is in the `dist` folder. You can customize the output folder by setting `outputPath` in the +project's `project.json` file. + +The application in `dist` is deployable, and you can try it out locally with: + +```bash +npx http-server dist/apps/my-new-app +``` + +The library in `dist` is publishable to npm or a private registry. + +## More Documentation - [Using Cypress](/cypress/overview) - [Using Jest](/jest/overview) - [Using Storybook](/storybook/overview-react) -## Executors / Builders +### Executors React applications are built using the executors from the `@nrwl/web` plugin. - [build](/web/build) - Builds a web components application - [dev-server](/web/package) - Builds and serves a web application -- [package](/web/package) - Bundles artifacts for a buildable library that can be distributed as an NPM package. +- [package](/web/package) - Bundles artifacts for a buildable library that can be distributed as an npm package. -## Generators +### Generators - [application](/react/application) - Create a React application - [component](/react/component) - Create a React component diff --git a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/03-display-todos.md b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/03-display-todos.md index a546ab29a520f3..91a300cc3044dd 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/03-display-todos.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/03-display-todos.md @@ -13,7 +13,7 @@ The best way to work with Cypress is to keep the failing E2E test running while To make the first assertion of the e2e test pass, update `apps/todos/src/app/app.tsx`: ```typescript -import React, { useState } from 'react'; +import { useState } from 'react'; interface Todo { title: string; @@ -47,7 +47,7 @@ export default App; **Add the `add-todo` button with the corresponding click handler.** ```typescript -import React, { useState } from 'react'; +import { useState } from 'react'; interface Todo { title: string; diff --git a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/04-connect-to-api.md b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/04-connect-to-api.md index a801517ab2e1f0..1c0ebc3e99ffc4 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/04-connect-to-api.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/04-connect-to-api.md @@ -7,7 +7,7 @@ Real-world applications do not live in isolation — they need APIs to talk **Let's change our application to fetch the data from the API.** ```typescript -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; interface Todo { title: string; diff --git a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/05-add-node-app.md b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/05-add-node-app.md index 5cee68c09b142a..0ade3853bb4179 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/05-add-node-app.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/05-add-node-app.md @@ -9,18 +9,19 @@ The requests fail because the API has not been created yet. Using Nx you develop Nx is an open platform with plugins for many modern tools and frameworks. **To see some plugins, run `npx nx list`:** ```bash -> NX Installed plugins: +> NX Installed plugins: - @nrwl/cypress (builders,generators) - @nrwl/jest (builders,generators) - @nrwl/linter (builders,generators) + @nrwl/cypress (executors,generators) + @nrwl/jest (executors,generators) + @nrwl/linter (executors,generators) + @nrwl/nx-cloud (generators) @nrwl/react (generators) - @nrwl/storybook (builders,generators) - @nrwl/web (builders,generators) - @nrwl/workspace (builders,generators) + @nrwl/storybook (executors,generators) + @nrwl/web (executors,generators) + @nrwl/workspace (executors,generators) -> NX Also available: +> NX Also available: @nrwl/angular (generators) @nrwl/express (executors,generators) @@ -30,21 +31,13 @@ Nx is an open platform with plugins for many modern tools and frameworks. **To s @nrwl/nx-plugin (executors,generators) -> NX Community plugins: +> NX Community plugins: - @nxtend/ionic-react - An Nx plugin for developing Ionic React applications and libraries - @angular-architects/ddd - Nx plugin for structuring a monorepo with domains and layers + nx-plugins - Nx plugin integrations with ESBuild / Vite / Snowpack / Prisma, with derived ESBuild / nowpack / ... plugins. + @codebrew/nx-aws-cdk - An Nx plugin for aws cdk develop. ... ``` -**Now run `npx nx list @nrwl/express`, and you see:** - -```bash -> NX NOTE @nrwl/express is not currently installed - - Use "yarn add --dev @nrwl/express" to add new capabilities -``` - **Add the dependency:** ```bash @@ -72,24 +65,24 @@ After this is done, you should see something like this: ```treeview myorg/ ├── apps/ -│   ├── todos/ -│   │   ├── src/ -│   │   ├── project.json -│   │   └── proxy.conf.json -│ ├── todos-e2e/ -│ └── api/ -│ ├── src/ -│ │ ├── app/ -│ │ ├── assets/ -│ │ ├── environments/ -│ │ │ ├── environment.ts -│ │ │ └── environment.prod.ts -│ │ └── main.ts -│ ├── jest.conf.js -│ ├── project.json -│ ├── tsconfig.app.json -│ ├── tsconfig.json -│ └── tsconfig.spec.json +│ ├── api/ +│ │ ├── src/ +│ │ │ ├── app/ +│ │ │ ├── assets/ +│ │ │ ├── environments/ +│ │ │ │ ├── environment.ts +│ │ │ │ └── environment.prod.ts +│ │ │ └── main.ts +│ │ ├── jest.conf.js +│ │ ├── project.json +│ │ ├── tsconfig.app.json +│ │ ├── tsconfig.json +│ │ └── tsconfig.spec.json +│ ├── todos/ +│ │ ├── src/ +│ │ ├── project.json +│ │ └── proxy.conf.json +│ └── todos-e2e/ ├── libs/ ├── tools/ ├── workspace.json @@ -129,7 +122,7 @@ export function addTodoRoutes(app: Express) { } ``` -Here, you are building an Express application with Nx. Nx also comes with Nest support, and you can also use any other node library you want. +Here, you are building an Express application with Nx. Nx also comes with Next support, and you can also use any other node library you want. **Next update `apps/api/src/main.ts` to register the routes** diff --git a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/06-proxy.md b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/06-proxy.md index 1bb46ef15ee0a9..a1f88c3fa2cb45 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/06-proxy.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/06-proxy.md @@ -51,7 +51,7 @@ Every target uses an executor which actually runs this target. So targets are an There are a lot of advantages to providing additional metadata to the build tool. For instance, you can introspect targets. `npx nx serve todos --help` results in: ```bash -npx nx run todos:serve [options,...] +nx run todos:serve [options,...] Options: --buildTarget Target which builds the application @@ -68,9 +68,11 @@ Options: --allowedHosts This option allows you to whitelist services that are allowed to access the dev server. --memoryLimit Memory limit for type checking service process in MB. --maxWorkers Number of workers to use for type checking. + --baseHref Base url for the application being built. + --skip-nx-cache Skip the use of Nx cache. --help Show available options for project target. ``` It helps with good editor integration (see [VSCode Support](/using-nx/console#nx-console-for-vscode)). -But, most importantly, it provides a holistic dev experience regardless of the tools used, and enables advanced build features like distributed computation caching and distributed builds. +But, most importantly, it provides a holistic dev experience regardless of the tools used, and enables advanced build features like distributed [computation caching](/using-nx/caching) and [distributed builds](/using-nx/dte). diff --git a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/07-share-code.md b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/07-share-code.md index 3c1772e2928add..fc2d3d69024073 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/07-share-code.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/07-share-code.md @@ -24,7 +24,7 @@ myorg/ │ │ ├── lib/ │ │ │ └── data.ts │ │ └── index.ts -│ ├── jest.conf.js +│ ├── jest.config.js │ ├── project.json │ ├── tsconfig.json │ ├── tsconfig.lib.json @@ -45,7 +45,7 @@ export interface Todo { ### A note about VS Code : -If you're using [VS Code](https://code.visualstudio.com/) it may be necessary at this point to restart the TS server so that the new `@myorg/data` package is recognised. This may need to be done **every time a new workspace library is added**. +If you're using [VS Code](https://code.visualstudio.com/) it may be necessary at this point to restart the TS server so that the new `@myorg/data` package is recognised. This may need to be done **every time a new workspace library is added**. If you install the [Nx Console](/using-nx/console) extension you won't need to take this step. ## Refactor the API @@ -74,7 +74,7 @@ export function addTodoRoutes(app: Express) { **Next import the interface in `apps/todos/src/app/app.tsx`:** ```typescript -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { Todo } from '@myorg/data'; export const App = () => { diff --git a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/08-create-libs.md b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/08-create-libs.md index 4cf79bc9b2a984..a554b17a014297 100644 --- a/nx-dev/nx-dev/public/documentation/shared/react-tutorial/08-create-libs.md +++ b/nx-dev/nx-dev/public/documentation/shared/react-tutorial/08-create-libs.md @@ -31,18 +31,17 @@ myorg/ │ └── ui/ │ ├── src/ │ │ ├── lib/ -│ │ │ ├── ui.css +│ │ │ ├── ui.module.css │ │ │ ├── ui.spec.tsx │ │ │ └── ui.tsx │ │ └── index.ts -│ ├── jest.conf.js +│ ├── jest.config.js │ ├── project.json │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── tsconfig.spec.json ├── tools/ ├── nx.json -├── workspace.json ├── package.json └── tsconfig.base.json ``` @@ -88,7 +87,7 @@ myorg/ │ ├── src/ │ │ ├── lib/ │ │ │ └── todos/ -│ │ │ │ ├── todos.css +│ │ │ │ ├── todos.module.css │ │ │ │ ├── todos.spec.tsx │ │ │ │ └── todos.tsx │ │ │ ├── ui.css @@ -109,6 +108,8 @@ myorg/ **Implement the Todos component.** +`libs/ui/src/lib/todos/todos.tsx` + ```typescript import { Todo } from '@myorg/data'; import './todos.module.css'; @@ -135,7 +136,7 @@ export default Todos; **Now import `Todos` into `apps/todos/src/app/app.tsx`.** ```typescript -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { Todo } from '@myorg/data'; import { Todos } from '@myorg/ui'; diff --git a/nx-dev/nx-dev/public/documentation/shared/using-nx/nx-cli.md b/nx-dev/nx-dev/public/documentation/shared/using-nx/nx-cli.md index 2638ef46959339..b53bd25564fce9 100644 --- a/nx-dev/nx-dev/public/documentation/shared/using-nx/nx-cli.md +++ b/nx-dev/nx-dev/public/documentation/shared/using-nx/nx-cli.md @@ -5,7 +5,8 @@ The Nx CLI isn't like most command lines that accomplishes a predefined task. Nx can be configured to work with different tools and even different languages. -Nx allows you to break up your codebase into different **projects**. The Nx CLI provides commands to operate and manage the different parts of the codebase. These commands fall into three categories: +Nx allows you to break up your codebase into different **projects**. The Nx CLI provides commands to operate and manage +the different parts of the codebase. These commands fall into three categories: - Acting on code (Build, Test, Serve) - Modifying code @@ -27,9 +28,9 @@ nx build my-js-app However, `nx build` is only an abstraction over what it means to "build" projects rather than tied to a certain implementation. For instance, if you have a `project.json` file defining `build` using -an **[executor](/executors/using-builders)**, that executor will be invoked. If you don't specify an -executor for the build target, `nx build my-react-app` will invoke the `build` npm script in the project's folder. Every -argument you pass into `run` will be forwarded to the executor or the npm script. +an **[executor](/executors/using-builders)**, that executor will be invoked. If you don't specify an executor for the +build target, `nx build my-react-app` will invoke the `build` npm script in the project's folder. Every argument you +pass into `run` will be forwarded to the executor or the npm script. Along with running a target on a single project, Nx provides some commands to run the same target across multiple projects. @@ -41,8 +42,8 @@ nx run-many --target=build --projects=app1,app2 nx run-many --target=test --all # Runs all projects that have a test target, use this sparingly. ``` -The [`nx affected` command](/cli/affected) isolates the set projects that may have changed in behavior and -runs a target across them. This is more efficient than running all projects every time. +The [`nx affected` command](/cli/affected) isolates the set projects that may have changed in behavior and runs a target +across them. This is more efficient than running all projects every time. ```bash nx affected --target=build @@ -59,22 +60,21 @@ nx generate @nrwl/react:storybook-configuration shared-button # Configures story ``` Again, like `nx run`, `nx generate` is only an abstraction over generating code. `nx generate` can generate anything you -want via **generators**. **[Generators](/generators/using-schematics)** can be installed as part of a -plugin or developed locally within an Nx workspace to fit the needs of your organization. +want via **generators**. **[Generators](/generators/using-schematics)** can be installed as part of a plugin or +developed locally within an Nx workspace to fit the needs of your organization. A [workspace generator](/generators/workspace-generators) is a custom generator for your workspace. `nx generate workspace-generator my-generator` generates a workspace generator which can be run with -the [`nx workspace-generator` command](/cli/workspace-generator). This can be useful to allow your -organization to consistently generate projects according to your own standards. +the [`nx workspace-generator` command](/cli/workspace-generator). This can be useful to allow your organization to +consistently generate projects according to your own standards. ```bash nx workspace-generator my-generator ``` Upgrading a package is not always as simple as bumping the version in `package.json`. -The [`nx migrate` command](/cli/migrate) facilitates not only managing package versions but also runs -migrations specified by package maintainers. See -the [full guide to updating Nx](/using-nx/updating-nx). +The [`nx migrate` command](/cli/migrate) facilitates not only managing package versions but also runs migrations +specified by package maintainers. See the [full guide to updating Nx](/using-nx/updating-nx). ```bash nx migrate latest # Updates the version of Nx in `package.json` and schedules migrations to be run @@ -84,14 +84,14 @@ nx migrate --run-migrations # Runs the migrations scheduled by the previous comm ## Understanding the codebase Nx creates and maintains a project graph between projects based on import statements in your code and uses that -information to run executors only on the [affected](/cli/affected) projects in a codebase. A visual -version of the [project project graph](/structure/dependency-graph) is also available to help developers -understand the architecture of the codebase. +information to run executors only on the [affected](/cli/affected) projects in a codebase. A visual version of +the [project project graph](/structure/dependency-graph) is also available to help developers understand the +architecture of the codebase. -The [`nx graph` command](/cli/dep-graph) displays this project graph in a web browser for you to -explore. +The [`nx graph` command](/cli/dep-graph) displays this project graph in a web browser for you to explore. -Note: In older versions of Nx, the project graph was launched with `nx dep-graph`. For backward compatibility, that command is aliased to `nx graph`. +Note: In older versions of Nx, the project graph was launched with `nx dep-graph`. For backward compatibility, that +command is aliased to `nx graph`. ```bash nx graph @@ -99,8 +99,8 @@ nx graph --watch # Updates the browser as code is changed nx affected:graph # Highlights projects which may have changed in behavior ``` -The [`nx list` command](/cli/list) lists the currently installed Nx plugins and other available plugins. -The `nx list` command can list the generators and executors that are available for a plugin. +The [`nx list` command](/cli/list) lists the currently installed Nx plugins and other available plugins. The `nx list` +command can list the generators and executors that are available for a plugin. **List installed plugins:** @@ -115,5 +115,8 @@ There are some environment variables that you can set to log additional informat - Setting **NX_VERBOSE_LOGGING=true** will print debug information useful for troubleshooting. - Setting **NX_PERF_LOGGING=true** will print debug information useful for profiling executors and Nx itself. +- Setting **NX_PROFILE=myfile.json** will output a profile that you can view in Chrome Dev Tools. Read more [here](https://nx.dev/guides/performance-profiling). +- Setting **NX_PROJECT_GRAPH_MAX_WORKERS=3** will tell Nx to use at most 3 workers to compute its project graph (in some + CI setups the default value can be too high and can result in a SIGKILL). - Setting **NX_TASKS_RUNNER_DYNAMIC_OUTPUT=false** will use non-dynamic terminal output strategy (what you see in CI), even when you terminal can support the dynamic version. diff --git a/nx-dev/nx-dev/public/documentation/shared/web-plugin.md b/nx-dev/nx-dev/public/documentation/shared/web-plugin.md index c2372491a946dd..0f9466927a635e 100644 --- a/nx-dev/nx-dev/public/documentation/shared/web-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/web-plugin.md @@ -1,4 +1,4 @@ -# Nx Plugin for Web +# Web Plugin The Nx Plugin for Web Components contains generators for managing Web Component applications and libraries within an Nx workspace. It provides: @@ -6,72 +6,99 @@ The Nx Plugin for Web Components contains generators for managing Web Component - Scaffolding for creating buildable libraries that can be published to npm. - Utilities for automatic workspace refactoring. -## Adding the Web plugin +## Setting Up Web -Adding the Web plugin to a workspace can be done with the following: +To create a new workspace with web, run `npx create-nx-workspace@latest --preset=web`. + +To add the web plugin to an existing workspace, run one of the following: ```bash -#yarn +# For npm users +npm install -D @nrwl/web + +# For yarn users yarn add -D @nrwl/web ``` +### Creating Applications + +You can add a new application with the following: + ```bash -#npm -npm install -D @nrwl/web +nx g @nrwl/web:app my-new-app +``` + +The application uses no framework and generates with web components. You can add any framework you want on top of the default setup. + +To start the application in development mode, run `nx serve my-new-app`. + +**Note:** If you are looking to add a React application, check out the [React plugin](/react/overview). + +### Creating Libraries + +To create a generic TypeScript library (i.e. non-framework specific), use the [`@nrwl/js`](/js/overview) plugin. + +```bash +nx g @nrwl/js:lib my-new-lib + +# If you want the library to be buildable or publishable to npm +nx g @nrwl/web:lib my-new-lib --buildable +nx g @nrwl/web:lib my-new-lib \ +--publishable \ +--importPath=@myorg/my-new-lib +``` + +## Using Web + +### Testing Projects + +You can run unit tests with: + +```bash +nx test my-new-app +nx test my-new-lib +``` + +Replace `my-new-app` with the name or your project. This command works for both applications and libraries. + +You can also run E2E tests for applications: + +```bash +nx e2e my-new-app-e2e +``` + +Replace `my-new-app-e2e` with the name or your project with `-e2e` appended. + +### Building Projects + +React applications can be build with: + +```bash +nx build my-new-app +``` + +And if you generated a library with `--buildable`, then you can build a library as well: + +```bash +nx build my-new-lib ``` -> Note: You can create a new workspace that has Web Components set up by doing `npx create-nx-workspace@latest --preset=web-components` - -The file structure for a Web Components application looks like: - -```treeview -myorg/ -├── apps/ -│ ├── todos/ -│ │ ├── src/ -│ │ │ ├── app/ -│ │ │ ├── assets/ -│ │ │ ├── environments/ -│ │ │ ├── favicon.ico -│ │ │ ├── index.html -│ │ │ ├── main.ts -│ │ │ ├── polyfills.ts -│ │ │ └── styles.css -│ │ ├── browserslist -│ │ ├── jest.config.js -│ │ ├── tsconfig.app.json -│ │ ├── tsconfig.json -│ │ └── tsconfig.spec.json -│ └── todos-e2e/ -│ ├── src/ -│ │ ├── fixtures/ -│ │ │ └── example.json -│ │ ├── integration/ -│ │ │ └── app.spec.ts -│ │ ├── plugins/ -│ │ │ └── index.ts -│ │ └── support/ -│ │ ├── app.po.ts -│ │ ├── commands.ts -│ │ └── index.ts -│ ├── cypress.json -│ ├── tsconfig.e2e.json -│ └── tsconfig.json -├── libs/ -├── tools/ -├── README.md -├── workspace.json -├── nx.json -├── package.json -└── tsconfig.base.json +The output is in the `dist` folder. You can customize the output folder by setting `outputPath` in the project's `project.json` file. + +The application in `dist` is deployable, and you can try it out locally with: + +```bash +npx http-server dist/apps/my-new-app ``` -## See Also +The library in `dist` is publishable to npm or a private registry. + +## More Documentation - [Using Cypress](/cypress/overview) - [Using Jest](/cypress/overview) -## Executors / Builders +## Executors - [build](/web/build) - Builds a web components application - [dev-server](/web/dev-server) - Builds and serves a web application diff --git a/nx-dev/nx-dev/public/documentation/shared/workspace-plugin.md b/nx-dev/nx-dev/public/documentation/shared/workspace-plugin.md index 6c4b8dc435bdf0..f6488a0b67bad3 100644 --- a/nx-dev/nx-dev/public/documentation/shared/workspace-plugin.md +++ b/nx-dev/nx-dev/public/documentation/shared/workspace-plugin.md @@ -48,15 +48,3 @@ Executors provide an optimized way of running targets but unfortunately, not eve Running `nx g @nrwl/workspace:run-commands printhello --project my-feature-lib --command 'echo hello'` will create a `my-feature-lib:printhello` target that executes `echo hello` in the shell. > See more about [`@nrwl/workspace:run-commands`](/workspace/run-commands-executor) - -## Generators - -- [library](/workspace/library) - Create a plain typescript library -- [move](/workspace/move) - Move a project to another directory and update all references -- [remove](/workspace/remove) - Remove a project from the workspace -- [run-commands](/workspace/run-commands-generator) - Add a target to a project that uses the run-commands executor -- [workspace-generator](/workspace/workspace-generator) - Scaffold a custom generator for use within your workspace - -## Executors / Builders - -- [run-commands](/workspace/run-commands-executor) - Execute an arbitrary command line script diff --git a/package.json b/package.json index fc14788ba604f2..da03ff317925db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nrwl/nx-source", - "version": "13.5.1", + "version": "13.7.1", "description": "Smart, Fast and Extensible Build System", "homepage": "https://nx.dev", "private": true, @@ -25,26 +25,26 @@ "prepare": "is-ci || husky install" }, "devDependencies": { - "@angular-devkit/architect": "~0.1301.0", - "@angular-devkit/build-angular": "~13.1.0", - "@angular-devkit/build-optimizer": "~0.1301.0", - "@angular-devkit/build-webpack": "~0.1301.0", - "@angular-devkit/core": "~13.1.0", - "@angular-devkit/schematics": "~13.1.0", + "@angular-devkit/architect": "~0.1302.0", + "@angular-devkit/build-angular": "~13.2.0", + "@angular-devkit/build-optimizer": "~0.1302.0", + "@angular-devkit/build-webpack": "~0.1302.0", + "@angular-devkit/core": "~13.2.0", + "@angular-devkit/schematics": "~13.2.0", "@angular-eslint/eslint-plugin": "~13.0.1", "@angular-eslint/eslint-plugin-template": "~13.0.1", "@angular-eslint/template-parser": "~13.0.1", - "@angular/cli": "~13.1.0", - "@angular/common": "~13.1.0", - "@angular/compiler": "~13.1.0", - "@angular/compiler-cli": "~13.1.0", - "@angular/core": "~13.1.0", - "@angular/forms": "~13.1.0", - "@angular/platform-browser": "~13.1.0", - "@angular/platform-browser-dynamic": "~13.1.0", - "@angular/router": "~13.1.0", - "@angular/service-worker": "~13.1.0", - "@angular/upgrade": "~13.1.0", + "@angular/cli": "~13.2.0", + "@angular/common": "~13.2.0", + "@angular/compiler": "~13.2.0", + "@angular/compiler-cli": "~13.2.0", + "@angular/core": "~13.2.0", + "@angular/forms": "~13.2.0", + "@angular/platform-browser": "~13.2.0", + "@angular/platform-browser-dynamic": "~13.2.0", + "@angular/router": "~13.2.0", + "@angular/service-worker": "~13.2.0", + "@angular/upgrade": "~13.2.0", "@babel/helper-create-regexp-features-plugin": "^7.14.5", "@cypress/webpack-preprocessor": "^5.9.1", "@nestjs/common": "^8.0.0", @@ -60,19 +60,19 @@ "@ngrx/schematics": "~13.0.0", "@ngrx/store": "~13.0.0", "@ngrx/store-devtools": "~13.0.0", - "@nrwl/cli": "13.5.0-rc.1", - "@nrwl/cypress": "13.5.0-rc.1", - "@nrwl/eslint-plugin-nx": "13.5.0-rc.1", - "@nrwl/jest": "13.5.0-rc.1", - "@nrwl/js": "13.5.0-rc.1", - "@nrwl/linter": "13.5.0-rc.1", - "@nrwl/next": "13.5.0-rc.1", - "@nrwl/node": "13.5.0-rc.1", + "@nrwl/cli": "13.7.1", + "@nrwl/cypress": "13.7.1", + "@nrwl/eslint-plugin-nx": "13.7.1", + "@nrwl/jest": "13.7.1", + "@nrwl/js": "13.7.1", + "@nrwl/linter": "13.7.1", + "@nrwl/next": "13.7.1", + "@nrwl/node": "13.7.1", "@nrwl/nx-cloud": "13.1.2", - "@nrwl/react": "13.5.0-rc.1", - "@nrwl/tao": "13.5.0-rc.1", - "@nrwl/web": "13.5.0-rc.1", - "@nrwl/workspace": "13.5.0-rc.1", + "@nrwl/react": "13.7.1", + "@nrwl/tao": "13.7.1", + "@nrwl/web": "13.7.1", + "@nrwl/workspace": "13.7.1", "@parcel/watcher": "2.0.4", "@phenomnomnominal/tsquery": "4.1.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", @@ -83,20 +83,21 @@ "@rollup/plugin-image": "^2.1.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.0.4", - "@schematics/angular": "~13.1.0", + "@schematics/angular": "~13.2.0", "@storybook/addon-essentials": "~6.4.12", "@storybook/addon-knobs": "~6.3.0", "@storybook/angular": "~6.4.12", "@storybook/core": "~6.4.12", "@storybook/react": "~6.4.12", "@svgr/webpack": "^6.1.2", + "@swc-node/register": "^1.4.2", "@testing-library/react": "11.2.6", "@testing-library/react-hooks": "7.0.1", "@tippyjs/react": "^4.2.6", "@types/css-minimizer-webpack-plugin": "^3.0.2", "@types/cytoscape": "^3.18.2", - "@types/eslint": "^8.2.0", - "@types/express": "4.17.0", + "@types/eslint": "~8.4.1", + "@types/express": "4.17.13", "@types/flat": "^5.0.1", "@types/fs-extra": "^9.0.11", "@types/is-ci": "^3.0.0", @@ -112,9 +113,9 @@ "@types/semver": "^7.3.8", "@types/tmp": "^0.2.0", "@types/yargs": "^15.0.5", - "@typescript-eslint/eslint-plugin": "~5.3.0", - "@typescript-eslint/experimental-utils": "~5.3.0", - "@typescript-eslint/parser": "~5.3.0", + "@typescript-eslint/eslint-plugin": "5.10.1", + "@typescript-eslint/experimental-utils": "5.10.1", + "@typescript-eslint/parser": "5.10.1", "@xstate/immer": "^0.2.0", "@xstate/inspect": "^0.5.1", "@xstate/react": "^1.6.3", @@ -139,7 +140,7 @@ "dotenv": "~10.0.0", "ejs": "^3.1.5", "enhanced-resolve": "^5.8.3", - "eslint": "8.2.0", + "eslint": "8.7.0", "eslint-config-next": "12.0.7", "eslint-config-prettier": "^8.1.0", "eslint-plugin-cypress": "^2.10.3", @@ -147,7 +148,7 @@ "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-react": "7.27.0", "eslint-plugin-react-hooks": "4.3.0", - "express": "4.17.1", + "express": "4.17.2", "file-loader": "^6.2.0", "file-type": "^16.2.0", "flat": "^5.0.2", @@ -179,7 +180,7 @@ "kill-port": "^1.6.1", "less": "3.12.2", "less-loader": "^10.1.0", - "license-webpack-plugin": "2.3.15", + "license-webpack-plugin": "4.0.0", "loader-utils": "1.2.3", "memfs": "^3.0.1", "metro-resolver": "^0.66.2", @@ -188,13 +189,13 @@ "minimatch": "3.0.4", "next": "12.0.7", "next-sitemap": "^1.6.108", - "ng-packagr": "~13.1.0", + "ng-packagr": "~13.2.0", "ngrx-store-freeze": "0.2.4", - "node-fetch": "^2.6.1", - "open": "^7.4.2", + "node-fetch": "^2.6.7", + "open": "^8.4.0", "parse-markdown-links": "^1.0.4", "parse5": "4.0.0", - "postcss": "8.3.0", + "postcss": "^8.2.13", "postcss-import": "14.0.2", "postcss-preset-env": "^6.7.0", "postcss-url": "^10.1.1", @@ -228,21 +229,20 @@ "stylus": "^0.55.0", "stylus-loader": "^6.2.0", "tcp-port-used": "^1.0.2", - "terser": "4.3.8", - "terser-webpack-plugin": "^5.1.1", + "terser-webpack-plugin": "^5.3.0", "tmp": "~0.2.1", "tree-kill": "1.2.2", "ts-jest": "27.0.5", "ts-loader": "^9.2.6", "ts-node": "9.1.1", "tsconfig-paths": "^3.9.0", - "tsconfig-paths-webpack-plugin": "3.4.1", + "tsconfig-paths-webpack-plugin": "3.5.2", "tslib": "^2.3.0", "tslint": "6.1.3", "tslint-to-eslint-config": "^2.4.0", "typedoc": "^0.22.5", "typedoc-plugin-markdown": "^3.11.3", - "typescript": "~4.4.3", + "typescript": "~4.5.2", "unzipper": "^0.10.11", "url-loader": "^4.1.1", "verdaccio": "^5.0.4", @@ -265,7 +265,6 @@ } }, "dependencies": { - "@cypress/request": "2.88.9", "@docsearch/react": "1.0.0-alpha.27", "@headlessui/react": "^1.1.1", "@heroicons/react": "^1.0.1", @@ -301,4 +300,4 @@ "**/xmlhttprequest-ssl": "~1.6.2", "immer": "~9.0.6" } -} \ No newline at end of file +} diff --git a/packages/angular/migrations.json b/packages/angular/migrations.json index d3583bb460ef39..694e62e1142671 100644 --- a/packages/angular/migrations.json +++ b/packages/angular/migrations.json @@ -1247,6 +1247,99 @@ "alwaysAddToPackageJson": false } } + }, + "13.7.0": { + "version": "13.7.0-beta.0", + "packages": { + "@angular/cli": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular-devkit/build-angular": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular-devkit/build-optimizer": { + "version": "~0.1302.0", + "alwaysAddToPackageJson": false + }, + "@angular/core": { + "version": "~13.2.0", + "alwaysAddToPackageJson": true + }, + "@angular/common": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/forms": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/elements": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/compiler": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/compiler-cli": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/localize": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/platform-browser": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/platform-browser-dynamic": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/platform-server": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/router": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/upgrade": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/language-service": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/animations": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/service-worker": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/material": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "@angular/cdk": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "ng-packagr": { + "version": "~13.2.0", + "alwaysAddToPackageJson": false + }, + "typescript": { + "version": "~4.5.2", + "alwaysAddToPackageJson": false + } + } } } } diff --git a/packages/angular/package.json b/packages/angular/package.json index 63dfe4f4a474cf..23e39f38f03c7b 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -36,13 +36,13 @@ "migrations": "./migrations.json" }, "dependencies": { - "@angular-devkit/schematics": "~13.1.0", + "@angular-devkit/schematics": "~13.2.0", "@nrwl/cypress": "*", "@nrwl/devkit": "*", "@nrwl/jest": "*", "@nrwl/linter": "*", "@nrwl/storybook": "*", - "@schematics/angular": "~13.1.0", + "@schematics/angular": "~13.2.0", "@phenomnomnominal/tsquery": "4.1.1", "ignore": "^5.0.4", "jasmine-marbles": "~0.8.4", diff --git a/packages/angular/src/builders/webpack-server/webpack-server.impl.ts b/packages/angular/src/builders/webpack-server/webpack-server.impl.ts index f2d2b813d1b7f2..1d6a663806ea9f 100644 --- a/packages/angular/src/builders/webpack-server/webpack-server.impl.ts +++ b/packages/angular/src/builders/webpack-server/webpack-server.impl.ts @@ -53,7 +53,11 @@ export function webpackServer(schema: Schema, context: BuilderContext) { // The extra Webpack configuration file can export a synchronous or asynchronous function, // for instance: `module.exports = async config => { ... }`. if (typeof customWebpackConfiguration === 'function') { - return customWebpackConfiguration(baseWebpackConfig); + return customWebpackConfiguration( + baseWebpackConfig, + selectedConfiguration, + context.target + ); } else { return merge( baseWebpackConfig, diff --git a/packages/angular/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap b/packages/angular/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap index 20f9f5f2c30509..1de14126a02266 100644 --- a/packages/angular/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap +++ b/packages/angular/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap @@ -578,9 +578,9 @@ Object { "@angular-eslint/template-parser": "~13.0.1", "@nrwl/eslint-plugin-nx": "*", "@nrwl/linter": "*", - "@typescript-eslint/eslint-plugin": "~5.3.0", - "@typescript-eslint/parser": "~5.3.0", - "eslint": "8.2.0", + "@typescript-eslint/eslint-plugin": "~5.10.0", + "@typescript-eslint/parser": "~5.10.0", + "eslint": "~8.7.0", "eslint-config-prettier": "8.1.0", "eslint-plugin-import": "latest", }, @@ -936,9 +936,9 @@ Object { "@angular-eslint/template-parser": "~13.0.1", "@nrwl/eslint-plugin-nx": "*", "@nrwl/linter": "*", - "@typescript-eslint/eslint-plugin": "~5.3.0", - "@typescript-eslint/parser": "~5.3.0", - "eslint": "8.2.0", + "@typescript-eslint/eslint-plugin": "~5.10.0", + "@typescript-eslint/parser": "~5.10.0", + "eslint": "~8.7.0", "eslint-config-prettier": "8.1.0", "eslint-plugin-import": "latest", }, diff --git a/packages/angular/src/generators/library/lib/update-project.ts b/packages/angular/src/generators/library/lib/update-project.ts index 87eb24eba324bc..7c4ec2f870c97d 100644 --- a/packages/angular/src/generators/library/lib/update-project.ts +++ b/packages/angular/src/generators/library/lib/update-project.ts @@ -45,6 +45,7 @@ function updateFiles(host: Tree, options: NormalizedSchema) { host.delete(path.join(options.projectRoot, 'ng-package.json')); host.delete(path.join(options.projectRoot, 'package.json')); host.delete(path.join(options.projectRoot, 'tsconfig.lib.prod.json')); + host.delete(path.join(options.projectRoot, '.browserslistrc')); } host.delete(path.join(options.projectRoot, 'karma.conf.js')); diff --git a/packages/angular/src/generators/library/library.spec.ts b/packages/angular/src/generators/library/library.spec.ts index 8fbba675f10d71..cec6c69fecdc33 100644 --- a/packages/angular/src/generators/library/library.spec.ts +++ b/packages/angular/src/generators/library/library.spec.ts @@ -221,7 +221,7 @@ describe('lib', () => { expect(workspaceJson.projects['my-lib'].architect.build).toBeDefined(); }); - it('should remove tsconfib.lib.prod.json when library is not publishable', async () => { + it('should remove .browserlistrc when library is not buildable or publishable', async () => { // ACT await runLibraryGeneratorWithOpts({ publishable: false, @@ -229,9 +229,18 @@ describe('lib', () => { }); // ASSERT - const libProdConfig = tree.read('libs/my-lib/tsconfig.lib.prod.json'); + expect(tree.read('libs/my-lib/.browserlistrc')).toBeFalsy(); + }); + + it('should remove tsconfib.lib.prod.json when library is not buildable or publishable', async () => { + // ACT + await runLibraryGeneratorWithOpts({ + publishable: false, + buildable: false, + }); - expect(libProdConfig).toBeFalsy(); + // ASSERT + expect(tree.read('libs/my-lib/tsconfig.lib.prod.json')).toBeFalsy(); }); it('should update tags', async () => { @@ -674,6 +683,7 @@ describe('lib', () => { // Make sure these exist [ + 'my-dir/my-lib/.browserslistrc', 'my-dir/my-lib/jest.config.js', 'my-dir/my-lib/ng-package.json', 'my-dir/my-lib/project.json', diff --git a/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap b/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap index aae8d650590b7b..882b4394d9a35e 100644 --- a/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap +++ b/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap @@ -56,7 +56,6 @@ Array [ "apps/one/two/test-ui-lib-e2e/tsconfig.json", "jest.config.js", "jest.preset.js", - "libs/test-ui-lib/.browserslistrc", "libs/test-ui-lib/.eslintrc.json", "libs/test-ui-lib/.storybook/main.js", "libs/test-ui-lib/.storybook/preview.js", @@ -162,7 +161,6 @@ Array [ "apps/test-ui-lib-e2e/tsconfig.json", "jest.config.js", "jest.preset.js", - "libs/test-ui-lib/.browserslistrc", "libs/test-ui-lib/.eslintrc.json", "libs/test-ui-lib/.storybook/main.js", "libs/test-ui-lib/.storybook/preview.js", diff --git a/packages/angular/src/utils/versions.ts b/packages/angular/src/utils/versions.ts index 6c13f18d0b4618..1b0b525a782236 100644 --- a/packages/angular/src/utils/versions.ts +++ b/packages/angular/src/utils/versions.ts @@ -1,6 +1,6 @@ export const nxVersion = '*'; -export const angularVersion = '~13.1.0'; -export const angularDevkitVersion = '~13.1.0'; +export const angularVersion = '~13.2.0'; +export const angularDevkitVersion = '~13.2.0'; export const angularJsVersion = '1.7.9'; export const ngrxVersion = '~13.0.0'; export const rxjsVersion = '~7.4.0'; diff --git a/packages/cli/lib/output.ts b/packages/cli/lib/output.ts index 4b68071a247068..a1a428859e7cbc 100644 --- a/packages/cli/lib/output.ts +++ b/packages/cli/lib/output.ts @@ -35,7 +35,9 @@ export interface CLISuccessMessageConfig { /** * Automatically disable styling applied by chalk if CI=true */ -if (isCI()) { +const forceColor = + process.env.FORCE_COLOR === '' || process.env.FORCE_COLOR === 'true'; +if (isCI() && !forceColor) { (chalk as any).Level = 0; } diff --git a/packages/cli/lib/parse-run-one-options.spec.ts b/packages/cli/lib/parse-run-one-options.spec.ts index b1cb843a29f654..f25a96145c8fbb 100644 --- a/packages/cli/lib/parse-run-one-options.spec.ts +++ b/packages/cli/lib/parse-run-one-options.spec.ts @@ -68,6 +68,26 @@ describe('parseRunOneOptions', () => { }); }); + it('should handle dot notation', () => { + expect( + parseRunOneOptions('root', workspaceJson, [ + 'run', + 'myproj:build', + '--env.URL=https://localhost:9999', + ]) + ).toEqual({ + project: 'myproj', + target: 'build', + configuration: 'someDefaultConfig', + parsedArgs: { + _: [], + env: { + URL: 'https://localhost:9999', + }, + }, + }); + }); + it('should use defaultProjectName when no provided', () => { expect( parseRunOneOptions( diff --git a/packages/cli/lib/parse-run-one-options.ts b/packages/cli/lib/parse-run-one-options.ts index e3091797cc32d6..1350352febe301 100644 --- a/packages/cli/lib/parse-run-one-options.ts +++ b/packages/cli/lib/parse-run-one-options.ts @@ -1,5 +1,4 @@ import yargsParser = require('yargs-parser'); -import * as fs from 'fs'; import type { WorkspaceJsonConfiguration, NxJsonConfiguration, @@ -84,7 +83,6 @@ export function parseRunOneOptions( }, configuration: { 'strip-dashed': true, - 'dot-notation': false, }, }); diff --git a/packages/cli/lib/run-cli.ts b/packages/cli/lib/run-cli.ts index dfb51c47b44818..6d82f19c77fe6f 100644 --- a/packages/cli/lib/run-cli.ts +++ b/packages/cli/lib/run-cli.ts @@ -1,4 +1,4 @@ -import { writeFileSync } from 'fs'; +import { appendFileSync, closeSync, openSync, writeFileSync } from 'fs'; if (process.env.NX_TERMINAL_OUTPUT_PATH) { setUpOutputWatching( @@ -40,16 +40,18 @@ function setUpOutputWatching(captureStderr: boolean, forwardOutput: boolean) { const stdoutWrite = process.stdout._write; const stderrWrite = process.stderr._write; - let out = []; - let outWithErr = []; + // The terminal output file gets out and err + const outputPath = process.env.NX_TERMINAL_OUTPUT_PATH; + const stdoutAndStderrLogFileHandle = openSync(outputPath, 'w'); + const onlyStdout = [] as string[]; process.stdout._write = ( chunk: any, encoding: string, callback: Function ) => { - out.push(chunk.toString()); - outWithErr.push(chunk.toString()); + onlyStdout.push(chunk); + appendFileSync(stdoutAndStderrLogFileHandle, chunk); if (forwardOutput) { stdoutWrite.apply(process.stdout, [chunk, encoding, callback]); } else { @@ -62,7 +64,7 @@ function setUpOutputWatching(captureStderr: boolean, forwardOutput: boolean) { encoding: string, callback: Function ) => { - outWithErr.push(chunk.toString()); + appendFileSync(stdoutAndStderrLogFileHandle, chunk); if (forwardOutput) { stderrWrite.apply(process.stderr, [chunk, encoding, callback]); } else { @@ -70,26 +72,11 @@ function setUpOutputWatching(captureStderr: boolean, forwardOutput: boolean) { } }; - let fileWritten = false; - function writeFile(withErrors: boolean) { - if (!fileWritten) { - writeFileSync( - process.env.NX_TERMINAL_OUTPUT_PATH, - withErrors ? outWithErr.join('') : out.join('') - ); - fileWritten = true; - } - } - process.on('exit', (code) => { - if (code === 0) { - writeFile(captureStderr); - } else { - writeFile(true); + // when the process exits successfully, and we are not asked to capture stderr + // override the file with only stdout + if (code === 0 && !captureStderr) { + writeFileSync(outputPath, onlyStdout.join('')); } }); - - process.on('SIGINT', () => writeFile(true)); - process.on('SIGTERM', () => writeFile(true)); - process.on('SIGHUP', () => writeFile(true)); } diff --git a/packages/create-nx-workspace/bin/create-nx-workspace.ts b/packages/create-nx-workspace/bin/create-nx-workspace.ts index d416042aebb0f3..09816ce94940da 100644 --- a/packages/create-nx-workspace/bin/create-nx-workspace.ts +++ b/packages/create-nx-workspace/bin/create-nx-workspace.ts @@ -203,8 +203,6 @@ function showHelp() { packageManager Package manager to use (npm, yarn, pnpm) nx-cloud Use Nx Cloud (boolean) - - [new workspace options] any 'new workspace' options `); } diff --git a/packages/cypress/package.json b/packages/cypress/package.json index c157f8b0d43d63..ebf4d6a89fa757 100644 --- a/packages/cypress/package.json +++ b/packages/cypress/package.json @@ -41,7 +41,7 @@ "enhanced-resolve": "^5.8.3", "ts-loader": "^9.2.6", "tsconfig-paths": "^3.9.0", - "tsconfig-paths-webpack-plugin": "3.4.1", + "tsconfig-paths-webpack-plugin": "3.5.2", "webpack-node-externals": "^3.0.0", "fork-ts-checker-webpack-plugin": "6.2.10", "rxjs": "^6.5.4", diff --git a/packages/cypress/src/executors/cypress/cypress.impl.spec.ts b/packages/cypress/src/executors/cypress/cypress.impl.spec.ts index 6416a628cec7cb..e1b6c504cdb23e 100644 --- a/packages/cypress/src/executors/cypress/cypress.impl.spec.ts +++ b/packages/cypress/src/executors/cypress/cypress.impl.spec.ts @@ -172,6 +172,42 @@ describe('Cypress builder', () => { ); }); + it('should call `Cypress.run` with provided ciBuildId (type: number)', async () => { + const ciBuildId = 1234; + const { success } = await cypressExecutor( + { + ...cypressOptions, + ciBuildId, + }, + mockContext + ); + expect(success).toEqual(true); + expect(cypressRun).toHaveBeenCalledWith( + expect.objectContaining({ + ciBuildId: ciBuildId.toString(), + }) + ); + }); + + it('should call `Cypress.run` with provided ciBuildId (type: string)', async () => { + const ciBuildId = 'stringBuildId'; + const { success } = await cypressExecutor( + { + ...cypressOptions, + devServerTarget: undefined, + ciBuildId, + }, + mockContext + ); + expect(success).toEqual(true); + expect(cypressRun).toHaveBeenCalledWith( + expect.objectContaining({ + ciBuildId, + project: path.dirname(cypressOptions.cypressConfig), + }) + ); + }); + it('should call `Cypress.run` with provided browser', async () => { const { success } = await cypressExecutor( { diff --git a/packages/cypress/src/executors/cypress/cypress.impl.ts b/packages/cypress/src/executors/cypress/cypress.impl.ts index d5e16cb210e513..3569c5bce15bba 100644 --- a/packages/cypress/src/executors/cypress/cypress.impl.ts +++ b/packages/cypress/src/executors/cypress/cypress.impl.ts @@ -30,7 +30,7 @@ export interface CypressExecutorOptions extends Json { env?: Record; spec?: string; copyFiles?: string; - ciBuildId?: string; + ciBuildId?: string | number; group?: string; ignoreTestFiles?: string; reporter?: string; @@ -197,7 +197,7 @@ async function runCypress(baseUrl: string, opts: CypressExecutorOptions) { options.record = opts.record; options.key = opts.key; options.parallel = opts.parallel; - options.ciBuildId = opts.ciBuildId; + options.ciBuildId = opts.ciBuildId?.toString(); options.group = opts.group; options.ignoreTestFiles = opts.ignoreTestFiles; diff --git a/packages/cypress/src/executors/cypress/schema.json b/packages/cypress/src/executors/cypress/schema.json index c93feda339f29c..4424e0228922c3 100644 --- a/packages/cypress/src/executors/cypress/schema.json +++ b/packages/cypress/src/executors/cypress/schema.json @@ -74,7 +74,14 @@ "x-deprecated": true }, "ciBuildId": { - "type": "string", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], "description": "A unique identifier for a run to enable grouping or parallelization." }, "group": { diff --git a/packages/cypress/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap b/packages/cypress/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap index dedcf109a74ad0..e3d593bd50966d 100644 --- a/packages/cypress/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap +++ b/packages/cypress/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap @@ -6,9 +6,9 @@ Object { "devDependencies": Object { "@nrwl/eslint-plugin-nx": "*", "@nrwl/linter": "*", - "@typescript-eslint/eslint-plugin": "~5.3.0", - "@typescript-eslint/parser": "~5.3.0", - "eslint": "8.2.0", + "@typescript-eslint/eslint-plugin": "~5.10.0", + "@typescript-eslint/parser": "~5.10.0", + "eslint": "~8.7.0", "eslint-config-prettier": "8.1.0", "eslint-plugin-cypress": "^2.10.3", "eslint-plugin-import": "latest", diff --git a/packages/devkit/index.ts b/packages/devkit/index.ts index 57c2b9f9ce7db5..a306950c24120e 100644 --- a/packages/devkit/index.ts +++ b/packages/devkit/index.ts @@ -144,7 +144,6 @@ export type { ProjectFileMap, FileData, ProjectGraph, - ProjectGraphBuilderExplicitDependency, ProjectGraphDependency, ProjectGraphNode, ProjectGraphProjectNode, diff --git a/packages/devkit/src/generators/project-configuration.ts b/packages/devkit/src/generators/project-configuration.ts index ce28d0925a4b3a..eb4e901fb1f3d1 100644 --- a/packages/devkit/src/generators/project-configuration.ts +++ b/packages/devkit/src/generators/project-configuration.ts @@ -8,7 +8,7 @@ import { toNewFormat, WorkspaceJsonConfiguration, } from '@nrwl/tao/src/shared/workspace'; -import { basename, dirname } from 'path'; +import { basename, dirname, relative } from 'path'; import { getWorkspaceLayout, @@ -113,11 +113,6 @@ export function readWorkspaceConfiguration(tree: Tree): WorkspaceConfiguration { return workspace; } - const nxJsonExtends = readNxJsonExtends(tree, nxJson as any); - if (nxJsonExtends) { - nxJson = { ...nxJsonExtends, ...nxJson }; - } - return { ...workspace, ...nxJson, @@ -145,6 +140,7 @@ export function updateWorkspaceConfiguration( workspaceLayout, tasksRunnerOptions, affected, + extends: ext, } = workspaceConfig; const nxJson: Required = { @@ -158,12 +154,13 @@ export function updateWorkspaceConfiguration( cli, generators, defaultProject, + extends: ext, }; if (tree.exists('nx.json')) { updateJson(tree, 'nx.json', (json) => { - const nxJsonExtends = readNxJsonExtends(tree, json as any); - if (nxJsonExtends) { + if (json.extends) { + const nxJsonExtends = readNxJsonExtends(tree, json.extends); const changedPropsOfNxJson = {}; Object.keys(nxJson).forEach((prop) => { if ( @@ -192,18 +189,19 @@ export function updateWorkspaceConfiguration( } } -function readNxJsonExtends(tree: Tree, nxJson: { extends?: string }) { - if (nxJson.extends) { - const extendsPath = nxJson.extends; - try { - return JSON.parse( - tree.read(joinPathFragments('node_modules', extendsPath), 'utf-8') - ); - } catch (e) { - throw new Error(`Unable to resolve nx.json extends. Error: ${e.message}`); - } - } else { - return null; +function readNxJsonExtends(tree: Tree, extendsPath: string) { + try { + return readJson( + tree, + relative( + tree.root, + require.resolve(extendsPath, { + paths: [tree.root], + }) + ) + ); + } catch (e) { + throw new Error(`Unable to resolve nx.json extends. Error: ${e.message}`); } } @@ -238,9 +236,8 @@ export function readNxJson(tree: Tree): NxJsonConfiguration | null { return null; } let nxJson = readJson(tree, 'nx.json'); - const nxJsonExtends = readNxJsonExtends(tree, nxJson as any); - if (nxJsonExtends) { - nxJson = { ...nxJsonExtends, ...nxJson }; + if (nxJson.extends) { + nxJson = { ...readNxJsonExtends(tree, nxJson.extends), ...nxJson }; } return nxJson; } diff --git a/packages/devkit/src/project-graph/project-graph-builder.spec.ts b/packages/devkit/src/project-graph/project-graph-builder.spec.ts index 36e44eb86fcc4f..c86dce4c11863c 100644 --- a/packages/devkit/src/project-graph/project-graph-builder.spec.ts +++ b/packages/devkit/src/project-graph/project-graph-builder.spec.ts @@ -1,4 +1,3 @@ -import { DependencyType } from './interfaces'; import { ProjectGraphBuilder } from './project-graph-builder'; describe('ProjectGraphBuilder', () => { @@ -97,77 +96,21 @@ describe('ProjectGraphBuilder', () => { }); }); - describe('dependency type priority', () => { - it(`should use implicit dep when both implicit and explicit deps are available`, () => { - // don't include duplicates - builder.addImplicitDependency('source', 'target'); - builder.addExplicitDependency('source', 'source/index.ts', 'target'); - - const graph = builder.getUpdatedProjectGraph(); - expect(graph.dependencies).toEqual({ - source: [ - { - source: 'source', - target: 'target', - type: 'implicit', - }, - ], - target: [], - }); - }); - - it(`should use explicit deps in priority order "static > dynamic"`, () => { - builder.addExplicitDependency( - 'source', - 'source/index.ts', - 'target', - DependencyType.dynamic - ); - builder.addExplicitDependency( - 'source', - 'source/index.ts', - 'target', - DependencyType.static - ); - - const graph = builder.getUpdatedProjectGraph(); - expect(graph.dependencies).toEqual({ - source: [ - { - source: 'source', - target: 'target', - type: DependencyType.static, - }, - ], - target: [], - }); - }); - - it(`should use explicit deps in priority order "dynamic > type-only"`, () => { - builder.addExplicitDependency( - 'source', - 'source/index.ts', - 'target', - DependencyType.dynamic - ); - builder.addExplicitDependency( - 'source', - 'source/second.ts', - 'target', - DependencyType.typeOnly - ); + it(`should use implicit dep when both implicit and explicit deps are available`, () => { + // don't include duplicates + builder.addImplicitDependency('source', 'target'); + builder.addExplicitDependency('source', 'source/index.ts', 'target'); - const graph = builder.getUpdatedProjectGraph(); - expect(graph.dependencies).toEqual({ - source: [ - { - source: 'source', - target: 'target', - type: DependencyType.dynamic, - }, - ], - target: [], - }); + const graph = builder.getUpdatedProjectGraph(); + expect(graph.dependencies).toEqual({ + source: [ + { + source: 'source', + target: 'target', + type: 'implicit', + }, + ], + target: [], }); }); diff --git a/packages/devkit/src/project-graph/project-graph-builder.ts b/packages/devkit/src/project-graph/project-graph-builder.ts index e0e13440d3377a..b97bafc3164d91 100644 --- a/packages/devkit/src/project-graph/project-graph-builder.ts +++ b/packages/devkit/src/project-graph/project-graph-builder.ts @@ -1,5 +1,4 @@ import type { - FileData, ProjectGraph, ProjectGraphDependency, ProjectGraphExternalNode, @@ -111,8 +110,7 @@ export class ProjectGraphBuilder { addExplicitDependency( sourceProjectName: string, sourceProjectFile: string, - targetProjectName: string, - dependencyType: DependencyType = DependencyType.static // TODO: Make this argument required + targetProjectName: string ): void { if (sourceProjectName === targetProjectName) { return; @@ -129,8 +127,9 @@ export class ProjectGraphBuilder { throw new Error(`Target project does not exist: ${targetProjectName}`); } - const files = source.data.files as FileData[]; - const fileData = files.find((f) => f.file === sourceProjectFile); + const fileData = source.data.files.find( + (f) => f.file === sourceProjectFile + ); if (!fileData) { throw new Error( `Source project ${sourceProjectName} does not have a file: ${sourceProjectFile}` @@ -141,19 +140,8 @@ export class ProjectGraphBuilder { fileData.deps = []; } - const existingFileDep = fileData.deps.find( - (t) => t.projectName === targetProjectName - ); - if (existingFileDep) { - existingFileDep.dependencyType = this.getHigherPriorityDepType( - existingFileDep.dependencyType, - dependencyType - ); - } else { - fileData.deps.push({ - projectName: targetProjectName, - dependencyType, - }); + if (!fileData.deps.find((t) => t === targetProjectName)) { + fileData.deps.push(targetProjectName); } } @@ -165,76 +153,54 @@ export class ProjectGraphBuilder { } getUpdatedProjectGraph(): ProjectGraph { - const isRemoved = (sourceProject: string, targetProject: string) => - this.removedEdges[sourceProject] && - this.removedEdges[sourceProject].has(targetProject); for (const sourceProject of Object.keys(this.graph.nodes)) { - const sourceProjectDepMap = new Map( - this.graph.dependencies[sourceProject] - .map((dep) => [dep.target, dep] as const) - .filter(([targetProject]) => !isRemoved(sourceProject, targetProject)) - ); + const alreadySetTargetProjects = + this.calculateAlreadySetTargetDeps(sourceProject); + this.graph.dependencies[sourceProject] = [ + ...alreadySetTargetProjects.values(), + ]; const fileDeps = this.calculateTargetDepsFromFiles(sourceProject); - for (const [targetProject, targetProjectDepType] of fileDeps) { - if (sourceProjectDepMap.has(targetProject)) { - const existingDep = sourceProjectDepMap.get(targetProject); - existingDep.type = this.getHigherPriorityDepType( - existingDep.type, - targetProjectDepType - ); - } else if (!isRemoved(sourceProject, targetProject)) { - sourceProjectDepMap.set(targetProject, { - source: sourceProject, - target: targetProject, - type: targetProjectDepType, - }); + for (const targetProject of fileDeps) { + if (!alreadySetTargetProjects.has(targetProject)) { + if ( + !this.removedEdges[sourceProject] || + !this.removedEdges[sourceProject].has(targetProject) + ) { + this.graph.dependencies[sourceProject].push({ + source: sourceProject, + target: targetProject, + type: DependencyType.static, + }); + } } } - - this.graph.dependencies[sourceProject] = [ - ...sourceProjectDepMap.values(), - ]; } return this.graph; } private calculateTargetDepsFromFiles(sourceProject: string) { - const fileDeps = new Map(); - const files: FileData[] = this.graph.nodes[sourceProject].data.files; + const fileDeps = new Set(); + const files = this.graph.nodes[sourceProject].data.files; if (!files) return fileDeps; for (let f of files) { if (f.deps) { for (let p of f.deps) { - if (fileDeps.has(p.projectName)) { - const existingDepType = fileDeps.get(p.projectName); - const priorityDepType = this.getHigherPriorityDepType( - p.dependencyType, - existingDepType - ); - fileDeps.set(p.projectName, priorityDepType); - } else { - fileDeps.set(p.projectName, p.dependencyType); - } + fileDeps.add(p); } } } return fileDeps; } - private getHigherPriorityDepType( - depTypeA: DependencyType, - depTypeB: DependencyType - ): DependencyType { - for (const priorityDepType of [ - DependencyType.implicit, - DependencyType.static, - DependencyType.dynamic, - DependencyType.typeOnly, - ]) { - if (depTypeA === priorityDepType || depTypeB === priorityDepType) { - return priorityDepType; + private calculateAlreadySetTargetDeps(sourceProject: string) { + const alreadySetTargetProjects = new Map(); + const removed = this.removedEdges[sourceProject]; + for (const d of this.graph.dependencies[sourceProject]) { + if (!removed || !removed.has(d.target)) { + alreadySetTargetProjects.set(d.target, d); } } + return alreadySetTargetProjects; } } diff --git a/packages/eslint-plugin-nx/package.json b/packages/eslint-plugin-nx/package.json index 9079e7f401ab53..17b249080b48d2 100644 --- a/packages/eslint-plugin-nx/package.json +++ b/packages/eslint-plugin-nx/package.json @@ -23,16 +23,21 @@ }, "homepage": "https://nx.dev", "peerDependencies": { - "@typescript-eslint/parser": "~5.3.0", + "@typescript-eslint/parser": "~5.10.0", "eslint-config-prettier": "^8.1.0" }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + }, "dependencies": { "@nrwl/devkit": "*", "@nrwl/workspace": "*", - "@typescript-eslint/experimental-utils": "~5.3.0", + "@swc-node/register": "^1.4.2", + "@typescript-eslint/experimental-utils": "~5.10.0", "chalk": "4.1.0", "confusing-browser-globals": "^1.0.9", - "ts-node": "^9.1.1", "tsconfig-paths": "^3.9.0" } } diff --git a/packages/eslint-plugin-nx/src/configs/typescript.ts b/packages/eslint-plugin-nx/src/configs/typescript.ts index 48902699cc5e3c..7758f69f7040ba 100644 --- a/packages/eslint-plugin-nx/src/configs/typescript.ts +++ b/packages/eslint-plugin-nx/src/configs/typescript.ts @@ -6,11 +6,6 @@ import { appRootPath } from '@nrwl/tao/src/utils/app-root'; * * It should therefore NOT contain any rules or plugins which are specific * to one ecosystem, such as React, Angular, Node etc. - * - * NOTE: Currently the one exception to this is that there is an override for .tsx - * for the @typescript-eslint/no-unused-vars rule for backwards compatibility - * with the original root Nx ESlint config. This will be split out into a dedicated - * tsx configuration in a follow up PR which handles overrides. */ export default { parser: '@typescript-eslint/parser', diff --git a/packages/eslint-plugin-nx/src/resolve-workspace-rules.ts b/packages/eslint-plugin-nx/src/resolve-workspace-rules.ts index adf1a95b759c08..127fda07d5843b 100644 --- a/packages/eslint-plugin-nx/src/resolve-workspace-rules.ts +++ b/packages/eslint-plugin-nx/src/resolve-workspace-rules.ts @@ -1,5 +1,9 @@ import type { TSESLint } from '@typescript-eslint/experimental-utils'; +import { existsSync } from 'fs'; +import { join } from 'path'; import { WORKSPACE_PLUGIN_DIR, WORKSPACE_RULE_NAMESPACE } from './constants'; +import { readDefaultTsConfig } from '@swc-node/register/read-default-tsconfig'; +import { register } from '@swc-node/register/register'; type ESLintRules = Record>; @@ -11,42 +15,51 @@ type ESLintRules = Record>; * tools/eslint-rules and write their rules in JavaScript and the fundamentals will still work (but * workspace path mapping will not, for example). */ -try { - require('ts-node').register({ - dir: WORKSPACE_PLUGIN_DIR, - }); +function registerTSWorkspaceLint() { + try { + register(readDefaultTsConfig(join(WORKSPACE_PLUGIN_DIR, 'tsconfig.json'))); - const tsconfigPaths = require('tsconfig-paths'); + const tsconfigPaths = require('tsconfig-paths'); - // Load the tsconfig from tools/eslint-rules/tsconfig.json - const tsConfigResult = tsconfigPaths.loadConfig(WORKSPACE_PLUGIN_DIR); + // Load the tsconfig from tools/eslint-rules/tsconfig.json + const tsConfigResult = tsconfigPaths.loadConfig(WORKSPACE_PLUGIN_DIR); - /** - * Register the custom workspace path mappings with node so that workspace libraries - * can be imported and used within custom workspace lint rules. - */ - tsconfigPaths.register({ - baseUrl: tsConfigResult.absoluteBaseUrl, - paths: tsConfigResult.paths, - }); -} catch (err) {} + /** + * Register the custom workspace path mappings with node so that workspace libraries + * can be imported and used within custom workspace lint rules. + */ + return tsconfigPaths.register({ + baseUrl: tsConfigResult.absoluteBaseUrl, + paths: tsConfigResult.paths, + }); + } catch (err) {} +} export const workspaceRules = ((): ESLintRules => { + // If `tools/eslint-rules` folder doesn't exist, there is no point trying to register and load it + if (!existsSync(WORKSPACE_PLUGIN_DIR)) { + return {}; + } + // Register `tools/eslint-rules` for TS transpilation + const registrationCleanup = registerTSWorkspaceLint(); try { /** * Currently we only support applying the rules from the user's workspace plugin object * (i.e. not other things that plugings can expose like configs, processors etc) */ const { rules } = require(WORKSPACE_PLUGIN_DIR); - const localWorkspaceRules: ESLintRules = rules; // Apply the namespace to the resolved rules const namespacedRules: ESLintRules = {}; - for (const [ruleName, ruleConfig] of Object.entries(localWorkspaceRules)) { + for (const [ruleName, ruleConfig] of Object.entries(rules as ESLintRules)) { namespacedRules[`${WORKSPACE_RULE_NAMESPACE}/${ruleName}`] = ruleConfig; } return namespacedRules; } catch (err) { return {}; + } finally { + if (registrationCleanup) { + registrationCleanup(); + } } })(); diff --git a/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts b/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts index 9481b81c630897..8d0839bed51a0c 100644 --- a/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts +++ b/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts @@ -1752,16 +1752,7 @@ linter.defineParser('@typescript-eslint/parser', parser); linter.defineRule(enforceModuleBoundariesRuleName, enforceModuleBoundaries); function createFile(f: string, deps?: string[]): FileData { - return { - file: f, - hash: '', - ...(deps && { - deps: deps.map((dep) => ({ - projectName: dep, - dependencyType: DependencyType.static, - })), - }), - }; + return { file: f, hash: '', ...(deps && { deps }) }; } function runRule( diff --git a/packages/express/migrations.json b/packages/express/migrations.json index 63001b44588915..a935a0b37a984b 100644 --- a/packages/express/migrations.json +++ b/packages/express/migrations.json @@ -1,3 +1,18 @@ { - "schematics": {} + "schematics": {}, + "packageJsonUpdates": { + "13.7.0": { + "version": "13.7.0", + "packages": { + "express": { + "version": "4.17.2", + "alwaysAddToPackageJson": false + }, + "@types/express": { + "version": "4.17.13", + "alwaysAddToPackageJson": false + } + } + } + } } diff --git a/packages/express/package.json b/packages/express/package.json index 77d9f69f046a70..0bd0a47f101c46 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -31,7 +31,14 @@ "dependencies": { "@nrwl/devkit": "*", "@nrwl/node": "*", - "@nrwl/jest": "*", "@nrwl/workspace": "*" + }, + "peerDependencies": { + "express": "4.17.2" + }, + "peerDependenciesMeta": { + "express": { + "optional": true + } } } diff --git a/packages/express/src/generators/application/application.spec.ts b/packages/express/src/generators/application/application.spec.ts index 47844d23e44964..620a4e62051f02 100644 --- a/packages/express/src/generators/application/application.spec.ts +++ b/packages/express/src/generators/application/application.spec.ts @@ -1,6 +1,5 @@ import { readJson, Tree } from '@nrwl/devkit'; import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; - import { applicationGenerator } from './application'; import { Schema } from './schema'; diff --git a/packages/express/src/generators/application/application.ts b/packages/express/src/generators/application/application.ts index e5e60a109075e8..88c73005a7474d 100644 --- a/packages/express/src/generators/application/application.ts +++ b/packages/express/src/generators/application/application.ts @@ -5,29 +5,30 @@ import { joinPathFragments, names, toJS, - Tree, updateJson, } from '@nrwl/devkit'; - +import type { Tree } from '@nrwl/devkit'; import { applicationGenerator as nodeApplicationGenerator } from '@nrwl/node'; - import { join } from 'path'; -import { Schema } from './schema'; import { initGenerator } from '../init/init'; +import type { Schema } from './schema'; interface NormalizedSchema extends Schema { appProjectRoot: string; } function addTypes(tree: Tree, options: NormalizedSchema) { - const tsConfigPath = join(options.appProjectRoot, 'tsconfig.app.json'); - updateJson(tree, tsConfigPath, (json) => { - json.compilerOptions.types = [...json.compilerOptions.types, 'express']; - return json; - }); + updateJson( + tree, + join(options.appProjectRoot, 'tsconfig.app.json'), + (json) => { + json.compilerOptions.types = [...json.compilerOptions.types, 'express']; + return json; + } + ); } -function addAppFiles(tree: Tree, options: NormalizedSchema) { +function addMainFile(tree: Tree, options: NormalizedSchema) { tree.write( join(options.appProjectRoot, `src/main.${options.js ? 'js' : 'ts'}`), `/** @@ -63,9 +64,12 @@ export async function applicationGenerator(tree: Tree, schema: Schema) { ...schema, skipFormat: true, }); - addAppFiles(tree, options); + addMainFile(tree, options); addTypes(tree, options); - await formatFiles(tree); + + if (!options.skipFormat) { + await formatFiles(tree); + } return async () => { await initTask(); diff --git a/packages/express/src/generators/init/init.spec.ts b/packages/express/src/generators/init/init.spec.ts index ca9af10b774a33..827dd1a23faf1d 100644 --- a/packages/express/src/generators/init/init.spec.ts +++ b/packages/express/src/generators/init/init.spec.ts @@ -1,12 +1,12 @@ import { addDependenciesToPackageJson, + readJson, NxJsonConfiguration, Tree, } from '@nrwl/devkit'; import { expressVersion } from '../../utils/versions'; import initGenerator from './init'; import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; -import { readJson } from '@nrwl/devkit'; describe('init', () => { let tree: Tree; diff --git a/packages/express/src/generators/init/init.ts b/packages/express/src/generators/init/init.ts index c8a0a020235b05..98406891c0495b 100644 --- a/packages/express/src/generators/init/init.ts +++ b/packages/express/src/generators/init/init.ts @@ -1,48 +1,41 @@ import { addDependenciesToPackageJson, - Tree, updateJson, formatFiles, convertNxGenerator, + Tree, } from '@nrwl/devkit'; - import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection'; - import { initGenerator as nodeInitGenerator } from '@nrwl/node'; - import { expressTypingsVersion, expressVersion, nxVersion, } from '../../utils/versions'; -import { Schema } from './schema'; +import type { Schema } from './schema'; -function removeNrwlExpressFromDeps(tree: Tree) { +function updateDependencies(tree: Tree) { updateJson(tree, 'package.json', (json) => { delete json.dependencies['@nrwl/express']; return json; }); -} - -export async function initGenerator(tree: Tree, schema: Schema) { - setDefaultCollection(tree, '@nrwl/express'); - - const initTask = await nodeInitGenerator(tree, { - unitTestRunner: schema.unitTestRunner, - skipFormat: true, - }); - removeNrwlExpressFromDeps(tree); - const installTask = addDependenciesToPackageJson( + return addDependenciesToPackageJson( tree, { express: expressVersion, - tslib: '^2.0.0', }, { '@types/express': expressTypingsVersion, '@nrwl/express': nxVersion, } ); +} + +export async function initGenerator(tree: Tree, schema: Schema) { + setDefaultCollection(tree, '@nrwl/express'); + + const initTask = await nodeInitGenerator(tree, schema); + const installTask = updateDependencies(tree); if (!schema.skipFormat) { await formatFiles(tree); } diff --git a/packages/express/src/utils/versions.ts b/packages/express/src/utils/versions.ts index 7f5a6d9269eae8..692bcaab0fa1e9 100644 --- a/packages/express/src/utils/versions.ts +++ b/packages/express/src/utils/versions.ts @@ -1,4 +1,4 @@ export const nxVersion = '*'; -export const expressVersion = '4.17.1'; -export const expressTypingsVersion = '4.17.0'; +export const expressVersion = '4.17.2'; +export const expressTypingsVersion = '4.17.13'; diff --git a/packages/js/src/utils/check-dependencies.ts b/packages/js/src/utils/check-dependencies.ts index 72e7124a206d71..f03904ff79ab4c 100644 --- a/packages/js/src/utils/check-dependencies.ts +++ b/packages/js/src/utils/check-dependencies.ts @@ -49,7 +49,7 @@ export function checkDependencies( } return { tmpTsConfig: createTmpTsConfig( - join(context.root, tsConfigPath), + tsConfigPath, context.root, projectRoot, dependencies diff --git a/packages/linter/migrations.json b/packages/linter/migrations.json index 08691b1cfd86d2..d20330c8cb9162 100644 --- a/packages/linter/migrations.json +++ b/packages/linter/migrations.json @@ -168,6 +168,23 @@ "version": "8.2.0" } } + }, + "13.7.0": { + "version": "13.7.0-beta.0", + "packages": { + "@typescript-eslint/parser": { + "version": "~5.10.0" + }, + "@typescript-eslint/eslint-plugin": { + "version": "~5.10.0" + }, + "@typescript-eslint/experimental-utils": { + "version": "~5.10.0" + }, + "eslint": { + "version": "~8.7.0" + } + } } } } diff --git a/packages/linter/src/executors/eslint/lint.impl.ts b/packages/linter/src/executors/eslint/lint.impl.ts index a72739e97462a2..0cd6d460d4f41e 100644 --- a/packages/linter/src/executors/eslint/lint.impl.ts +++ b/packages/linter/src/executors/eslint/lint.impl.ts @@ -120,7 +120,7 @@ Please see https://nx.dev/guides/eslint for full guidance on how to resolve this } } - const formattedResults = formatter.format(lintResults); + const formattedResults = await formatter.format(lintResults); if (options.outputFile) { const pathToOutputFile = join(context.root, options.outputFile); diff --git a/packages/linter/src/utils/convert-tslint-to-eslint/__snapshots__/project-converter.spec.ts.snap b/packages/linter/src/utils/convert-tslint-to-eslint/__snapshots__/project-converter.spec.ts.snap index 24ee4a7f7173e1..50ff69cdd603b9 100644 --- a/packages/linter/src/utils/convert-tslint-to-eslint/__snapshots__/project-converter.spec.ts.snap +++ b/packages/linter/src/utils/convert-tslint-to-eslint/__snapshots__/project-converter.spec.ts.snap @@ -344,6 +344,4 @@ exports[`ProjectConverter should throw if -d is set 1`] = ` " `; -exports[`ProjectConverter should throw if no project tslint.json is found 1`] = `"We could not find a tslint.json for the selected project \\"apps/foo/tslint.json\\", maybe you have already migrated to ESLint?"`; - exports[`ProjectConverter should throw if no root tslint.json is found 1`] = `"We could not find a tslint.json at the root of your workspace, maybe you have already migrated to ESLint?"`; diff --git a/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.spec.ts b/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.spec.ts index be910756f1865c..8f28e823b55625 100644 --- a/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.spec.ts +++ b/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.spec.ts @@ -146,7 +146,19 @@ describe('ProjectConverter', () => { ).toThrowErrorMatchingSnapshot(); }); - it('should throw if no project tslint.json is found', () => { + it('should not throw if no root tslint.json is found but ignore is set', () => { + expect( + () => + new ProjectConverter({ + host, + projectName, + ignoreExistingTslintConfig: true, + eslintInitializer: () => undefined, + }) + ).not.toThrow(); + }); + + it('should not throw if no project tslint.json is found', () => { writeJson(host, 'tslint.json', {}); expect( @@ -157,7 +169,7 @@ describe('ProjectConverter', () => { ignoreExistingTslintConfig: false, eslintInitializer: () => undefined, }) - ).toThrowErrorMatchingSnapshot(); + ).not.toThrow(); }); it('should not throw when not in dry-run and config files successfully found', () => { diff --git a/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.ts b/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.ts index 231fea1fd99d7c..3a1666ee50e288 100644 --- a/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.ts +++ b/packages/linter/src/utils/convert-tslint-to-eslint/project-converter.ts @@ -101,18 +101,21 @@ export class ProjectConverter { * Given the user is converting a project from TSLint to ESLint, we expect them * to have both a root and a project-specific tslint.json */ - if (!host.exists(this.rootTSLintJsonPath)) { - throw new Error( - 'We could not find a tslint.json at the root of your workspace, maybe you have already migrated to ESLint?' - ); - } - if (!host.exists(this.projectTSLintJsonPath)) { - throw new Error( - `We could not find a tslint.json for the selected project "${this.projectTSLintJsonPath}", maybe you have already migrated to ESLint?` - ); + if (!ignoreExistingTslintConfig) { + if (!host.exists(this.rootTSLintJsonPath)) { + throw new Error( + 'We could not find a tslint.json at the root of your workspace, maybe you have already migrated to ESLint?' + ); + } + this.rootTSLintJson = readJson(host, this.rootTSLintJsonPath); + if (!host.exists(this.projectTSLintJsonPath)) { + logger.warn( + `We could not find a tslint.json for the selected project "${this.projectTSLintJsonPath}", maybe you have already migrated to ESLint?` + ); + } else { + this.projectTSLintJson = readJson(host, this.projectTSLintJsonPath); + } } - this.rootTSLintJson = readJson(host, this.rootTSLintJsonPath); - this.projectTSLintJson = readJson(host, this.projectTSLintJsonPath); /** * We are not able to support --dry-run in this generator, because we need to dynamically install @@ -267,7 +270,7 @@ export class ProjectConverter { async convertProjectConfig( applyPackageSpecificModifications: (json: Linter.Config) => Linter.Config ): Promise { - if (this.ignoreExistingTslintConfig) { + if (this.ignoreExistingTslintConfig || !this.projectTSLintJson) { return Promise.resolve(() => {}); } diff --git a/packages/linter/src/utils/versions.ts b/packages/linter/src/utils/versions.ts index 5a8622ecfe1f40..5b74f97cfc08f0 100644 --- a/packages/linter/src/utils/versions.ts +++ b/packages/linter/src/utils/versions.ts @@ -2,8 +2,8 @@ export const nxVersion = '*'; export const tslintVersion = '~6.1.0'; export const tslintToEslintConfigVersion = '^2.4.0'; -export const buildAngularVersion = '~13.1.0'; +export const buildAngularVersion = '~13.2.0'; -export const typescriptESLintVersion = '~5.3.0'; -export const eslintVersion = '8.2.0'; +export const typescriptESLintVersion = '~5.10.0'; +export const eslintVersion = '~8.7.0'; export const eslintConfigPrettierVersion = '8.1.0'; diff --git a/packages/nest/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap b/packages/nest/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap index 432412847b5547..1cb4a96529835e 100644 --- a/packages/nest/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap +++ b/packages/nest/src/generators/convert-tslint-to-eslint/__snapshots__/convert-tslint-to-eslint.spec.ts.snap @@ -6,9 +6,9 @@ Object { "devDependencies": Object { "@nrwl/eslint-plugin-nx": "*", "@nrwl/linter": "*", - "@typescript-eslint/eslint-plugin": "~5.3.0", - "@typescript-eslint/parser": "~5.3.0", - "eslint": "8.2.0", + "@typescript-eslint/eslint-plugin": "~5.10.0", + "@typescript-eslint/parser": "~5.10.0", + "eslint": "~8.7.0", "eslint-config-prettier": "8.1.0", "eslint-plugin-import": "latest", }, @@ -299,9 +299,9 @@ Object { "devDependencies": Object { "@nrwl/eslint-plugin-nx": "*", "@nrwl/linter": "*", - "@typescript-eslint/eslint-plugin": "~5.3.0", - "@typescript-eslint/parser": "~5.3.0", - "eslint": "8.2.0", + "@typescript-eslint/eslint-plugin": "~5.10.0", + "@typescript-eslint/parser": "~5.10.0", + "eslint": "~8.7.0", "eslint-config-prettier": "8.1.0", "eslint-plugin-import": "latest", }, diff --git a/packages/next/src/utils/config.spec.ts b/packages/next/src/utils/config.spec.ts index 0784aca49d60a5..0de707596aaff6 100644 --- a/packages/next/src/utils/config.spec.ts +++ b/packages/next/src/utils/config.spec.ts @@ -2,16 +2,11 @@ import { createWebpackConfig, prepareConfig } from './config'; import { NextBuildBuilderOptions } from '@nrwl/next'; import { dirname } from 'path'; import { importConstants } from './require-shim'; -// Inlining tsconfig-paths-webpack-plugin with a patch -// See: https://github.com/dividab/tsconfig-paths-webpack-plugin/pull/85 -// TODO(jack): Remove once the patch lands in original package -import { TsconfigPathsPlugin } from '@nrwl/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin'; +import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; const { PHASE_PRODUCTION_BUILD } = importConstants(); -jest.mock( - '@nrwl/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin' -); +jest.mock('tsconfig-paths-webpack-plugin'); jest.mock('next/dist/server/config', () => ({ __esModule: true, default: () => ({ diff --git a/packages/next/src/utils/config.ts b/packages/next/src/utils/config.ts index ae46e4cadc3ce3..5f241f08ff076e 100644 --- a/packages/next/src/utils/config.ts +++ b/packages/next/src/utils/config.ts @@ -10,7 +10,7 @@ import type { PHASE_PRODUCTION_SERVER, } from 'next/dist/shared/lib/constants'; import { join, resolve } from 'path'; -import { TsconfigPathsPlugin } from '@nrwl/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin'; +import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; import { Configuration } from 'webpack'; import { FileReplacement, @@ -71,7 +71,7 @@ export function createWebpackConfig( configFile: tsConfigPath, extensions, mainFields, - }), + }) as never, // TODO: Remove never type when 'tsconfig-paths-webpack-plugin' types fixed ]; fileReplacements diff --git a/packages/node/package.json b/packages/node/package.json index d165793a17807d..2225b4c679386b 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -40,18 +40,18 @@ "fork-ts-checker-webpack-plugin": "6.2.10", "fs-extra": "^9.1.0", "glob": "7.1.4", - "license-webpack-plugin": "2.3.15", + "license-webpack-plugin": "4.0.0", "rxjs": "^6.5.4", "source-map-support": "0.5.19", "tree-kill": "1.2.2", "ts-loader": "^9.2.6", "tsconfig-paths": "^3.9.0", - "tsconfig-paths-webpack-plugin": "3.4.1", + "tsconfig-paths-webpack-plugin": "3.5.2", "tslib": "^2.3.0", "webpack": "^5.58.1", "webpack-merge": "^5.8.0", "webpack-node-externals": "^3.0.0", - "terser-webpack-plugin": "^5.1.1", + "terser-webpack-plugin": "^5.3.0", "rxjs-for-await": "0.0.2", "ts-node": "~9.1.1" } diff --git a/packages/node/src/executors/build/build.impl.spec.ts b/packages/node/src/executors/build/build.impl.spec.ts index 23956ba2072b2d..912a12e66ea859 100644 --- a/packages/node/src/executors/build/build.impl.spec.ts +++ b/packages/node/src/executors/build/build.impl.spec.ts @@ -5,7 +5,7 @@ import type { ProjectGraph } from '@nrwl/workspace/src/core/project-graph'; import buildExecutor from './build.impl'; import { BuildNodeBuilderOptions } from '../../utils/types'; -jest.mock('../../utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin'); +jest.mock('tsconfig-paths-webpack-plugin'); jest.mock('../../utils/run-webpack', () => ({ runWebpack: jest.fn(), })); diff --git a/packages/node/src/executors/package/package.impl.spec.ts b/packages/node/src/executors/package/package.impl.spec.ts index 262b643b385abe..e60cd07e12c232 100644 --- a/packages/node/src/executors/package/package.impl.spec.ts +++ b/packages/node/src/executors/package/package.impl.spec.ts @@ -1,4 +1,4 @@ -import { DependencyType, ExecutorContext } from '@nrwl/devkit'; +import { ExecutorContext } from '@nrwl/devkit'; import { join } from 'path'; import { mocked } from 'ts-jest/utils'; @@ -309,7 +309,7 @@ describe('NodePackageBuilder', () => { dependencies: { nodelib: [ { - type: DependencyType.static, + type: ProjectType.lib, target: 'nodelib-child', source: null, }, diff --git a/packages/node/src/utils/config.ts b/packages/node/src/utils/config.ts index a34b84c01fd1d2..b0084db6ab73d9 100644 --- a/packages/node/src/utils/config.ts +++ b/packages/node/src/utils/config.ts @@ -8,11 +8,7 @@ import { BuildBuilderOptions } from './types'; import { loadTsPlugins } from './load-ts-plugins'; import CopyWebpackPlugin = require('copy-webpack-plugin'); import ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); - -// Inlining tsconfig-paths-webpack-plugin with a patch -// See: https://github.com/dividab/tsconfig-paths-webpack-plugin/pull/85 -// TODO(jack): Remove once the patch lands in original package -import TsConfigPathsPlugin from './webpack/plugins/tsconfig-paths/tsconfig-paths.plugin'; +import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; export const OUT_FILENAME_TEMPLATE = '[name].js'; @@ -85,11 +81,11 @@ export function getBaseWebpackPartial( extensions, alias: getAliases(options), plugins: [ - new TsConfigPathsPlugin({ + new TsconfigPathsPlugin({ configFile: options.tsConfig, extensions, mainFields, - }), + }) as never, // TODO: Remove never type when 'tsconfig-paths-webpack-plugin' types fixed ], mainFields, }, diff --git a/packages/node/src/utils/node.config.spec.ts b/packages/node/src/utils/node.config.spec.ts index 2ebbd446846911..834e27ae0ab240 100644 --- a/packages/node/src/utils/node.config.spec.ts +++ b/packages/node/src/utils/node.config.spec.ts @@ -1,9 +1,9 @@ import { join } from 'path'; import { getNodeWebpackConfig } from './node.config'; -import TsConfigPathsPlugin from './webpack/plugins/tsconfig-paths/tsconfig-paths.plugin'; +import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; import { BuildNodeBuilderOptions } from './types'; -jest.mock('./webpack/plugins/tsconfig-paths/tsconfig-paths.plugin'); +jest.mock('tsconfig-paths-webpack-plugin'); jest.mock('@nrwl/tao/src/utils/app-root', () => ({ get appRootPath() { return join(__dirname, '../../../..'); @@ -21,7 +21,7 @@ describe('getNodePartial', () => { fileReplacements: [], statsJson: false, }; - (TsConfigPathsPlugin).mockImplementation( + (TsconfigPathsPlugin).mockImplementation( function MockPathsPlugin() {} ); }); diff --git a/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.logger.ts b/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.logger.ts deleted file mode 100644 index 55d7d242579583..00000000000000 --- a/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.logger.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Console } from 'console'; -import { Chalk } from 'chalk'; -import { Options } from './tsconfig-paths.options'; - -// tslint:disable-next-line:no-any -type InternalLoggerFunc = (whereToLog: any, message: string) => void; - -export type LoggerFunc = (message: string) => void; - -export interface Logger { - log: LoggerFunc; - logInfo: LoggerFunc; - logWarning: LoggerFunc; - logError: LoggerFunc; -} - -enum LogLevel { - INFO = 1, - WARN = 2, - ERROR = 3, -} - -const stderrConsole = new Console(process.stderr); -const stdoutConsole = new Console(process.stdout); - -const doNothingLogger = (_message: string) => { - /* Do nothing */ -}; - -const makeLoggerFunc = (options: Options): InternalLoggerFunc => - options.silent - ? (_whereToLog: Console, _message: string) => { - /* Do nothing */ - } - : (whereToLog: Console, message: string) => whereToLog.log(message); - -const makeExternalLogger = - (loaderOptions: Options, logger: InternalLoggerFunc) => (message: string) => - logger( - loaderOptions.logInfoToStdOut ? stdoutConsole : stderrConsole, - message - ); - -const makeLogInfo = ( - options: Options, - logger: InternalLoggerFunc, - green: Chalk -) => - LogLevel[options.logLevel] <= LogLevel.INFO - ? (message: string) => - logger( - options.logInfoToStdOut ? stdoutConsole : stderrConsole, - green(message) - ) - : doNothingLogger; - -const makeLogError = ( - options: Options, - logger: InternalLoggerFunc, - red: Chalk -) => - LogLevel[options.logLevel] <= LogLevel.ERROR - ? (message: string) => logger(stderrConsole, red(message)) - : doNothingLogger; - -const makeLogWarning = ( - options: Options, - logger: InternalLoggerFunc, - yellow: Chalk -) => - LogLevel[options.logLevel] <= LogLevel.WARN - ? (message: string) => logger(stderrConsole, yellow(message)) - : doNothingLogger; - -export function makeLogger(options: Options, colors: Chalk): Logger { - const logger = makeLoggerFunc(options); - return { - log: makeExternalLogger(options, logger), - logInfo: makeLogInfo(options, logger, colors.green), - logWarning: makeLogWarning(options, logger, colors.yellow), - logError: makeLogError(options, logger, colors.red), - }; -} diff --git a/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.options.ts b/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.options.ts deleted file mode 100644 index 58c4b2319a6eef..00000000000000 --- a/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.options.ts +++ /dev/null @@ -1,81 +0,0 @@ -export type LogLevel = 'INFO' | 'WARN' | 'ERROR'; - -export interface Options { - readonly configFile: string; - readonly extensions: ReadonlyArray; - readonly baseUrl: string | undefined; - readonly silent: boolean; - readonly logLevel: LogLevel; - readonly logInfoToStdOut: boolean; - readonly context: string | undefined; - readonly colors: boolean; - readonly mainFields: string[]; -} - -type ValidOptions = keyof Options; -const validOptions: ReadonlyArray = [ - 'configFile', - 'extensions', - 'baseUrl', - 'silent', - 'logLevel', - 'logInfoToStdOut', - 'context', - 'mainFields', -]; - -/** - * Takes raw options from the webpack config, - * validates them and adds defaults for missing options - */ -export function getOptions(rawOptions: {}): Options { - validateOptions(rawOptions); - - const options = makeOptions(rawOptions); - - return options; -} - -/** - * Validate the supplied loader options. - * At present this validates the option names only; in future we may look at validating the values too - * @param rawOptions - */ -function validateOptions(rawOptions: {}): void { - const loaderOptionKeys = Object.keys(rawOptions); - for (let i = 0; i < loaderOptionKeys.length; i++) { - const option = loaderOptionKeys[i]; - const isUnexpectedOption = - (validOptions as ReadonlyArray).indexOf(option) === -1; - if (isUnexpectedOption) { - throw new Error(`tsconfig-paths-webpack-plugin was supplied with an unexpected loader option: ${option} -Please take a look at the options you are supplying; the following are valid options: -${validOptions.join(' / ')} -`); - } - } -} - -function makeOptions(rawOptions: Partial): Options { - const options: Options = { - ...({ - configFile: 'tsconfig.json', - extensions: ['.ts', '.tsx'], - baseUrl: undefined, - silent: false, - logLevel: 'WARN', - logInfoToStdOut: false, - context: undefined, - colors: true, - mainFields: ['main'], - } as Options), - ...rawOptions, - }; - - const options2: Options = { - ...options, - logLevel: options.logLevel.toUpperCase() as LogLevel, - }; - - return options2; -} diff --git a/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin.ts b/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin.ts deleted file mode 100644 index 1f36c73710c4f6..00000000000000 --- a/packages/node/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin.ts +++ /dev/null @@ -1,353 +0,0 @@ -// Adapted from https://github.com/dividab/tsconfig-paths-webpack-plugin -import * as chalk from 'chalk'; -import * as TsconfigPaths from 'tsconfig-paths'; -import * as path from 'path'; -import * as Options from './tsconfig-paths.options'; -import * as Logger from './tsconfig-paths.logger'; -import * as fs from 'fs'; -import { ResolveContext, ResolveRequest } from 'enhanced-resolve'; -type ResolvePluginInstance = any; -type Resolver = any; - -type FileSystem = Resolver['fileSystem']; -type TapAsyncCallback = ( - request: ResolveRequest, - context: ResolveContext, - callback: TapAsyncInnerCallback -) => void; -type TapAsyncInnerCallback = ( - error?: Error | null | false, - result?: null | ResolveRequest -) => void; - -export interface LegacyResolverPlugin { - readonly apply: (resolver: LegacyResolver) => void; -} - -export interface LegacyResolver { - readonly apply: (plugin: LegacyResolverPlugin) => void; - readonly plugin: (source: string, cb: ResolverCallbackLegacy) => void; - readonly doResolve: doResolveLegacy | doResolve; - readonly join: (relativePath: string, innerRequest: Request) => Request; - readonly fileSystem: LegacyResolverFileSystem; - readonly getHook: (hook: string) => Tapable; -} - -export type doResolveLegacy = ( - target: string, - req: Request, - desc: string, - callback: Callback -) => void; - -export type doResolve = ( - hook: Tapable, - req: Request, - message: string, - resolveContext: LegacyResolveContext, - callback: Callback -) => void; - -export type ReadJsonCallback = (error: Error | undefined, result?: {}) => void; - -export type ReadJson = (path2: string, callback: ReadJsonCallback) => void; - -export type LegacyResolverFileSystem = typeof fs & { readJson?: ReadJson }; - -export interface LegacyResolveContext { - log?: string; - stack?: string; - missing?: string; -} - -export interface Tapable { - readonly tapAsync: ( - options: TapableOptions, - callback: TapAsyncCallback - ) => void; -} - -export interface TapableOptions { - readonly name: string; -} - -export type ResolverCallbackLegacy = ( - request: Request, - callback: Callback -) => void; -export type ResolverCallback = ( - request: Request, - resolveContext: LegacyResolveContext, - callback: Callback -) => void; - -type CreateInnerCallback = ( - callback: Callback, - options: Callback, - message?: string, - messageOptional?: string -) => Callback; - -type CreateInnerContext = ( - options: { - log?: string; - stack?: string; - missing?: string; - }, - message?: string, - messageOptional?: string -) => ResolveContext; - -type getInnerRequest = ( - resolver: Resolver | LegacyResolver, - request: ResolveRequest | Request -) => string; - -export interface Request { - readonly request?: Request | string; - readonly relativePath: string; - readonly path: string; - readonly context: { - readonly issuer: string; - }; -} - -export interface Callback { - (err?: Error, result?: string): void; - - log?: string; - stack?: string; - missing?: string; -} - -const getInnerRequest: getInnerRequest = require('enhanced-resolve/lib/getInnerRequest'); - -export class TsconfigPathsPlugin implements ResolvePluginInstance { - source: string = 'described-resolve'; - target: string = 'resolve'; - - log: Logger.Logger; - baseUrl: string; - absoluteBaseUrl: string; - extensions: ReadonlyArray; - - matchPath: TsconfigPaths.MatchPathAsync; - - constructor(rawOptions: Partial = {}) { - const options = Options.getOptions(rawOptions); - - this.extensions = options.extensions; - - // const colors = new chalk.constructor({ enabled: options.colors }); - - this.log = Logger.makeLogger( - options, - new chalk.Instance({ level: options.colors ? undefined : 0 }) - ); - - const context = options.context || process.cwd(); - const loadFrom = options.configFile || context; - - const loadResult = TsconfigPaths.loadConfig(loadFrom); - if (loadResult.resultType === 'failed') { - this.log.logError(`Failed to load ${loadFrom}: ${loadResult.message}`); - } else { - this.log.logInfo( - `tsconfig-paths-webpack-plugin: Using config file at ${loadResult.configFileAbsolutePath}` - ); - this.baseUrl = options.baseUrl || loadResult.baseUrl; - this.absoluteBaseUrl = options.baseUrl - ? path.resolve(options.baseUrl) - : loadResult.absoluteBaseUrl; - this.matchPath = TsconfigPaths.createMatchPathAsync( - this.absoluteBaseUrl, - loadResult.paths, - options.mainFields - ); - } - } - - apply(resolver: Resolver): void { - if (!resolver) { - this.log.logWarning( - 'tsconfig-paths-webpack-plugin: Found no resolver, not applying tsconfig-paths-webpack-plugin' - ); - return; - } - - const { baseUrl } = this; - - if (!baseUrl) { - // Nothing to do if there is no baseUrl - this.log.logWarning( - 'tsconfig-paths-webpack-plugin: Found no baseUrl in tsconfig.json, not applying tsconfig-paths-webpack-plugin' - ); - return; - } - - // The file system only exists when the plugin is in the resolve context. This means it's also properly placed in the resolve.plugins array. - // If not, we should warn the user that this plugin should be placed in resolve.plugins and not the plugins array of the root config for example. - // This should hopefully prevent issues like: https://github.com/dividab/tsconfig-paths-webpack-plugin/issues/9 - if (!('fileSystem' in resolver)) { - this.log.logWarning( - 'tsconfig-paths-webpack-plugin: No file system found on resolver.' + - " Please make sure you've placed the plugin in the correct part of the configuration." + - ' This plugin is a resolver plugin and should be placed in the resolve part of the Webpack configuration.' - ); - return; - } - - resolver.getHook(this.source).tapAsync( - { name: 'TsconfigPathsPlugin' }, - // @ts-ignore - createPluginCallback( - this.matchPath, - resolver, - this.absoluteBaseUrl, - // @ts-ignore - resolver.getHook(this.target), - this.extensions - ) - ); - } -} - -function createPluginCallback( - matchPath: TsconfigPaths.MatchPathAsync, - resolver: Resolver, - absoluteBaseUrl: string, - hook: Tapable, - extensions: ReadonlyArray -): TapAsyncCallback { - const fileExistAsync = createFileExistAsync(resolver.fileSystem); - const readJsonAsync = createReadJsonAsync(resolver.fileSystem); - return ( - request: ResolveRequest, - resolveContext: ResolveContext, - callback: TapAsyncInnerCallback - ) => { - const innerRequest = getInnerRequest(resolver, request); - - // innerRequest never starts with '.' in new enhanced-resolve - if ( - !innerRequest || - request?.request?.startsWith('.') || - request?.request?.startsWith('..') - ) { - return callback(); - } - - matchPath( - innerRequest, - readJsonAsync, - fileExistAsync, - extensions, - (err, foundMatch) => { - if (err) { - return callback(err); - } - - if (!foundMatch) { - return callback(); - } - - const newRequest = { - ...request, - request: foundMatch, - path: absoluteBaseUrl, - }; - - // Only at this point we are sure we are dealing with the latest Webpack version (>= 4.0.0) - // So only now can we require the createInnerContext function. - // (It doesn't exist in legacy versions) - const createInnerContext: CreateInnerContext = require('enhanced-resolve/lib/createInnerContext'); - - return resolver.doResolve( - hook, - newRequest as never, - `Resolved request '${innerRequest}' to '${foundMatch}' using tsconfig.json paths mapping`, - // tslint:disable-next-line:no-any - createInnerContext({ ...(resolveContext as any) }), - (err2: Error, result2: ResolveRequest): void => { - // Pattern taken from: - // https://github.com/webpack/enhanced-resolve/blob/42ff594140582c3f8f86811f95dea7bf6774a1c8/lib/AliasPlugin.js#L44 - if (err2) { - return callback(err2); - } - - // Don't allow other aliasing or raw request - if (result2 === undefined) { - return callback(undefined, undefined); - } - - // tslint:disable-next-line:no-any - callback(undefined, result2); - } - ); - } - ); - }; -} - -function readJson( - fileSystem: FileSystem, - path2: string, - callback: ReadJsonCallback -): void { - if ('readJson' in fileSystem && fileSystem.readJson) { - return fileSystem.readJson(path2, callback); - } - - fileSystem.readFile(path2, (err, buf) => { - if (err) { - return callback(err); - } - - let data; - - try { - // @ts-ignore This will crash if buf is undefined, which I guess it can be... - data = JSON.parse(buf.toString('utf-8')); - } catch (e) { - return callback(e); - } - - return callback(undefined, data); - }); -} - -function createReadJsonAsync( - filesystem: FileSystem -): TsconfigPaths.ReadJsonAsync { - // tslint:disable-next-line:no-any - return (path2: string, callback2: (err?: Error, content?: any) => void) => { - readJson(filesystem, path2, (err, json) => { - // If error assume file does not exist - if (err || !json) { - callback2(); - return; - } - callback2(undefined, json); - }); - }; -} - -function createFileExistAsync( - filesystem: FileSystem -): TsconfigPaths.FileExistsAsync { - return ( - path2: string, - callback2: (err?: Error, exists?: boolean) => void - ) => { - filesystem.stat(path2, (err: Error, stats: fs.Stats) => { - // If error assume file does not exist - if (err) { - callback2(undefined, false); - return; - } - callback2(undefined, stats ? stats.isFile() : false); - }); - }; -} - -export default TsconfigPathsPlugin; diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 9fd29930fade87..790cf70f107f27 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -35,7 +35,7 @@ "fs-extra": "^9.1.0", "ignore": "^5.0.4", "metro-resolver": "^0.66.2", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.7", "tsconfig-paths": "^3.9.0" }, "peerDependencies": { diff --git a/packages/react-native/src/utils/find-all-npm-dependencies.spec.ts b/packages/react-native/src/utils/find-all-npm-dependencies.spec.ts index d2e565713e4b19..440a43d405a84b 100644 --- a/packages/react-native/src/utils/find-all-npm-dependencies.spec.ts +++ b/packages/react-native/src/utils/find-all-npm-dependencies.spec.ts @@ -1,5 +1,5 @@ import { findAllNpmDependencies } from './find-all-npm-dependencies'; -import { DependencyType, ProjectGraph } from '@nrwl/devkit'; +import { ProjectGraph } from '@nrwl/devkit'; test('findAllNpmDependencies', () => { const graph: ProjectGraph = { @@ -61,34 +61,26 @@ test('findAllNpmDependencies', () => { }, dependencies: { myapp: [ - { type: DependencyType.static, source: 'myapp', target: 'lib1' }, - { type: DependencyType.static, source: 'myapp', target: 'lib2' }, + { type: 'static', source: 'myapp', target: 'lib1' }, + { type: 'static', source: 'myapp', target: 'lib2' }, { - type: DependencyType.static, + type: 'static', source: 'myapp', target: 'npm:react-native-image-picker', }, { - type: DependencyType.static, + type: 'static', source: 'myapp', target: 'npm:@nrwl/react-native', }, ], lib1: [ - { type: DependencyType.static, source: 'lib1', target: 'lib2' }, - { - type: DependencyType.static, - source: 'lib3', - target: 'npm:react-native-snackbar', - }, + { type: 'static', source: 'lib1', target: 'lib2' }, + { type: 'static', source: 'lib3', target: 'npm:react-native-snackbar' }, ], - lib2: [{ type: DependencyType.static, source: 'lib2', target: 'lib3' }], + lib2: [{ type: 'static', source: 'lib2', target: 'lib3' }], lib3: [ - { - type: DependencyType.static, - source: 'lib3', - target: 'npm:react-native-dialog', - }, + { type: 'static', source: 'lib3', target: 'npm:react-native-dialog' }, ], }, }; diff --git a/packages/react/migrations.json b/packages/react/migrations.json index f7e1395e2fc0b6..bfacfa5938baa1 100644 --- a/packages/react/migrations.json +++ b/packages/react/migrations.json @@ -597,6 +597,15 @@ "alwaysAddToPackageJson": false } } + }, + "13.7.0": { + "version": "13.7.0-beta.9", + "packages": { + "eslint-plugin-react-hooks": { + "version": "4.3.0", + "alwaysAddToPackageJson": false + } + } } } } diff --git a/packages/react/package.json b/packages/react/package.json index 1f1b218b72c712..0b7460e98c2d07 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -45,7 +45,7 @@ "eslint-plugin-import": "^2.25.2", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.27.0", - "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-react-hooks": "^4.3.0", "react-refresh": "^0.10.0", "url-loader": "^4.1.1", "webpack": "^5.58.1", diff --git a/packages/react/plugins/webpack.ts b/packages/react/plugins/webpack.ts index 8e1dbaa143160d..ed06aa96a7fd92 100644 --- a/packages/react/plugins/webpack.ts +++ b/packages/react/plugins/webpack.ts @@ -15,9 +15,9 @@ function getWebpackConfig(config: Configuration) { { test: /\.svg$/, oneOf: [ - // If coming from JS/TS file, then transform into React component using SVGR. + // If coming from JS/TS or MDX file, then transform into React component using SVGR. { - issuer: /\.[jt]sx?$/, + issuer: /\.(js|ts|md)x?$/, use: [ { loader: require.resolve('@svgr/webpack'), diff --git a/packages/react/src/utils/versions.ts b/packages/react/src/utils/versions.ts index f5c6c5555d4bca..f4f2786c34b217 100755 --- a/packages/react/src/utils/versions.ts +++ b/packages/react/src/utils/versions.ts @@ -29,6 +29,6 @@ export const reactTestRendererVersion = '17.0.2'; export const eslintPluginImportVersion = '2.25.2'; export const eslintPluginJsxA11yVersion = '6.5.1'; export const eslintPluginReactVersion = '7.27.0'; -export const eslintPluginReactHooksVersion = '4.2.0'; +export const eslintPluginReactHooksVersion = '4.3.0'; export const babelPluginStyledComponentsVersion = '1.10.7'; diff --git a/packages/storybook/package.json b/packages/storybook/package.json index ad54a1b19d72c9..316e130311ed2b 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -36,6 +36,6 @@ "core-js": "^3.6.5", "semver": "7.3.4", "ts-loader": "^9.2.6", - "tsconfig-paths-webpack-plugin": "3.4.1" + "tsconfig-paths-webpack-plugin": "3.5.2" } } diff --git a/packages/tao/src/shared/nx.ts b/packages/tao/src/shared/nx.ts index 4ee5be5ecd76e8..fe4c3aeeeea101 100644 --- a/packages/tao/src/shared/nx.ts +++ b/packages/tao/src/shared/nx.ts @@ -20,6 +20,10 @@ export interface NxAffectedConfig { * Nx.json configuration */ export interface NxJsonConfiguration { + /** + * Optional (additional) Nx.json configuration file which becomes a base for this one + */ + extends?: string; /** * Map of files to projects that implicitly depend on them */ diff --git a/packages/tao/src/shared/params.spec.ts b/packages/tao/src/shared/params.spec.ts index 5ff25a197b75ac..91f7d2e4afedfb 100644 --- a/packages/tao/src/shared/params.spec.ts +++ b/packages/tao/src/shared/params.spec.ts @@ -803,6 +803,29 @@ describe('params', () => { ).not.toThrow(); }); + describe('array', () => { + it('should handle validating patterns', () => { + const schema = { + properties: { + a: { + type: ['string', 'boolean'], + }, + }, + }; + expect(() => + validateOptsAgainstSchema({ a: 'abc' }, schema) + ).not.toThrow(); + expect(() => + validateOptsAgainstSchema({ a: true }, schema) + ).not.toThrow(); + expect(() => + validateOptsAgainstSchema({ a: 123 }, schema) + ).toThrowErrorMatchingInlineSnapshot( + `"Property 'a' does not match the schema. '123' should be a 'string,boolean'."` + ); + }); + }); + describe('string', () => { it('should handle validating patterns', () => { const schema = { diff --git a/packages/tao/src/shared/params.ts b/packages/tao/src/shared/params.ts index eec9ffd13c3f27..e7267c98d30c4e 100644 --- a/packages/tao/src/shared/params.ts +++ b/packages/tao/src/shared/params.ts @@ -4,7 +4,7 @@ import { logger } from './logger'; import { NxJsonConfiguration } from './nx'; type PropertyDescription = { - type?: string; + type?: string | string[]; required?: string[]; enum?: string[]; properties?: any; @@ -128,6 +128,14 @@ function coerceType(prop: PropertyDescription | undefined, value: any) { } } return value; + } else if (Array.isArray(prop.type)) { + for (let i = 0; i < prop.type.length; ++i) { + const coerced = coerceType({ type: prop.type[i] }, value); + if (coerced !== value) { + return coerced; + } + } + return value; } else if ( normalizedPrimitiveType(prop.type) == 'boolean' && isConvertibleToBoolean(value) @@ -287,7 +295,25 @@ function validateProperty( const isPrimitive = typeof value !== 'object'; if (isPrimitive) { - if (schema.type && typeof value !== normalizedPrimitiveType(schema.type)) { + if (Array.isArray(schema.type)) { + const passes = schema.type.some((t) => { + try { + const rule = { type: t }; + validateProperty(propName, value, rule, definitions); + return true; + } catch (e) { + return false; + } + }); + if (!passes) { + throw new SchemaError( + `Property '${propName}' does not match the schema. '${value}' should be a '${schema.type}'.` + ); + } + } else if ( + schema.type && + typeof value !== normalizedPrimitiveType(schema.type) + ) { throw new SchemaError( `Property '${propName}' does not match the schema. '${value}' should be a '${schema.type}'.` ); diff --git a/packages/tao/src/shared/project-graph.ts b/packages/tao/src/shared/project-graph.ts index 4a8ae5c3f0f28f..ebc03b7e1e76f4 100644 --- a/packages/tao/src/shared/project-graph.ts +++ b/packages/tao/src/shared/project-graph.ts @@ -11,19 +11,7 @@ export interface FileData { hash: string; /** @deprecated this field will be removed in v13. Use {@link path.extname} to parse extension */ ext?: string; - deps?: FileDependency[]; -} - -export interface FileDependency { - projectName: string; - dependencyType: DependencyType; -} - -export interface ProjectGraphBuilderExplicitDependency { - sourceProjectName: string; - targetProjectName: string; - sourceProjectFile: string; - dependencyType: DependencyType; + deps?: string[]; } /** @@ -61,10 +49,6 @@ export enum DependencyType { * Implicit dependencies are inferred */ implicit = 'implicit', - /** - * Type-only dependencies are those of the form `import type ...` - */ - typeOnly = 'typeOnly', } /** @@ -124,7 +108,7 @@ export interface ProjectGraphExternalNode { * A dependency between two projects */ export interface ProjectGraphDependency { - type: DependencyType; + type: DependencyType | string; /** * The project being imported by the other */ diff --git a/packages/tao/src/shared/workspace.spec.ts b/packages/tao/src/shared/workspace.spec.ts index 6068cc11004b56..6e4d0cc86e87b0 100644 --- a/packages/tao/src/shared/workspace.spec.ts +++ b/packages/tao/src/shared/workspace.spec.ts @@ -1,12 +1,9 @@ -import { - buildWorkspaceConfigurationFromGlobs, - inlineProjectConfigurations, - toProjectName, -} from './workspace'; -import { readJsonFile } from '../utils/fileutils'; +import { toProjectName, Workspaces } from './workspace'; import { NxJsonConfiguration } from './nx'; +import { vol } from 'memfs'; + +jest.mock('fs', () => require('memfs').fs); -jest.mock('../utils/fileutils'); jest.mock('fast-glob', () => ({ sync: () => [ 'libs/lib1/package.json', @@ -28,72 +25,61 @@ const packageLibConfig = (root) => ({ sourceRoot: root, }); -describe('workspace', () => { - it('should be able to inline project configurations', () => { - const standaloneConfig = libConfig('lib1'); +describe('Workspaces', () => { + afterEach(() => { + vol.reset(); + }); - (readJsonFile as jest.Mock).mockImplementation((path: string) => { - if (path.endsWith('libs/lib1/project.json')) { - return standaloneConfig; - } - throw `${path} not in mock!`; - }); + describe('readWorkspaceConfiguration', () => { + it('should be able to inline project configurations', () => { + const standaloneConfig = libConfig('lib1'); - const inlineConfig = { - version: 1, - projects: { - lib1: 'libs/lib1', - lib2: libConfig('lib2'), - }, - }; + const config = { + version: 2, + projects: { + lib1: 'libs/lib1', + lib2: libConfig('lib2'), + }, + }; + vol.fromJSON( + { + 'libs/lib1/project.json': JSON.stringify(standaloneConfig), + 'workspace.json': JSON.stringify(config), + }, + '/root' + ); - const resolved = inlineProjectConfigurations(inlineConfig); - expect(resolved).toEqual({ - ...inlineConfig, - projects: { - ...inlineConfig.projects, - lib1: { ...standaloneConfig }, - }, + const workspaces = new Workspaces('/root'); + const resolved = workspaces.readWorkspaceConfiguration(); + expect(resolved.projects.lib1).toEqual(standaloneConfig); }); - }); - it('should build project configurations from glob', () => { - const lib1Config = libConfig('lib1'); - const lib2Config = packageLibConfig('libs/lib2'); - const domainPackageConfig = packageLibConfig('libs/domain/lib3'); - const domainLibConfig = libConfig('domain/lib4'); + it('should build project configurations from glob', () => { + const lib1Config = libConfig('lib1'); + const lib2Config = packageLibConfig('libs/lib2'); + const domainPackageConfig = packageLibConfig('libs/domain/lib3'); + const domainLibConfig = libConfig('domain/lib4'); - (readJsonFile as jest.Mock).mockImplementation((path: string) => { - if (path.endsWith('libs/lib1/project.json')) { - return lib1Config; - } - if (path.endsWith('libs/lib1/package.json')) { - return { name: 'some-other-name' }; - } - if (path.endsWith('libs/lib2/package.json')) { - return { name: 'lib2' }; - } - if (path.endsWith('libs/domain/lib3/package.json')) { - return { name: 'domain-lib3' }; - } - if (path.endsWith('libs/domain/lib4/project.json')) { - return domainLibConfig; - } - if (path.endsWith('libs/domain/lib4/package.json')) { - return {}; - } - throw `${path} not in mock!`; - }); + vol.fromJSON( + { + 'libs/lib1/project.json': JSON.stringify(lib1Config), + 'libs/lib1/package.json': JSON.stringify({ name: 'some-other-name' }), + 'libs/lib2/package.json': JSON.stringify({ name: 'lib2' }), + 'libs/domain/lib3/package.json': JSON.stringify({ + name: 'domain-lib3', + }), + 'libs/domain/lib4/project.json': JSON.stringify(domainLibConfig), + 'libs/domain/lib4/package.json': JSON.stringify({}), + }, + '/root' + ); - const resolved = buildWorkspaceConfigurationFromGlobs({ npmScope: '' }); - expect(resolved).toEqual({ - version: 2, - projects: { - lib1: lib1Config, - lib2: lib2Config, - 'domain-lib3': domainPackageConfig, - 'domain-lib4': domainLibConfig, - }, + const workspaces = new Workspaces('/root'); + const { projects } = workspaces.readWorkspaceConfiguration(); + expect(projects.lib1).toEqual(lib1Config); + expect(projects.lib2).toEqual(lib2Config); + expect(projects['domain-lib3']).toEqual(domainPackageConfig); + expect(projects['domain-lib4']).toEqual(domainLibConfig); }); }); diff --git a/packages/tao/src/shared/workspace.ts b/packages/tao/src/shared/workspace.ts index f270f87f5e51a9..2db0eb7527c688 100644 --- a/packages/tao/src/shared/workspace.ts +++ b/packages/tao/src/shared/workspace.ts @@ -7,7 +7,7 @@ import { TaskGraph } from './tasks'; import { logger } from './logger'; import { sync as globSync } from 'fast-glob'; import ignore, { Ignore } from 'ignore'; -import { basename, dirname, join, toNamespacedPath } from 'path'; +import { basename, dirname, join } from 'path'; import { performance } from 'perf_hooks'; import { loadNxPlugins } from './nx-plugin'; @@ -290,9 +290,7 @@ export class Workspaces { readWorkspaceConfiguration(): WorkspaceJsonConfiguration & NxJsonConfiguration { const nxJsonPath = path.join(this.root, 'nx.json'); - const nxJson = existsSync(nxJsonPath) - ? readJsonFile(nxJsonPath) - : ({} as NxJsonConfiguration); + const nxJson = readNxJson(nxJsonPath); const workspaceFile = workspaceConfigName(this.root); const workspacePath = workspaceFile ? path.join(this.root, workspaceFile) @@ -614,10 +612,7 @@ export function resolveNewFormatWithInlineProjects( return toNewFormat(inlineProjectConfigurations(w, root)); } -export function inlineProjectConfigurations( - w: any, - root: string = appRootPath -) { +function inlineProjectConfigurations(w: any, root: string = appRootPath) { Object.entries(w.projects || {}).forEach( ([project, config]: [string, any]) => { if (typeof config === 'string') { @@ -630,6 +625,26 @@ export function inlineProjectConfigurations( return w; } +/** + * Reads an nx.json file from a given path or extends a local nx.json config. + */ +function readNxJson(nxJson: string): NxJsonConfiguration { + let nxJsonConfig: NxJsonConfiguration; + if (existsSync(nxJson)) { + nxJsonConfig = readJsonFile(nxJson); + } else { + nxJsonConfig = {} as NxJsonConfiguration; + } + if (nxJsonConfig.extends) { + const extendedNxJsonPath = require.resolve(nxJsonConfig.extends, { + paths: [dirname(nxJson)], + }); + const baseNxJson = readJsonFile(extendedNxJsonPath); + nxJsonConfig = { ...baseNxJson, ...nxJsonConfig }; + } + return nxJsonConfig; +} + /** * Pulled from toFileName in names from @nrwl/devkit. * Todo: Should refactor, not duplicate. diff --git a/packages/web/executors.json b/packages/web/executors.json index 779c33bb7e41db..509dc6d3c5d4fd 100644 --- a/packages/web/executors.json +++ b/packages/web/executors.json @@ -6,7 +6,7 @@ "description": "Build an application using webpack" }, "rollup": { - "implementation": "./src/executors/rollup/rollup.impl", + "implementation": "./src/executors/rollup/compat", "schema": "./src/executors/rollup/schema.json", "description": "Package a library using rollup" }, diff --git a/packages/web/package.json b/packages/web/package.json index 4410a98b8cccb8..84050fdf858b62 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -72,13 +72,12 @@ "identity-obj-proxy": "3.0.0", "less": "3.12.2", "less-loader": "^10.1.0", - "license-webpack-plugin": "2.3.15", + "license-webpack-plugin": "4.0.0", "loader-utils": "1.2.3", "mini-css-extract-plugin": "~2.4.7", "parse5": "4.0.0", "parse5-html-rewriting-stream": "6.0.1", - "open": "^7.4.2", - "postcss": "8.3.0", + "postcss": "^8.2.13", "postcss-import": "14.0.2", "postcss-loader": "^6.1.1", "raw-loader": "^4.0.2", @@ -98,12 +97,11 @@ "style-loader": "^3.3.0", "stylus": "^0.55.0", "stylus-loader": "^6.2.0", - "terser": "4.3.8", - "terser-webpack-plugin": "^5.1.1", + "terser-webpack-plugin": "^5.3.0", "ts-loader": "^9.2.6", "ts-node": "~9.1.1", "tsconfig-paths": "^3.9.0", - "tsconfig-paths-webpack-plugin": "3.4.1", + "tsconfig-paths-webpack-plugin": "3.5.2", "tslib": "^2.3.0", "webpack": "^5.58.1", "webpack-merge": "^5.8.0", diff --git a/packages/web/src/utils/config.ts b/packages/web/src/utils/config.ts index 40c7b980a1db97..cd3b65535e1f1f 100644 --- a/packages/web/src/utils/config.ts +++ b/packages/web/src/utils/config.ts @@ -3,14 +3,10 @@ import * as webpack from 'webpack'; import { Configuration, WebpackPluginInstance } from 'webpack'; import { LicenseWebpackPlugin } from 'license-webpack-plugin'; import * as CopyWebpackPlugin from 'copy-webpack-plugin'; -import * as TerserWebpackPlugin from 'terser-webpack-plugin'; +import TerserPlugin = require('terser-webpack-plugin'); import { AssetGlobPattern, BuildBuilderOptions } from './shared-models'; import { getOutputHashFormat } from './hash-format'; - -// Inlining tsconfig-paths-webpack-plugin with a patch -// See: https://github.com/dividab/tsconfig-paths-webpack-plugin/pull/85 -// TODO(jack): Remove once the patch lands in original package -import { TsconfigPathsPlugin } from './webpack/plugins/tsconfig-paths/tsconfig-paths.plugin'; +import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; import ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const IGNORED_WEBPACK_WARNINGS = [ @@ -113,13 +109,11 @@ export function getBaseWebpackPartial( extensions, alias: getAliases(options), plugins: [ - // TODO Remove the never type when module is updated - // PR opened for the proper typing here; https://github.com/dividab/tsconfig-paths-webpack-plugin/pull/66 new TsconfigPathsPlugin({ configFile: options.tsConfig, extensions, mainFields, - }), + }) as never, // TODO: Remove never type when 'tsconfig-paths-webpack-plugin' types fixed ], mainFields, }, @@ -147,10 +141,10 @@ export function getBaseWebpackPartial( webpackConfig.optimization = { sideEffects: false, minimizer: [ - new TerserWebpackPlugin({ + new TerserPlugin({ parallel: true, terserOptions: { - ecma: esm ? 2016 : 5, + ecma: (esm ? 2016 : 5) as TerserPlugin.TerserECMA, safari10: true, output: { ascii_only: true, diff --git a/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.logger.ts b/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.logger.ts deleted file mode 100644 index 55d7d242579583..00000000000000 --- a/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.logger.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Console } from 'console'; -import { Chalk } from 'chalk'; -import { Options } from './tsconfig-paths.options'; - -// tslint:disable-next-line:no-any -type InternalLoggerFunc = (whereToLog: any, message: string) => void; - -export type LoggerFunc = (message: string) => void; - -export interface Logger { - log: LoggerFunc; - logInfo: LoggerFunc; - logWarning: LoggerFunc; - logError: LoggerFunc; -} - -enum LogLevel { - INFO = 1, - WARN = 2, - ERROR = 3, -} - -const stderrConsole = new Console(process.stderr); -const stdoutConsole = new Console(process.stdout); - -const doNothingLogger = (_message: string) => { - /* Do nothing */ -}; - -const makeLoggerFunc = (options: Options): InternalLoggerFunc => - options.silent - ? (_whereToLog: Console, _message: string) => { - /* Do nothing */ - } - : (whereToLog: Console, message: string) => whereToLog.log(message); - -const makeExternalLogger = - (loaderOptions: Options, logger: InternalLoggerFunc) => (message: string) => - logger( - loaderOptions.logInfoToStdOut ? stdoutConsole : stderrConsole, - message - ); - -const makeLogInfo = ( - options: Options, - logger: InternalLoggerFunc, - green: Chalk -) => - LogLevel[options.logLevel] <= LogLevel.INFO - ? (message: string) => - logger( - options.logInfoToStdOut ? stdoutConsole : stderrConsole, - green(message) - ) - : doNothingLogger; - -const makeLogError = ( - options: Options, - logger: InternalLoggerFunc, - red: Chalk -) => - LogLevel[options.logLevel] <= LogLevel.ERROR - ? (message: string) => logger(stderrConsole, red(message)) - : doNothingLogger; - -const makeLogWarning = ( - options: Options, - logger: InternalLoggerFunc, - yellow: Chalk -) => - LogLevel[options.logLevel] <= LogLevel.WARN - ? (message: string) => logger(stderrConsole, yellow(message)) - : doNothingLogger; - -export function makeLogger(options: Options, colors: Chalk): Logger { - const logger = makeLoggerFunc(options); - return { - log: makeExternalLogger(options, logger), - logInfo: makeLogInfo(options, logger, colors.green), - logWarning: makeLogWarning(options, logger, colors.yellow), - logError: makeLogError(options, logger, colors.red), - }; -} diff --git a/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.options.ts b/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.options.ts deleted file mode 100644 index 58c4b2319a6eef..00000000000000 --- a/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.options.ts +++ /dev/null @@ -1,81 +0,0 @@ -export type LogLevel = 'INFO' | 'WARN' | 'ERROR'; - -export interface Options { - readonly configFile: string; - readonly extensions: ReadonlyArray; - readonly baseUrl: string | undefined; - readonly silent: boolean; - readonly logLevel: LogLevel; - readonly logInfoToStdOut: boolean; - readonly context: string | undefined; - readonly colors: boolean; - readonly mainFields: string[]; -} - -type ValidOptions = keyof Options; -const validOptions: ReadonlyArray = [ - 'configFile', - 'extensions', - 'baseUrl', - 'silent', - 'logLevel', - 'logInfoToStdOut', - 'context', - 'mainFields', -]; - -/** - * Takes raw options from the webpack config, - * validates them and adds defaults for missing options - */ -export function getOptions(rawOptions: {}): Options { - validateOptions(rawOptions); - - const options = makeOptions(rawOptions); - - return options; -} - -/** - * Validate the supplied loader options. - * At present this validates the option names only; in future we may look at validating the values too - * @param rawOptions - */ -function validateOptions(rawOptions: {}): void { - const loaderOptionKeys = Object.keys(rawOptions); - for (let i = 0; i < loaderOptionKeys.length; i++) { - const option = loaderOptionKeys[i]; - const isUnexpectedOption = - (validOptions as ReadonlyArray).indexOf(option) === -1; - if (isUnexpectedOption) { - throw new Error(`tsconfig-paths-webpack-plugin was supplied with an unexpected loader option: ${option} -Please take a look at the options you are supplying; the following are valid options: -${validOptions.join(' / ')} -`); - } - } -} - -function makeOptions(rawOptions: Partial): Options { - const options: Options = { - ...({ - configFile: 'tsconfig.json', - extensions: ['.ts', '.tsx'], - baseUrl: undefined, - silent: false, - logLevel: 'WARN', - logInfoToStdOut: false, - context: undefined, - colors: true, - mainFields: ['main'], - } as Options), - ...rawOptions, - }; - - const options2: Options = { - ...options, - logLevel: options.logLevel.toUpperCase() as LogLevel, - }; - - return options2; -} diff --git a/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin.ts b/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin.ts deleted file mode 100644 index 1f36c73710c4f6..00000000000000 --- a/packages/web/src/utils/webpack/plugins/tsconfig-paths/tsconfig-paths.plugin.ts +++ /dev/null @@ -1,353 +0,0 @@ -// Adapted from https://github.com/dividab/tsconfig-paths-webpack-plugin -import * as chalk from 'chalk'; -import * as TsconfigPaths from 'tsconfig-paths'; -import * as path from 'path'; -import * as Options from './tsconfig-paths.options'; -import * as Logger from './tsconfig-paths.logger'; -import * as fs from 'fs'; -import { ResolveContext, ResolveRequest } from 'enhanced-resolve'; -type ResolvePluginInstance = any; -type Resolver = any; - -type FileSystem = Resolver['fileSystem']; -type TapAsyncCallback = ( - request: ResolveRequest, - context: ResolveContext, - callback: TapAsyncInnerCallback -) => void; -type TapAsyncInnerCallback = ( - error?: Error | null | false, - result?: null | ResolveRequest -) => void; - -export interface LegacyResolverPlugin { - readonly apply: (resolver: LegacyResolver) => void; -} - -export interface LegacyResolver { - readonly apply: (plugin: LegacyResolverPlugin) => void; - readonly plugin: (source: string, cb: ResolverCallbackLegacy) => void; - readonly doResolve: doResolveLegacy | doResolve; - readonly join: (relativePath: string, innerRequest: Request) => Request; - readonly fileSystem: LegacyResolverFileSystem; - readonly getHook: (hook: string) => Tapable; -} - -export type doResolveLegacy = ( - target: string, - req: Request, - desc: string, - callback: Callback -) => void; - -export type doResolve = ( - hook: Tapable, - req: Request, - message: string, - resolveContext: LegacyResolveContext, - callback: Callback -) => void; - -export type ReadJsonCallback = (error: Error | undefined, result?: {}) => void; - -export type ReadJson = (path2: string, callback: ReadJsonCallback) => void; - -export type LegacyResolverFileSystem = typeof fs & { readJson?: ReadJson }; - -export interface LegacyResolveContext { - log?: string; - stack?: string; - missing?: string; -} - -export interface Tapable { - readonly tapAsync: ( - options: TapableOptions, - callback: TapAsyncCallback - ) => void; -} - -export interface TapableOptions { - readonly name: string; -} - -export type ResolverCallbackLegacy = ( - request: Request, - callback: Callback -) => void; -export type ResolverCallback = ( - request: Request, - resolveContext: LegacyResolveContext, - callback: Callback -) => void; - -type CreateInnerCallback = ( - callback: Callback, - options: Callback, - message?: string, - messageOptional?: string -) => Callback; - -type CreateInnerContext = ( - options: { - log?: string; - stack?: string; - missing?: string; - }, - message?: string, - messageOptional?: string -) => ResolveContext; - -type getInnerRequest = ( - resolver: Resolver | LegacyResolver, - request: ResolveRequest | Request -) => string; - -export interface Request { - readonly request?: Request | string; - readonly relativePath: string; - readonly path: string; - readonly context: { - readonly issuer: string; - }; -} - -export interface Callback { - (err?: Error, result?: string): void; - - log?: string; - stack?: string; - missing?: string; -} - -const getInnerRequest: getInnerRequest = require('enhanced-resolve/lib/getInnerRequest'); - -export class TsconfigPathsPlugin implements ResolvePluginInstance { - source: string = 'described-resolve'; - target: string = 'resolve'; - - log: Logger.Logger; - baseUrl: string; - absoluteBaseUrl: string; - extensions: ReadonlyArray; - - matchPath: TsconfigPaths.MatchPathAsync; - - constructor(rawOptions: Partial = {}) { - const options = Options.getOptions(rawOptions); - - this.extensions = options.extensions; - - // const colors = new chalk.constructor({ enabled: options.colors }); - - this.log = Logger.makeLogger( - options, - new chalk.Instance({ level: options.colors ? undefined : 0 }) - ); - - const context = options.context || process.cwd(); - const loadFrom = options.configFile || context; - - const loadResult = TsconfigPaths.loadConfig(loadFrom); - if (loadResult.resultType === 'failed') { - this.log.logError(`Failed to load ${loadFrom}: ${loadResult.message}`); - } else { - this.log.logInfo( - `tsconfig-paths-webpack-plugin: Using config file at ${loadResult.configFileAbsolutePath}` - ); - this.baseUrl = options.baseUrl || loadResult.baseUrl; - this.absoluteBaseUrl = options.baseUrl - ? path.resolve(options.baseUrl) - : loadResult.absoluteBaseUrl; - this.matchPath = TsconfigPaths.createMatchPathAsync( - this.absoluteBaseUrl, - loadResult.paths, - options.mainFields - ); - } - } - - apply(resolver: Resolver): void { - if (!resolver) { - this.log.logWarning( - 'tsconfig-paths-webpack-plugin: Found no resolver, not applying tsconfig-paths-webpack-plugin' - ); - return; - } - - const { baseUrl } = this; - - if (!baseUrl) { - // Nothing to do if there is no baseUrl - this.log.logWarning( - 'tsconfig-paths-webpack-plugin: Found no baseUrl in tsconfig.json, not applying tsconfig-paths-webpack-plugin' - ); - return; - } - - // The file system only exists when the plugin is in the resolve context. This means it's also properly placed in the resolve.plugins array. - // If not, we should warn the user that this plugin should be placed in resolve.plugins and not the plugins array of the root config for example. - // This should hopefully prevent issues like: https://github.com/dividab/tsconfig-paths-webpack-plugin/issues/9 - if (!('fileSystem' in resolver)) { - this.log.logWarning( - 'tsconfig-paths-webpack-plugin: No file system found on resolver.' + - " Please make sure you've placed the plugin in the correct part of the configuration." + - ' This plugin is a resolver plugin and should be placed in the resolve part of the Webpack configuration.' - ); - return; - } - - resolver.getHook(this.source).tapAsync( - { name: 'TsconfigPathsPlugin' }, - // @ts-ignore - createPluginCallback( - this.matchPath, - resolver, - this.absoluteBaseUrl, - // @ts-ignore - resolver.getHook(this.target), - this.extensions - ) - ); - } -} - -function createPluginCallback( - matchPath: TsconfigPaths.MatchPathAsync, - resolver: Resolver, - absoluteBaseUrl: string, - hook: Tapable, - extensions: ReadonlyArray -): TapAsyncCallback { - const fileExistAsync = createFileExistAsync(resolver.fileSystem); - const readJsonAsync = createReadJsonAsync(resolver.fileSystem); - return ( - request: ResolveRequest, - resolveContext: ResolveContext, - callback: TapAsyncInnerCallback - ) => { - const innerRequest = getInnerRequest(resolver, request); - - // innerRequest never starts with '.' in new enhanced-resolve - if ( - !innerRequest || - request?.request?.startsWith('.') || - request?.request?.startsWith('..') - ) { - return callback(); - } - - matchPath( - innerRequest, - readJsonAsync, - fileExistAsync, - extensions, - (err, foundMatch) => { - if (err) { - return callback(err); - } - - if (!foundMatch) { - return callback(); - } - - const newRequest = { - ...request, - request: foundMatch, - path: absoluteBaseUrl, - }; - - // Only at this point we are sure we are dealing with the latest Webpack version (>= 4.0.0) - // So only now can we require the createInnerContext function. - // (It doesn't exist in legacy versions) - const createInnerContext: CreateInnerContext = require('enhanced-resolve/lib/createInnerContext'); - - return resolver.doResolve( - hook, - newRequest as never, - `Resolved request '${innerRequest}' to '${foundMatch}' using tsconfig.json paths mapping`, - // tslint:disable-next-line:no-any - createInnerContext({ ...(resolveContext as any) }), - (err2: Error, result2: ResolveRequest): void => { - // Pattern taken from: - // https://github.com/webpack/enhanced-resolve/blob/42ff594140582c3f8f86811f95dea7bf6774a1c8/lib/AliasPlugin.js#L44 - if (err2) { - return callback(err2); - } - - // Don't allow other aliasing or raw request - if (result2 === undefined) { - return callback(undefined, undefined); - } - - // tslint:disable-next-line:no-any - callback(undefined, result2); - } - ); - } - ); - }; -} - -function readJson( - fileSystem: FileSystem, - path2: string, - callback: ReadJsonCallback -): void { - if ('readJson' in fileSystem && fileSystem.readJson) { - return fileSystem.readJson(path2, callback); - } - - fileSystem.readFile(path2, (err, buf) => { - if (err) { - return callback(err); - } - - let data; - - try { - // @ts-ignore This will crash if buf is undefined, which I guess it can be... - data = JSON.parse(buf.toString('utf-8')); - } catch (e) { - return callback(e); - } - - return callback(undefined, data); - }); -} - -function createReadJsonAsync( - filesystem: FileSystem -): TsconfigPaths.ReadJsonAsync { - // tslint:disable-next-line:no-any - return (path2: string, callback2: (err?: Error, content?: any) => void) => { - readJson(filesystem, path2, (err, json) => { - // If error assume file does not exist - if (err || !json) { - callback2(); - return; - } - callback2(undefined, json); - }); - }; -} - -function createFileExistAsync( - filesystem: FileSystem -): TsconfigPaths.FileExistsAsync { - return ( - path2: string, - callback2: (err?: Error, exists?: boolean) => void - ) => { - filesystem.stat(path2, (err: Error, stats: fs.Stats) => { - // If error assume file does not exist - if (err) { - callback2(undefined, false); - return; - } - callback2(undefined, stats ? stats.isFile() : false); - }); - }; -} - -export default TsconfigPathsPlugin; diff --git a/packages/workspace/migrations.json b/packages/workspace/migrations.json index 5c0f9868c590f1..0c64d1edc4dfb5 100644 --- a/packages/workspace/migrations.json +++ b/packages/workspace/migrations.json @@ -1,95 +1,5 @@ { "schematics": { - "update-8.2.0": { - "version": "8.2.0-beta.1", - "description": "Add exclusions to lint config", - "factory": "./src/migrations/update-8-2-0/update-8-2-0" - }, - "rename-lint-into-workspace-lint": { - "version": "8.3.0-beta.1", - "description": "Rename 'nx lint' into 'nx workspace-lint' to avoid confusion", - "factory": "./src/migrations/update-8-3-0/rename-lint" - }, - "update-angular-cli-8-1": { - "version": "8.3.0-beta.1", - "description": "Update Angular CLI to 8.1.1", - "factory": "./src/migrations/update-8-3-0/update-ng-cli-8-1" - }, - "update-cypress-to-34": { - "version": "8.3.0-beta.1", - "description": "Update Cypress to 3.4", - "factory": "./src/migrations/update-8-3-0/update-cypress-to-34" - }, - "add-nx-script": { - "version": "8.4.0-beta.1", - "description": "Add 'nx' script to package.json", - "factory": "./src/migrations/update-8-4-0/add-nx-script" - }, - "fix-tsconfig-lib-json": { - "version": "8.5.0-beta.1", - "description": "Fix the exclude paths in tsconfig.lib.json files for Jest projects", - "factory": "./src/migrations/update-8-5-0/fix-tsconfig-lib-json" - }, - "fix-tslint-json": { - "version": "8.10.0-beta.1", - "description": "Fix rules in `tslint.json`", - "factory": "./src/migrations/update-8-10-0/fix-tslint-json" - }, - "add-implicit-e2e-deps": { - "version": "8.12.0-beta.1", - "description": "Add implicit e2e dependencies", - "factory": "./src/migrations/update-8-12-0/add-implicit-e2e-deps" - }, - "update-package-json-deps": { - "version": "8.12.0-beta.1", - "description": "Update package.json dependencies", - "factory": "./src/migrations/update-8-12-0/update-package-json-deps" - }, - "update-enforce-boundary-lint-rule": { - "version": "8.12.0-beta.1", - "description": "Add enforceBuildableLibDependency flag to the nx enforce boundary lint rule", - "factory": "./src/migrations/update-8-12-0/update-enforce-boundary-lint-rule" - }, - "update-9-0-0": { - "version": "9.0.0-beta.1", - "description": "Update typescript to 3.6 and angular/cli to version 9", - "factory": "./src/migrations/update-9-0-0/update-9-0-0" - }, - "update-9-1-0": { - "version": "9.1.0-beta.1", - "description": "Update prettier to 1.19.1 with support for typescript 3.7; Update eslint and tslint", - "factory": "./src/migrations/update-9-1-0/update-9-1-0" - }, - "update-lint-config-9-1-0": { - "version": "9.1.0-beta.1", - "description": "Update eslint and tslint config to provide better IDE support", - "factory": "./src/migrations/update-9-1-0/update-lint-config" - }, - "update-9-2-0": { - "version": "9.2.0-beta.1", - "description": "Add cacheable operations to nx.json", - "factory": "./src/migrations/update-9-2-0/update-9-2-0" - }, - "update-9-3-0": { - "version": "9.3.0-beta.1", - "description": "Update prettier to v2", - "factory": "./src/migrations/update-9-3-0/update-9-3-0" - }, - "update-eslint-config": { - "version": "9.4.0-beta.1", - "description": "Remove config builder option when using eslint to enable automatic detection", - "factory": "./src/migrations/update-9-4-0/update-eslint-config" - }, - "update-linters-exclude": { - "version": "9.4.0-beta.1", - "description": "Fix exclude patterns in tslint and eslint to ensure it does not break linting when a files option is defined", - "factory": "./src/migrations/update-9-4-0/update-linters-exclude" - }, - "add-decorate-cli": { - "version": "9.4.0-beta.1", - "description": "Decorate cli to enable computation caching", - "factory": "./src/migrations/update-9-4-0/add-decorate-cli" - }, "add-default-branch-to-nx-json": { "version": "10.0.0-beta.0", "description": "Add default branch to nx.json", @@ -199,510 +109,15 @@ "description": "@nrwl/workspace:tsc is now @nrwl/js:tsc", "cli": "nx", "implementation": "./src/migrations/update-13-3-0/update-tsc-executor-location" + }, + "13-6-0-remove-old-task-runner-options": { + "version": "13.6.0-beta.0", + "description": "Remove old options that are no longer used", + "cli": "nx", + "implementation": "./src/migrations/update-13-6-0/remove-old-task-runner-options" } }, "packageJsonUpdates": { - "852": { - "version": "8.5.2", - "packages": { - "@nrwl/angular": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/cypress": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/eslint-plugin-nx": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/express": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/jest": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/linter": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/nest": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/next": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/node": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/react": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/tao": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - }, - "@nrwl/web": { - "version": "8.5.2", - "alwaysAddToPackageJson": false - } - } - }, - "853": { - "version": "8.5.3", - "packages": { - "@nrwl/angular": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/cypress": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/eslint-plugin-nx": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/express": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/jest": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/linter": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/nest": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/next": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/node": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/react": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/tao": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - }, - "@nrwl/web": { - "version": "8.5.3", - "alwaysAddToPackageJson": false - } - } - }, - "870": { - "version": "8.7.0", - "packages": { - "@nrwl/angular": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/cypress": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/eslint-plugin-nx": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/express": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/jest": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/linter": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/nest": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/next": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/node": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/react": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/tao": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - }, - "@nrwl/web": { - "version": "8.7.0", - "alwaysAddToPackageJson": false - } - } - }, - "880": { - "version": "8.8.0", - "packages": { - "@ngrx/store": { - "version": "8.5.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/effects": { - "version": "8.5.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/entity": { - "version": "8.5.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/router-store": { - "version": "8.5.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/schematics": { - "version": "8.5.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/store-devtools": { - "version": "8.5.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/architect": { - "version": "0.803.14", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "0.803.14", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-ng-packagr": { - "version": "0.803.14", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "0.803.14", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "8.3.14", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "8.3.14", - "alwaysAddToPackageJson": false - }, - "@angular/cli": { - "version": "8.3.14", - "alwaysAddToPackageJson": false - }, - "@angular/common": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@angular/compiler": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@angular/compiler-cli": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@angular/platform-browser": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@angular/platform-browser-dynamic": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@angular/router": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@angular/upgrade": { - "version": "8.2.12", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "8.3.14", - "alwaysAddToPackageJson": false - } - } - }, - "8120": { - "version": "8.12.0-beta.1", - "packages": { - "@angular-devkit/architect": { - "version": "0.803.23", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "0.803.23", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-ng-packagr": { - "version": "0.803.23", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "0.803.23", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-optimizer": { - "version": "0.803.23", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "8.3.23", - "alwaysAddToPackageJson": false - }, - "@angular/cli": { - "version": "8.3.23", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "8.3.23", - "alwaysAddToPackageJson": false - } - } - }, - "9.0.0": { - "version": "9.0.0-beta.1", - "packages": { - "@angular/cli": { - "version": "~9.0.1", - "alwaysAddToPackageJson": false - }, - "typescript": { - "version": "~3.7.4", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/architect": { - "version": "~0.900.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~0.900.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-ng-packagr": { - "version": "~0.900.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.900.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-optimizer": { - "version": "~0.900.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~9.0.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~9.0.1", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~9.0.1", - "alwaysAddToPackageJson": false - } - } - }, - "9.1.0": { - "version": "9.1.0-beta.1", - "packages": { - "eslint": { - "version": "6.8.0" - }, - "prettier": { - "version": "1.19.1" - }, - "tslint": { - "version": "6.0.0" - }, - "@ngrx/store": { - "version": "9.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/effects": { - "version": "9.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/entity": { - "version": "9.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/router-store": { - "version": "9.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/schematics": { - "version": "9.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/store-devtools": { - "version": "9.0.0", - "alwaysAddToPackageJson": false - } - } - }, - "9.2.0": { - "version": "9.2.0-beta.1", - "packages": { - "@angular/cli": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "typescript": { - "version": "~3.8.3", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/architect": { - "version": "~0.901.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~0.901.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-ng-packagr": { - "version": "~0.901.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.901.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-optimizer": { - "version": "~0.901.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "rxjs": { - "version": "~6.5.4", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/common": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/forms": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/compiler": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/compiler-cli": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/platform-browser": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/platform-browser-dynamic": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/router": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/upgrade": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/language-service": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/animations": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/service-worker": { - "version": "~9.1.0", - "alwaysAddToPackageJson": false - } - } - }, - "9.3.0": { - "version": "9.3.0-beta.1", - "packages": { - "prettier": { - "version": "2.0.4" - }, - "@ngrx/store": { - "version": "9.1.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/effects": { - "version": "9.1.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/entity": { - "version": "9.1.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/router-store": { - "version": "9.1.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/schematics": { - "version": "9.1.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/store-devtools": { - "version": "9.1.0", - "alwaysAddToPackageJson": false - } - } - }, "10.0.0": { "version": "10.0.0-beta.1", "packages": { diff --git a/packages/workspace/package.json b/packages/workspace/package.json index 88e56aeee84182..4dc947e5155eed 100644 --- a/packages/workspace/package.json +++ b/packages/workspace/package.json @@ -70,7 +70,7 @@ "glob": "7.1.4", "ignore": "^5.0.4", "npm-run-path": "^4.0.1", - "open": "^7.4.2", + "open": "^8.4.0", "rxjs": "^6.5.4", "semver": "7.3.4", "tmp": "~0.2.1", diff --git a/packages/workspace/src/command-line/affected.ts b/packages/workspace/src/command-line/affected.ts index 480ace04aa2f43..5cae7fff920eae 100644 --- a/packages/workspace/src/command-line/affected.ts +++ b/packages/workspace/src/command-line/affected.ts @@ -21,7 +21,6 @@ import { parseFiles } from './shared'; import type { NxArgs, RawNxArgs } from './utils'; import { splitArgsIntoNxArgsAndOverrides } from './utils'; import { performance } from 'perf_hooks'; -import type { Environment } from '../core/shared-interfaces'; export async function affected( command: 'apps' | 'libs' | 'graph' | 'print-affected' | 'affected', @@ -40,14 +39,12 @@ export async function affected( const projectGraph = await createProjectGraphAsync(); const projects = projectsToRun(nxArgs, projectGraph); - const projectsNotExcluded = applyExclude(projects, nxArgs); const env = readEnvironment(); - const filteredProjects = applyOnlyFailed(projectsNotExcluded, nxArgs, env); try { switch (command) { case 'apps': - const apps = filteredProjects + const apps = projects .filter((p) => p.type === ProjectType.app) .map((p) => p.name); if (parsedArgs.plain) { @@ -63,7 +60,7 @@ export async function affected( break; case 'libs': - const libs = filteredProjects + const libs = projects .filter((p) => p.type === ProjectType.lib) .map((p) => p.name); if (parsedArgs.plain) { @@ -79,19 +76,16 @@ export async function affected( break; case 'graph': - const projectNames = filteredProjects.map((p) => p.name); + const projectNames = projects.map((p) => p.name); await generateGraph(parsedArgs as any, projectNames); break; case 'print-affected': if (nxArgs.target) { - const projectsWithTarget = allProjectsWithTarget( - filteredProjects, - nxArgs - ); + const projectsWithTarget = allProjectsWithTarget(projects, nxArgs); await printAffected( projectsWithTarget, - filteredProjects, + projects, projectGraph, env, nxArgs, @@ -100,7 +94,7 @@ export async function affected( } else { await printAffected( [], - filteredProjects, + projects, projectGraph, env, nxArgs, @@ -110,10 +104,7 @@ export async function affected( break; case 'affected': { - const projectsWithTarget = allProjectsWithTarget( - filteredProjects, - nxArgs - ); + const projectsWithTarget = allProjectsWithTarget(projects, nxArgs); await runCommand( projectsWithTarget, projectGraph, @@ -133,8 +124,6 @@ export async function affected( } function projectsToRun(nxArgs: NxArgs, projectGraph: ProjectGraph) { - if (nxArgs.all) return projectGraph.nodes; - let affectedGraph = nxArgs.all ? projectGraph : filterAffected( @@ -145,35 +134,21 @@ function projectsToRun(nxArgs: NxArgs, projectGraph: ProjectGraph) { nxArgs ) ); - if (nxArgs.withDeps) { + if (!nxArgs.all && nxArgs.withDeps) { affectedGraph = withDeps( projectGraph, Object.values(affectedGraph.nodes) as ProjectGraphProjectNode[] ); } - return affectedGraph.nodes; -} -function applyExclude( - projects: Record, - nxArgs: NxArgs -) { - return Object.keys(projects) - .filter((key) => !(nxArgs.exclude || []).includes(key)) - .reduce((p, key) => { - p[key] = projects[key]; - return p; - }, {} as Record); -} + if (nxArgs.exclude) { + const excludedProjects = new Set(nxArgs.exclude); + return Object.entries(affectedGraph.nodes) + .filter(([projectName]) => !excludedProjects.has(projectName)) + .map(([, project]) => project); + } -function applyOnlyFailed( - projectsNotExcluded: Record, - nxArgs: NxArgs, - env: Environment -) { - return Object.values(projectsNotExcluded).filter( - (n) => !nxArgs.onlyFailed || !env.workspaceResults.getResult(n.name) - ); + return Object.values(affectedGraph.nodes); } function allProjectsWithTarget(projects: ProjectGraphNode[], nxArgs: NxArgs) { diff --git a/packages/workspace/src/command-line/nx-commands.ts b/packages/workspace/src/command-line/nx-commands.ts index 59e207cc99b66a..a88f5380e39858 100644 --- a/packages/workspace/src/command-line/nx-commands.ts +++ b/packages/workspace/src/command-line/nx-commands.ts @@ -197,15 +197,14 @@ ${daemonHelpOutput} ) .command( 'daemon', - `${chalk.bold('EXPERIMENTAL: Nx Daemon')}` + - (daemonHelpOutput - ? stripIndents`${daemonHelpOutput}`.trimRight() - : ` + daemonHelpOutput + ? stripIndents`${daemonHelpOutput}`.trimRight() + : ` The Daemon is not currently running you can start it manually by running the following command: npx nx daemon -`.trimRight()), +`.trimRight(), (yargs) => linkToNxDevAndExamples(withDaemonStartOptions(yargs), 'daemon'), async (args) => (await import('./daemon')).daemonHandler(args) ) @@ -237,7 +236,7 @@ npx nx daemon .command( 'workspace-lint [files..]', chalk.bold( - 'Lint nx specific workspace files (nx.json, workspace.json) and check existence of the configured packages and apps. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file' + 'Lint nx specific workspace files (nx.json, workspace.json), checks if your configuration and your source code are in sync. This command identifies projects with no files in the configured project root folder, as well as files that are not part of any projects in the workspace. Note: To exclude files from this lint rule, you can add them to the `.nxignore` file.' ), noop, async (_) => (await import('./lint')).workspaceLint() @@ -443,6 +442,8 @@ function withAffectedOptions(yargs: yargs.Argv): yargs.Argv { type: 'string', }) .options('only-failed', { + deprecated: + 'The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15.', describe: 'Isolate projects which previously failed', type: 'boolean', default: false, @@ -498,6 +499,8 @@ function withRunManyOptions(yargs: yargs.Argv): yargs.Argv { 'Configure target dependencies instead. It will be removed in v14.', }) .options('only-failed', { + deprecated: + 'The command to rerun failed projects will appear if projects fail. This now does nothing and will be removed in v15.', describe: 'Only run the target on projects which previously failed', type: 'boolean', default: false, diff --git a/packages/workspace/src/command-line/run-many.ts b/packages/workspace/src/command-line/run-many.ts index 22a598bcef66d8..09efa4d33ae0b5 100644 --- a/packages/workspace/src/command-line/run-many.ts +++ b/packages/workspace/src/command-line/run-many.ts @@ -9,7 +9,6 @@ import { projectHasTarget } from '../utilities/project-graph-utils'; import { output } from '../utilities/output'; import { connectToNxCloudUsingScan } from './connect-to-nx-cloud'; import { performance } from 'perf_hooks'; -import type { Environment } from '../core/shared-interfaces'; export async function runMany(parsedArgs: yargs.Arguments & RawNxArgs) { performance.mark('command-execution-begins'); @@ -22,12 +21,10 @@ export async function runMany(parsedArgs: yargs.Arguments & RawNxArgs) { const projectGraph = await createProjectGraphAsync(); const projects = projectsToRun(nxArgs, projectGraph); - const projectsNotExcluded = applyExclude(projects, nxArgs); const env = readEnvironment(); - const filteredProjects = applyOnlyFailed(projectsNotExcluded, nxArgs, env); await runCommand( - filteredProjects, + projects, projectGraph, env, nxArgs, @@ -37,44 +34,23 @@ export async function runMany(parsedArgs: yargs.Arguments & RawNxArgs) { ); } -function projectsToRun(nxArgs: NxArgs, projectGraph: ProjectGraph) { +function projectsToRun( + nxArgs: NxArgs, + projectGraph: ProjectGraph +): ProjectGraphNode[] { const allProjects = Object.values(projectGraph.nodes); + const excludedProjects = new Set(nxArgs.exclude ?? []); if (nxArgs.all) { - return runnableForTarget(allProjects, nxArgs.target).reduce( - (m, c) => ((m[c.name] = c), m), - {} - ); - } else { - checkForInvalidProjects(nxArgs, allProjects); - let selectedProjects = nxArgs.projects.map((name) => - allProjects.find((project) => project.name === name) - ); - return runnableForTarget(selectedProjects, nxArgs.target, true).reduce( - (m, c) => ((m[c.name] = c), m), - {} + return runnableForTarget(allProjects, nxArgs.target).filter( + (proj) => !excludedProjects.has(proj.name) ); } -} - -function applyExclude( - projects: Record, - nxArgs: NxArgs -) { - return Object.keys(projects) - .filter((key) => !(nxArgs.exclude || []).includes(key)) - .reduce((p, key) => { - p[key] = projects[key]; - return p; - }, {} as Record); -} - -function applyOnlyFailed( - projectsNotExcluded: Record, - nxArgs: NxArgs, - env: Environment -) { - return Object.values(projectsNotExcluded).filter( - (n) => !nxArgs.onlyFailed || !env.workspaceResults.getResult(n.name) + checkForInvalidProjects(nxArgs, allProjects); + let selectedProjects = nxArgs.projects.map((name) => + allProjects.find((project) => project.name === name) + ); + return runnableForTarget(selectedProjects, nxArgs.target, true).filter( + (proj) => !excludedProjects.has(proj.name) ); } diff --git a/packages/workspace/src/command-line/utils.ts b/packages/workspace/src/command-line/utils.ts index 404cf196fd345c..90d32da94a03b6 100644 --- a/packages/workspace/src/command-line/utils.ts +++ b/packages/workspace/src/command-line/utils.ts @@ -114,6 +114,13 @@ export function splitArgsIntoNxArgsAndOverrides( nxArgs.configuration = 'production'; } + // TODO(v15): onlyFailed should not be an option + if (options.printWarnings && nxArgs.onlyFailed) { + output.warn({ + title: `--onlyFailed is deprecated. All tasks will be run.`, + }); + } + if (mode === 'affected') { if (options.printWarnings && nxArgs.all) { output.warn({ diff --git a/packages/workspace/src/core/file-utils.ts b/packages/workspace/src/core/file-utils.ts index 1191354183a4c5..5449706f80d43b 100644 --- a/packages/workspace/src/core/file-utils.ts +++ b/packages/workspace/src/core/file-utils.ts @@ -159,29 +159,26 @@ export function readPackageJson(): any { export function readNxJson( path: string = `${appRootPath}/nx.json` ): NxJsonConfiguration { - const config = readJsonFile(path); + let config = readJsonFile(path); if (!config.npmScope) { throw new Error(`nx.json must define the npmScope property.`); } - const nxJsonExtends = readNxJsonExtends(config as any); - if (nxJsonExtends) { - return { ...nxJsonExtends, ...config }; - } else { - return config; + if (config.extends) { + config = { + ...resolveNxJsonExtends(config.extends), + ...config, + }; } + + return config; } -function readNxJsonExtends(nxJson: { extends?: string }) { - if (nxJson.extends) { - const extendsPath = nxJson.extends; - try { - return readJsonFile(require.resolve(extendsPath)); - } catch (e) { - throw new Error(`Unable to resolve nx.json extends. Error: ${e.message}`); - } - } else { - return null; +function resolveNxJsonExtends(extendedNxJsonPath: string) { + try { + return readJsonFile(require.resolve(extendedNxJsonPath)); + } catch (e) { + throw new Error(`Unable to resolve nx.json extends. Error: ${e.message}`); } } diff --git a/packages/workspace/src/core/hasher/file-hasher-base.ts b/packages/workspace/src/core/hasher/file-hasher-base.ts index dcf4f3572588ec..b40a70fb6f30b2 100644 --- a/packages/workspace/src/core/hasher/file-hasher-base.ts +++ b/packages/workspace/src/core/hasher/file-hasher-base.ts @@ -1,9 +1,7 @@ import { appRootPath } from '@nrwl/tao/src/utils/app-root'; import { performance } from 'perf_hooks'; -import { getFileHashes } from './git-hasher'; import { defaultHashing } from './hashing-impl'; import { FileData } from '@nrwl/tao/src/shared/project-graph'; -import { existsSync, readFileSync } from 'fs'; export abstract class FileHasherBase { protected fileHashes: Map; @@ -65,8 +63,8 @@ export abstract class FileHasherBase { const relativePath = path.startsWith(appRootPath) ? path.substr(appRootPath.length + 1) : path; - if (this.fileHashes[relativePath]) { - return this.fileHashes[relativePath]; + if (this.fileHashes.has(relativePath)) { + return this.fileHashes.get(relativePath); } else { try { return defaultHashing.hashFile(path); diff --git a/packages/workspace/src/core/hasher/file-hasher.ts b/packages/workspace/src/core/hasher/file-hasher.ts index 1ec38cd9d029df..bf743ae3c328f9 100644 --- a/packages/workspace/src/core/hasher/file-hasher.ts +++ b/packages/workspace/src/core/hasher/file-hasher.ts @@ -1,15 +1,18 @@ import { GitBasedFileHasher } from './git-based-file-hasher'; -import { joinPathFragments } from '@nrwl/devkit'; import { appRootPath } from '@nrwl/tao/src/utils/app-root'; import { NodeBasedFileHasher } from './node-based-file-hasher'; import { FileHasherBase } from './file-hasher-base'; -import { statSync } from 'fs'; +import { execSync } from 'child_process'; function createFileHasher(): FileHasherBase { + // special case for unit tests + if (appRootPath === '/root') { + return new NodeBasedFileHasher(); + } try { - statSync(joinPathFragments(appRootPath, '.git')).isDirectory(); + execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' }); return new GitBasedFileHasher(); - } catch (err) { + } catch { return new NodeBasedFileHasher(); } } diff --git a/packages/workspace/src/core/hasher/hasher.spec.ts b/packages/workspace/src/core/hasher/hasher.spec.ts index 8843630ecb9a3f..49225a4ab3e2fa 100644 --- a/packages/workspace/src/core/hasher/hasher.spec.ts +++ b/packages/workspace/src/core/hasher/hasher.spec.ts @@ -246,9 +246,7 @@ fdescribe('Hasher', () => { }, }, dependencies: { - parent: [ - { source: 'parent', target: 'child', type: DependencyType.static }, - ], + parent: [{ source: 'parent', target: 'child', type: 'static' }], }, }, {} as any, @@ -345,12 +343,8 @@ fdescribe('Hasher', () => { }, }, dependencies: { - parent: [ - { source: 'parent', target: 'child', type: DependencyType.static }, - ], - child: [ - { source: 'child', target: 'parent', type: DependencyType.static }, - ], + parent: [{ source: 'parent', target: 'child', type: 'static' }], + child: [{ source: 'child', target: 'parent', type: 'static' }], }, }, {} as any, diff --git a/packages/workspace/src/core/hasher/hasher.ts b/packages/workspace/src/core/hasher/hasher.ts index dfd6989852c47e..ddf6f4f61726b5 100644 --- a/packages/workspace/src/core/hasher/hasher.ts +++ b/packages/workspace/src/core/hasher/hasher.ts @@ -1,6 +1,5 @@ import { NxJsonConfiguration, - parseJson, ProjectGraph, readJsonFile, Task, @@ -8,7 +7,7 @@ import { } from '@nrwl/devkit'; import { resolveNewFormatWithInlineProjects } from '@nrwl/tao/src/shared/workspace'; import { exec } from 'child_process'; -import { existsSync, readFileSync } from 'fs'; +import { existsSync } from 'fs'; import * as minimatch from 'minimatch'; import { join } from 'path'; import { performance } from 'perf_hooks'; @@ -274,10 +273,9 @@ export class Hasher { let nxJsonContents = '{}'; try { - const fileContents = readFileSync(nxJsonPath, 'utf-8'); - const r = parseJson(fileContents); - delete r.projects; - nxJsonContents = JSON.stringify(r); + const nxJson = readJsonFile(nxJsonPath); + delete nxJson.projects; + nxJsonContents = JSON.stringify(nxJson); } catch {} return [ diff --git a/packages/workspace/src/core/hasher/node-based-file-hasher.ts b/packages/workspace/src/core/hasher/node-based-file-hasher.ts index 822934248f4472..7de0757b9e6f01 100644 --- a/packages/workspace/src/core/hasher/node-based-file-hasher.ts +++ b/packages/workspace/src/core/hasher/node-based-file-hasher.ts @@ -54,9 +54,9 @@ export class NodeBasedFileHasher extends FileHasherBase { } else if (s.isDirectory() && recurse) { this.allFilesInDir(absoluteChild, true); } - } catch (e) {} + } catch {} }); - } catch (e) {} + } catch {} } } diff --git a/packages/workspace/src/core/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts b/packages/workspace/src/core/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts index 90750bf00ef0c9..b4c50f43b38a84 100644 --- a/packages/workspace/src/core/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts +++ b/packages/workspace/src/core/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts @@ -1,9 +1,4 @@ -import { - ProjectFileMap, - ProjectGraph, - ProjectGraphBuilderExplicitDependency, - Workspace, -} from '@nrwl/devkit'; +import { ProjectFileMap, ProjectGraph, Workspace } from '@nrwl/devkit'; import { buildExplicitTypeScriptDependencies } from './explicit-project-dependencies'; import { buildExplicitPackageJsonDependencies } from './explicit-package-json-dependencies'; @@ -15,7 +10,7 @@ export function buildExplicitTypescriptAndPackageJsonDependencies( workspace: Workspace, projectGraph: ProjectGraph, filesToProcess: ProjectFileMap -): ProjectGraphBuilderExplicitDependency[] { +) { let res = []; if ( jsPluginConfig.analyzeSourceFiles === undefined || diff --git a/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.spec.ts b/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.spec.ts index 98998f685526c0..5dda36f4ee464f 100644 --- a/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.spec.ts +++ b/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.spec.ts @@ -2,7 +2,6 @@ import { buildExplicitPackageJsonDependencies } from './explicit-package-json-de import { vol } from 'memfs'; import { ProjectGraphNode } from '../project-graph-models'; import { - DependencyType, ProjectGraphBuilder, ProjectGraphProcessorContext, } from '@nrwl/devkit'; @@ -126,19 +125,16 @@ describe('explicit package json dependencies', () => { sourceProjectName: 'proj', targetProjectName: 'proj2', sourceProjectFile: 'libs/proj/package.json', - dependencyType: DependencyType.static, }, { sourceProjectFile: 'libs/proj/package.json', sourceProjectName: 'proj', targetProjectName: 'npm:external', - dependencyType: DependencyType.static, }, { sourceProjectName: 'proj', targetProjectName: 'proj3', sourceProjectFile: 'libs/proj/package.json', - dependencyType: DependencyType.static, }, ]); }); diff --git a/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.ts b/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.ts index 0828e01d34d61e..ed32e260bbd83a 100644 --- a/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.ts +++ b/packages/workspace/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.ts @@ -1,11 +1,9 @@ import { ProjectGraph, ProjectGraphNodeRecords } from '../project-graph-models'; import { defaultFileRead } from '../../file-utils'; import { - DependencyType, joinPathFragments, parseJson, ProjectFileMap, - ProjectGraphBuilderExplicitDependency, Workspace, } from '@nrwl/devkit'; import { join } from 'path'; @@ -14,8 +12,8 @@ export function buildExplicitPackageJsonDependencies( workspace: Workspace, graph: ProjectGraph, filesToProcess: ProjectFileMap -): ProjectGraphBuilderExplicitDependency[] { - const res: ProjectGraphBuilderExplicitDependency[] = []; +) { + const res = [] as any; let packageNameMap = undefined; Object.keys(filesToProcess).forEach((source) => { Object.values(filesToProcess[source]).forEach((f) => { @@ -57,7 +55,7 @@ function processPackageJson( sourceProject: string, fileName: string, graph: ProjectGraph, - collectedDeps: ProjectGraphBuilderExplicitDependency[], + collectedDeps: any[], packageNameMap: { [packageName: string]: string } ) { try { @@ -70,14 +68,12 @@ function processPackageJson( sourceProjectName: sourceProject, targetProjectName: packageNameMap[d], sourceProjectFile: fileName, - dependencyType: DependencyType.static, }); } else if (graph.externalNodes[`npm:${d}`]) { collectedDeps.push({ sourceProjectName: sourceProject, targetProjectName: `npm:${d}`, sourceProjectFile: fileName, - dependencyType: DependencyType.static, }); } }); diff --git a/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.spec.ts b/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.spec.ts index 495fa3446c6130..4892fd4a87734a 100644 --- a/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.spec.ts +++ b/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.spec.ts @@ -9,7 +9,6 @@ import { vol } from 'memfs'; import { ProjectGraphNode } from '../project-graph-models'; import { buildExplicitTypeScriptDependencies } from './explicit-project-dependencies'; import { - DependencyType, ProjectGraphBuilder, ProjectGraphProcessorContext, } from '@nrwl/devkit'; @@ -200,25 +199,21 @@ describe('explicit project dependencies', () => { expect(res).toEqual([ { - dependencyType: 'static', sourceProjectFile: 'libs/proj/index.ts', sourceProjectName: 'proj', targetProjectName: 'proj2', }, { - dependencyType: 'dynamic', sourceProjectFile: 'libs/proj/index.ts', sourceProjectName: 'proj', targetProjectName: 'proj3a', }, { - dependencyType: 'dynamic', sourceProjectFile: 'libs/proj/index.ts', sourceProjectName: 'proj', targetProjectName: 'proj4ab', }, { - dependencyType: 'static', sourceProjectFile: 'libs/proj1234/index.ts', sourceProjectName: 'proj1234', targetProjectName: 'proj1234-child', diff --git a/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.ts b/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.ts index 07b489d5d08fb6..7b49d2d5bbfbb4 100644 --- a/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.ts +++ b/packages/workspace/src/core/project-graph/build-dependencies/explicit-project-dependencies.ts @@ -3,7 +3,8 @@ import { TypeScriptImportLocator } from './typescript-import-locator'; import { TargetProjectLocator } from '../../target-project-locator'; import { ProjectFileMap, - ProjectGraphBuilderExplicitDependency, + ProjectGraphBuilder, + ProjectGraphProcessorContext, Workspace, } from '@nrwl/devkit'; @@ -11,13 +12,13 @@ export function buildExplicitTypeScriptDependencies( workspace: Workspace, graph: ProjectGraph, filesToProcess: ProjectFileMap -): ProjectGraphBuilderExplicitDependency[] { +) { const importLocator = new TypeScriptImportLocator(); const targetProjectLocator = new TargetProjectLocator( graph.nodes, graph.externalNodes ); - const res: ProjectGraphBuilderExplicitDependency[] = []; + const res = [] as any; Object.keys(filesToProcess).forEach((source) => { Object.values(filesToProcess[source]).forEach((f) => { importLocator.fromFile( @@ -33,7 +34,6 @@ export function buildExplicitTypeScriptDependencies( sourceProjectName: source, targetProjectName: target, sourceProjectFile: f.file, - dependencyType: type, }); } } diff --git a/packages/workspace/src/core/project-graph/build-dependencies/typescript-import-locator.ts b/packages/workspace/src/core/project-graph/build-dependencies/typescript-import-locator.ts index 51640da705693c..89ab49303b78cd 100644 --- a/packages/workspace/src/core/project-graph/build-dependencies/typescript-import-locator.ts +++ b/packages/workspace/src/core/project-graph/build-dependencies/typescript-import-locator.ts @@ -4,7 +4,7 @@ import { DependencyType } from '@nrwl/devkit'; import { stripSourceCode } from '../../../utilities/strip-source-code'; import { defaultFileRead } from '../../file-utils'; -let tsModule: typeof ts; +let tsModule: any; export class TypeScriptImportLocator { private readonly scanner: ts.Scanner; @@ -46,7 +46,7 @@ export class TypeScriptImportLocator { fromNode( filePath: string, - node: ts.Node, + node: any, visitor: ( importExpr: string, filePath: string, @@ -59,15 +59,7 @@ export class TypeScriptImportLocator { ) { if (!this.ignoreStatement(node)) { const imp = this.getStringLiteralValue(node.moduleSpecifier); - const isTypeOnly = - (tsModule.isImportDeclaration(node) && - node.importClause?.isTypeOnly) || - (tsModule.isExportDeclaration(node) && node.isTypeOnly); - visitor( - imp, - filePath, - isTypeOnly ? DependencyType.typeOnly : DependencyType.static - ); + visitor(imp, filePath, DependencyType.static); } return; // stop traversing downwards } diff --git a/packages/workspace/src/core/project-graph/build-project-graph.spec.ts b/packages/workspace/src/core/project-graph/build-project-graph.spec.ts index 7163fa630e4a99..b0cdbcb16f56c6 100644 --- a/packages/workspace/src/core/project-graph/build-project-graph.spec.ts +++ b/packages/workspace/src/core/project-graph/build-project-graph.spec.ts @@ -72,12 +72,6 @@ describe('project graph', () => { projectType: 'library', targets: {}, }, - 'types-lib': { - root: 'libs/types-lib', - sourceRoot: 'libs/types-lib', - projectType: 'library', - targets: {}, - }, api: { root: 'apps/api/', sourceRoot: 'apps/api/src', @@ -104,7 +98,6 @@ describe('project graph', () => { '@nrwl/shared-util-data': ['libs/shared/util/data/src/index.ts'], '@nrwl/ui': ['libs/ui/src/index.ts'], '@nrwl/lazy-lib': ['libs/lazy-lib/src/index.ts'], - '@nrwl/types-lib': ['libs/types-lib/src/index.ts'], }, }, }; @@ -115,7 +108,6 @@ describe('project graph', () => { './apps/demo/src/index.ts': stripIndents` import * as ui from '@nrwl/ui'; import * as data from '@nrwl/shared-util-data; - import type { MyType } from '@nrwl/types-lib; const s = { loadChildren: '@nrwl/lazy-lib#LAZY' } `, './apps/demo-e2e/src/integration/app.spec.ts': stripIndents` @@ -134,9 +126,6 @@ describe('project graph', () => { './libs/lazy-lib/src/index.ts': stripIndents` export const LAZY = 'lazy lib'; `, - './libs/types-lib/src/index.ts': stripIndents` - export type MyType = {}; - `, './package.json': JSON.stringify(packageJson), './nx.json': JSON.stringify(nxJson), './workspace.json': JSON.stringify(workspaceJson), @@ -153,9 +142,7 @@ describe('project graph', () => { fail('Invalid tsconfigs should cause project graph to throw error'); } catch (e) { expect(e.message).toMatchInlineSnapshot( - `"InvalidSymbol in /root/tsconfig.base.json at position ${ - JSON.stringify(tsConfigJson).length - }"` + `"InvalidSymbol in /root/tsconfig.base.json at position 247"` ); } }); @@ -189,35 +176,23 @@ describe('project graph', () => { }, }); expect(graph.dependencies).toEqual({ - api: [ - { source: 'api', target: 'npm:express', type: DependencyType.static }, - ], + api: [{ source: 'api', target: 'npm:express', type: 'static' }], demo: [ - { source: 'demo', target: 'api', type: DependencyType.implicit }, + { source: 'demo', target: 'api', type: 'implicit' }, { source: 'demo', target: 'ui', - type: DependencyType.static, - }, - { - source: 'demo', - target: 'shared-util-data', - type: DependencyType.static, - }, - { - source: 'demo', - target: 'types-lib', - type: DependencyType.typeOnly, + type: 'static', }, + { source: 'demo', target: 'shared-util-data', type: 'static' }, { source: 'demo', target: 'lazy-lib', - type: DependencyType.dynamic, + type: 'static', }, ], 'demo-e2e': [], 'lazy-lib': [], - 'types-lib': [], 'shared-util': [ { source: 'shared-util', target: 'npm:happy-nrwl', type: 'static' }, ], @@ -227,7 +202,7 @@ describe('project graph', () => { { source: 'ui', target: 'lazy-lib', - type: 'dynamic', + type: 'static', }, ], }); @@ -269,7 +244,7 @@ describe('project graph', () => { target: 'shared-util', }, { - type: DependencyType.dynamic, + type: DependencyType.static, source: 'ui', target: 'lazy-lib', }, diff --git a/packages/workspace/src/core/project-graph/build-project-graph.ts b/packages/workspace/src/core/project-graph/build-project-graph.ts index f77b8b5a19f84d..493d369f96a217 100644 --- a/packages/workspace/src/core/project-graph/build-project-graph.ts +++ b/packages/workspace/src/core/project-graph/build-project-graph.ts @@ -8,7 +8,6 @@ import { ProjectFileMap, ProjectGraph, ProjectGraphBuilder, - ProjectGraphBuilderExplicitDependency, ProjectGraphProcessorContext, readJsonFile, WorkspaceJsonConfiguration, @@ -197,7 +196,7 @@ function buildExplicitDependencies( // files we need to process is >= 100 and there are more than 2 CPUs // to be able to use at least 2 workers (1 worker per CPU and // 1 CPU for the main thread) - if (totalNumOfFilesToProcess < 100 || os.cpus().length < 3) { + if (totalNumOfFilesToProcess < 100 || getNumberOfWorkers() <= 2) { return buildExplicitDependenciesWithoutWorkers( jsPluginConfig, ctx, @@ -281,8 +280,7 @@ function buildExplicitDependenciesWithoutWorkers( builder.addExplicitDependency( r.sourceProjectName, r.sourceProjectFile, - r.targetProjectName, - r.dependencyType + r.targetProjectName ); }); } @@ -296,7 +294,7 @@ function buildExplicitDependenciesUsingWorkers( totalNumOfFilesToProcess: number, builder: ProjectGraphBuilder ) { - const numberOfWorkers = os.cpus().length - 1; + const numberOfWorkers = getNumberOfWorkers(); const bins = splitFilesIntoBins( ctx, totalNumOfFilesToProcess, @@ -308,16 +306,13 @@ function buildExplicitDependenciesUsingWorkers( return new Promise((res, reject) => { for (let w of workers) { w.on('message', (explicitDependencies) => { - explicitDependencies.forEach( - (r: ProjectGraphBuilderExplicitDependency) => { - builder.addExplicitDependency( - r.sourceProjectName, - r.sourceProjectFile, - r.targetProjectName, - r.dependencyType - ); - } - ); + explicitDependencies.forEach((r) => { + builder.addExplicitDependency( + r.sourceProjectName, + r.sourceProjectFile, + r.targetProjectName + ); + }); if (bins.length > 0) { w.postMessage({ filesToProcess: bins.shift() }); } @@ -349,6 +344,12 @@ function buildExplicitDependenciesUsingWorkers( }); } +function getNumberOfWorkers(): number { + return process.env.NX_PROJECT_GRAPH_MAX_WORKERS + ? +process.env.NX_PROJECT_GRAPH_MAX_WORKERS + : os.cpus().length - 1; +} + function createContext( workspaceJson: WorkspaceJsonConfiguration, nxJson: NxJsonConfiguration, diff --git a/packages/workspace/src/core/project-graph/daemon/client/client.ts b/packages/workspace/src/core/project-graph/daemon/client/client.ts index 3ba1fc6bb62367..199e612e7d88ca 100644 --- a/packages/workspace/src/core/project-graph/daemon/client/client.ts +++ b/packages/workspace/src/core/project-graph/daemon/client/client.ts @@ -20,46 +20,42 @@ export async function startInBackground(): Promise { ensureDirSync(DAEMON_DIR_FOR_CURRENT_WORKSPACE); ensureFileSync(DAEMON_OUTPUT_LOG_FILE); - try { - const out = openSync(DAEMON_OUTPUT_LOG_FILE, 'a'); - const err = openSync(DAEMON_OUTPUT_LOG_FILE, 'a'); - const backgroundProcess = spawn(process.execPath, ['../server/start.js'], { - cwd: __dirname, - stdio: ['ignore', out, err], - detached: true, - windowsHide: true, - shell: false, - }); - backgroundProcess.unref(); + const out = openSync(DAEMON_OUTPUT_LOG_FILE, 'a'); + const err = openSync(DAEMON_OUTPUT_LOG_FILE, 'a'); + const backgroundProcess = spawn(process.execPath, ['../server/start.js'], { + cwd: __dirname, + stdio: ['ignore', out, err], + detached: true, + windowsHide: true, + shell: false, + }); + backgroundProcess.unref(); - // Persist metadata about the background process so that it can be cleaned up later if needed - await writeDaemonJsonProcessCache({ - processId: backgroundProcess.pid, - }); + // Persist metadata about the background process so that it can be cleaned up later if needed + await writeDaemonJsonProcessCache({ + processId: backgroundProcess.pid, + }); - /** - * Ensure the server is actually available to connect to via IPC before resolving - */ - let attempts = 0; - return new Promise((resolve) => { - const id = setInterval(async () => { - if (await isServerAvailable()) { - clearInterval(id); - resolve(backgroundProcess.pid); - } else if (attempts > 200) { - // daemon fails to start, the process probably exited - // we print the logs and exit the client - throw daemonProcessException( - 'Failed to start the Nx Daemon process.' - ); - } else { - attempts++; - } - }, 10); - }); - } catch (err) { - throw err; - } + /** + * Ensure the server is actually available to connect to via IPC before resolving + */ + let attempts = 0; + return new Promise((resolve, reject) => { + const id = setInterval(async () => { + if (await isServerAvailable()) { + clearInterval(id); + resolve(backgroundProcess.pid); + } else if (attempts > 200) { + // daemon fails to start, the process probably exited + // we print the logs and exit the client + reject( + daemonProcessException('Failed to start the Nx Daemon process.') + ); + } else { + attempts++; + } + }, 10); + }); } function daemonProcessException(message: string) { @@ -142,11 +138,13 @@ export async function getProjectGraphFromServer(): Promise { const socket = connect(FULL_OS_SOCKET_PATH); socket.on('error', (err) => { - let error: any; + if (!err.message) { + return reject(err); + } if (err.message.startsWith('LOCK-FILES-CHANGED')) { return getProjectGraphFromServer().then(resolve, reject); } - + let error: any; if (err.message.startsWith('connect ENOENT')) { error = daemonProcessException('The Daemon Server is not running'); } else if (err.message.startsWith('connect ECONNREFUSED')) { diff --git a/packages/workspace/src/core/project-graph/daemon/tmp-dir.ts b/packages/workspace/src/core/project-graph/daemon/tmp-dir.ts index c7d9757088a582..d81921fb58f22a 100644 --- a/packages/workspace/src/core/project-graph/daemon/tmp-dir.ts +++ b/packages/workspace/src/core/project-graph/daemon/tmp-dir.ts @@ -20,6 +20,12 @@ export const DAEMON_SOCKET_PATH = join( 'd.sock' ); +export function writeDaemonLogs(error?: string) { + const file = join(DAEMON_DIR_FOR_CURRENT_WORKSPACE, 'daemon-error.log'); + writeFileSync(file, error); + return file; +} + export function markDaemonAsDisabled() { writeFileSync(join(DAEMON_DIR_FOR_CURRENT_WORKSPACE, 'disabled'), 'true'); } diff --git a/packages/workspace/src/core/project-graph/project-graph.ts b/packages/workspace/src/core/project-graph/project-graph.ts index 5da44889778abb..a947a9e71366fa 100644 --- a/packages/workspace/src/core/project-graph/project-graph.ts +++ b/packages/workspace/src/core/project-graph/project-graph.ts @@ -8,6 +8,7 @@ import { defaultFileHasher } from '../hasher/file-hasher'; import { isDaemonDisabled, markDaemonAsDisabled, + writeDaemonLogs, } from '@nrwl/workspace/src/core/project-graph/daemon/tmp-dir'; /** @@ -74,23 +75,20 @@ export async function createProjectGraphAsync( nxJson.tasksRunnerOptions?.['default']?.options?.useDaemonProcess; const env = process.env.NX_DAEMON; - // env takes precendence - // option=undefined,env=undefined => no daemon + // env takes precedence // option=true,env=false => no daemon // option=false,env=undefined => no daemon // option=false,env=false => no daemon - // option=true,env=undefined,ci => no daemon - // option=true,env=undefined,!ci => daemon + // option=undefined,env=undefined => daemon // option=true,env=true => daemon // option=false,env=true => daemon if ( + isCI() || isDaemonDisabled() || - (useDaemonProcessOption === undefined && env === undefined) || (useDaemonProcessOption === true && env === 'false') || (useDaemonProcessOption === false && env === undefined) || - (useDaemonProcessOption === false && env === 'false') || - (useDaemonProcessOption === true && env === undefined && isCI()) + (useDaemonProcessOption === false && env === 'false') ) { return await buildProjectGraphWithoutDaemon(projectGraphVersion); } else { @@ -107,19 +105,26 @@ export async function createProjectGraphAsync( } catch (e) { // common errors with the daemon due to OS settings (cannot watch all the files available) if (e.message.indexOf('inotify_add_watch') > -1) { - // https://askubuntu.com/questions/1088272/inotify-add-watch-failed-no-space-left-on-device - output.warn({ - title: `Unable to start Nx Daemon due to the limited amount of inotify watches, continuing without the daemon. Nx Daemon is going to be disabled until you run "nx reset".`, + output.note({ + title: `Unable to start Nx Daemon due to the limited amount of inotify watches, continuing without the daemon.`, bodyLines: [ 'For more information read: https://askubuntu.com/questions/1088272/inotify-add-watch-failed-no-space-left-on-device', + 'Nx Daemon is going to be disabled until you run "nx reset".', ], }); - markDaemonAsDisabled(); - return buildProjectGraphWithoutDaemon(projectGraphVersion); } else { - printErrorMessage(e); - process.exit(1); + const errorLogFile = writeDaemonLogs(e.message); + output.warn({ + title: `Nx Daemon was not able to compute the project graph.`, + bodyLines: [ + `Log file with the error: ${errorLogFile}`, + `Please file an issue at https://github.com/nrwl/nx`, + 'Nx Daemon is going to be disabled until you run "nx reset".', + ], + }); } + markDaemonAsDisabled(); + return buildProjectGraphWithoutDaemon(projectGraphVersion); } } } diff --git a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap index bba0449d6d1513..3b411a1cf9ed0f 100644 --- a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap +++ b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap @@ -11,7 +11,7 @@ Object { "@nrwl/workspace": "*", "@types/node": "16.11.7", "prettier": "^2.5.1", - "typescript": "~4.4.3", + "typescript": "~4.5.2", }, "license": "MIT", "name": "my-workspace", @@ -34,7 +34,7 @@ Object { "@nrwl/workspace": "*", "@types/node": "16.11.7", "prettier": "^2.5.1", - "typescript": "~4.4.3", + "typescript": "~4.5.2", }, "license": "MIT", "name": "my-workspace", @@ -58,7 +58,7 @@ Object { "@nrwl/workspace": "*", "@types/node": "16.11.7", "prettier": "^2.5.1", - "typescript": "~4.4.3", + "typescript": "~4.5.2", }, "license": "MIT", "name": "my-workspace", diff --git a/packages/workspace/src/generators/npm-package/npm-package.ts b/packages/workspace/src/generators/npm-package/npm-package.ts index 8964c94d7e3d4d..53510243373c70 100644 --- a/packages/workspace/src/generators/npm-package/npm-package.ts +++ b/packages/workspace/src/generators/npm-package/npm-package.ts @@ -5,8 +5,8 @@ import { generateFiles, getWorkspaceLayout, getWorkspacePath, + joinPathFragments, names, - readWorkspaceConfiguration, Tree, writeJson, } from '@nrwl/devkit'; @@ -29,7 +29,7 @@ function addFiles( ) { const packageJsonPath = join(projectRoot, 'package.json'); writeJson(tree, packageJsonPath, { - name: join(`@${npmScope}`, options.name), + name: joinPathFragments(`@${npmScope}`, options.name), version: '0.0.0', scripts: { test: 'node index.js', diff --git a/packages/workspace/src/migrations/update-13-6-0/remove-old-task-runner-options.spec.ts b/packages/workspace/src/migrations/update-13-6-0/remove-old-task-runner-options.spec.ts new file mode 100644 index 00000000000000..cb0b9a25dddf22 --- /dev/null +++ b/packages/workspace/src/migrations/update-13-6-0/remove-old-task-runner-options.spec.ts @@ -0,0 +1,44 @@ +import { NxJsonConfiguration, readJson, Tree, writeJson } from '@nrwl/devkit'; +import { createTree } from '@nrwl/devkit/testing'; +import removeOldTaskRunnerOptions from '@nrwl/workspace/src/migrations/update-13-6-0/remove-old-task-runner-options'; + +describe('removeOldTaskRunnerOptions', () => { + let tree: Tree; + + beforeEach(() => { + tree = createTree(); + }); + + it('should remove scan and analytics', () => { + writeJson(tree, 'nx.json', { + npmScope: 'scope', + tasksRunnerOptions: { + default: { + runner: 'runner', + options: { + scan: true, + analytics: 'hi', + }, + }, + }, + }); + removeOldTaskRunnerOptions(tree); + const result = readJson(tree, 'nx.json'); + expect(result).toEqual({ + npmScope: 'scope', + tasksRunnerOptions: { + default: { + runner: 'runner', + options: {}, + }, + }, + }); + }); + + it("should not fail if nx.json doesn't have taskRunnerOptions", () => { + writeJson(tree, 'nx.json', {}); + removeOldTaskRunnerOptions(tree); + const result = readJson(tree, 'nx.json'); + expect(result).toEqual({}); + }); +}); diff --git a/packages/workspace/src/migrations/update-13-6-0/remove-old-task-runner-options.ts b/packages/workspace/src/migrations/update-13-6-0/remove-old-task-runner-options.ts new file mode 100644 index 00000000000000..665518a4434b50 --- /dev/null +++ b/packages/workspace/src/migrations/update-13-6-0/remove-old-task-runner-options.ts @@ -0,0 +1,17 @@ +import { + readWorkspaceConfiguration, + Tree, + updateWorkspaceConfiguration, +} from '@nrwl/devkit'; + +export function removeOldTaskRunnerOptions(host: Tree) { + const workspaceConfig = readWorkspaceConfiguration(host); + const options = workspaceConfig.tasksRunnerOptions?.['default']?.options; + if (options) { + delete options.scan; + delete options.analytics; + updateWorkspaceConfiguration(host, workspaceConfig); + } +} + +export default removeOldTaskRunnerOptions; diff --git a/packages/workspace/src/migrations/update-8-10-0/fix-tslint-json.spec.ts b/packages/workspace/src/migrations/update-8-10-0/fix-tslint-json.spec.ts deleted file mode 100644 index eba9ad2bcc49b3..00000000000000 --- a/packages/workspace/src/migrations/update-8-10-0/fix-tslint-json.spec.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { chain, Tree } from '@angular-devkit/schematics'; -import { - readJsonInTree, - updateJsonInTree, - updateWorkspaceInTree, -} from '@nrwl/workspace'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { - callRule, - createLibWithTests, - runMigration, -} from '../../utils/testing'; -import { updateWorkspace } from '@nrwl/workspace/src/utils/workspace'; - -describe('Update 8.10.0', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - }); - - it('should fix projects with invalid tslint configs', async () => { - tree = await callRule( - chain([ - updateWorkspace((workspace) => { - workspace.projects.add({ - name: 'proj-with-invalid-tslint', - root: 'proj-with-invalid-tslint', - }); - }), - updateJsonInTree('proj-with-invalid-tslint/tslint.json', () => ({ - rules: [], - })), - ]), - tree - ); - - const result = await runMigration('fix-tslint-json', {}, tree); - - expect( - readJsonInTree(result, 'proj-with-invalid-tslint/tslint.json').rules - ).toEqual({}); - }); - - it('should fix projects with valid tslint configs', async () => { - tree = await callRule( - chain([ - updateWorkspace((workspace) => { - workspace.projects.add({ - name: 'proj-with-valid-tslint', - root: 'proj-with-valid-tslint', - }); - }), - updateJsonInTree('proj-with-valid-tslint/tslint.json', () => ({ - rules: { - rule: [true], - }, - })), - ]), - tree - ); - - const result = await runMigration('fix-tslint-json', {}, tree); - - expect( - readJsonInTree(result, 'proj-with-valid-tslint/tslint.json').rules - ).toEqual({ - rule: [true], - }); - }); - - it('should not add tslint configs to projects without tslint configs', async () => { - tree = await callRule( - chain([ - updateWorkspace((workspace) => { - workspace.projects.add({ - name: 'proj-without-tslint', - root: 'proj-without-tslint', - }); - }), - ]), - tree - ); - - const result = await runMigration('fix-tslint-json', {}, tree); - - expect(result.exists('proj-without-tslint/tslint.json')).toEqual(false); - }); -}); diff --git a/packages/workspace/src/migrations/update-8-10-0/fix-tslint-json.ts b/packages/workspace/src/migrations/update-8-10-0/fix-tslint-json.ts deleted file mode 100644 index 399aae1b384ffe..00000000000000 --- a/packages/workspace/src/migrations/update-8-10-0/fix-tslint-json.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - chain, - Rule, - SchematicContext, - Tree, -} from '@angular-devkit/schematics'; -import { join, normalize } from '@angular-devkit/core'; -import { stripIndents } from '@angular-devkit/core/src/utils/literals'; - -import { updateJsonInTree } from '../../utils/ast-utils'; -import { getWorkspace } from '../../utils/workspace'; -import { formatFiles } from '@nrwl/workspace'; - -async function fixTslints(host: Tree) { - const workspace = await getWorkspace(host); - const rules: Rule[] = []; - workspace.projects.forEach((proj) => { - const tslintPath = join(normalize(proj.root), 'tslint.json'); - if (host.exists(tslintPath)) { - rules.push( - updateJsonInTree(tslintPath, (json, context) => { - if (Array.isArray(json.rules)) { - if (json.rules.length === 0) { - json.rules = {}; - } else { - context.logger.warn( - `"rules" in "${tslintPath}" is an array but should be an object.` - ); - } - } - return json; - }) - ); - } - }); - - rules.push(formatFiles()); - - return chain(rules); -} - -function showInfo(host: Tree, context: SchematicContext) { - context.logger.info(stripIndents` - Nx generated invalid tslint configurations in a prior version. - - These invalid configurations will be fixed. - `); -} - -export default function (): Rule { - return chain([showInfo, fixTslints]); -} diff --git a/packages/workspace/src/migrations/update-8-12-0/add-implicit-e2e-deps.spec.ts b/packages/workspace/src/migrations/update-8-12-0/add-implicit-e2e-deps.spec.ts deleted file mode 100644 index ab169c20affaaa..00000000000000 --- a/packages/workspace/src/migrations/update-8-12-0/add-implicit-e2e-deps.spec.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { createEmptyWorkspace } from '../../utils/testing-utils'; -import { callRule, runMigration } from '../../utils/testing'; -import { readJsonInTree, updateJsonInTree } from '../../utils/ast-utils'; - -describe('Update 8.12.0', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - tree = await callRule( - updateJsonInTree('workspace.json', (json) => { - json.projects['my-app'] = { - tags: [], - }; - json.projects['my-app-e2e'] = { - tags: [], - }; - json.projects['my-non-existent-app-e2e'] = { - tags: [], - }; - return json; - }), - tree - ); - }); - - it('should add implicit dependencies for e2e projects', async () => { - const result = await runMigration('add-implicit-e2e-deps', {}, tree); - - const workspaceJson = readJsonInTree(result, 'workspace.json'); - console.log(workspaceJson); - - expect(workspaceJson.projects['my-app-e2e']).toEqual({ - tags: [], - implicitDependencies: ['my-app'], - }); - - expect(workspaceJson.projects['my-non-existent-app-e2e']).toEqual({ - tags: [], - }); - }); - - it('should not add duplicate implicit dependencies for e2e projects', async () => { - tree = await callRule( - updateJsonInTree('workspace.json', (json) => { - json.projects['my-app-e2e'].implicitDependencies = ['my-app']; - return json; - }), - tree - ); - const result = await runMigration('add-implicit-e2e-deps', {}, tree); - - const workspaceJson = readJsonInTree(result, 'workspace.json'); - - expect(workspaceJson.projects['my-app-e2e']).toMatchObject({ - tags: [], - implicitDependencies: ['my-app'], - }); - - expect(workspaceJson.projects['my-non-existent-app-e2e']).toMatchObject({ - tags: [], - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-8-12-0/add-implicit-e2e-deps.ts b/packages/workspace/src/migrations/update-8-12-0/add-implicit-e2e-deps.ts deleted file mode 100644 index e6c219b690b5a3..00000000000000 --- a/packages/workspace/src/migrations/update-8-12-0/add-implicit-e2e-deps.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - chain, - Rule, - SchematicContext, - Tree, -} from '@angular-devkit/schematics'; -import { stripIndents } from '@angular-devkit/core/src/utils/literals'; - -import { updateJsonInTree } from '../../utils/ast-utils'; -import type { WorkspaceJsonConfiguration } from '@nrwl/devkit'; -import { formatFiles } from '@nrwl/workspace/src/utils/rules/format-files'; - -const addE2eImplicitDependencies: Rule = (tree: Tree) => - updateJsonInTree( - 'workspace.json', // ngcli-adapter should handle conversion of workspace file names - (json) => { - Object.keys(json.projects).forEach((proj) => { - const implicitE2eName = proj.replace(/-e2e$/, ''); - if (proj.endsWith('-e2e') && json.projects[implicitE2eName]) { - json.projects[proj].implicitDependencies = - json.projects[proj].implicitDependencies || []; - if ( - !json.projects[proj].implicitDependencies.includes(implicitE2eName) - ) { - json.projects[proj].implicitDependencies.push(implicitE2eName); - } - } - }); - return json; - } - ); - -function showInfo(host: Tree, context: SchematicContext) { - context.logger.info(stripIndents` - Nx no longer infers implicit dependencies between e2e projects and their source projects based on name. - - These dependencies have been added to nx.json. - `); -} - -export default function (): Rule { - return chain([showInfo, addE2eImplicitDependencies, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-8-12-0/update-enforce-boundary-lint-rule.spec.ts b/packages/workspace/src/migrations/update-8-12-0/update-enforce-boundary-lint-rule.spec.ts deleted file mode 100644 index 8f09e5a7b522c7..00000000000000 --- a/packages/workspace/src/migrations/update-8-12-0/update-enforce-boundary-lint-rule.spec.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { readJsonInTree } from '../../utils/ast-utils'; -import { runMigration } from '../../utils/testing'; -import { - _test_addWorkspaceFile, - WorkspaceFormat, -} from '@angular-devkit/core/src/workspace/core'; -import type { NxJsonConfiguration } from '@nrwl/devkit'; - -describe('Add update-enforce-boundary-lint rule', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - - // Not invoking the createEmptyWorkspace(..) here as I want to - // customize the linter being used - _test_addWorkspaceFile('workspace.json', WorkspaceFormat.JSON); - - tree.create( - '/workspace.json', - JSON.stringify({ version: 1, projects: {}, newProjectRoot: '' }) - ); - tree.create( - '/package.json', - JSON.stringify({ - name: 'test-name', - dependencies: {}, - devDependencies: {}, - }) - ); - tree.create( - '/nx.json', - JSON.stringify({ npmScope: 'proj' }) - ); - tree.create( - '/tsconfig.json', - JSON.stringify({ compilerOptions: { paths: {} } }) - ); - }); - - describe('when using tslint', () => { - beforeEach(() => { - tree.create( - '/tslint.json', - JSON.stringify({ - rules: { - 'nx-enforce-module-boundaries': [ - true, - { - npmScope: '<%= npmScope %>', - lazyLoad: [], - allow: [], - }, - ], - }, - }) - ); - }); - - it('should add the proper enforceBuildableLibDependency flag', async () => { - const result = await runMigration( - 'update-enforce-boundary-lint-rule', - {}, - tree - ); - - const lintContent = readJsonInTree(result, 'tslint.json'); - expect( - lintContent.rules['nx-enforce-module-boundaries'][1] - .enforceBuildableLibDependency - ).toBeTruthy(); - }); - }); - - describe('when using eslint', () => { - beforeEach(() => { - tree.create( - '/.eslintrc', - JSON.stringify({ - rules: { - '@nrwl/nx/enforce-module-boundaries': [ - true, - { - npmScope: '<%= npmScope %>', - lazyLoad: [], - allow: [], - }, - ], - }, - }) - ); - }); - - it('should add the proper enforceBuildableLibDependency flag', async () => { - const result = await runMigration( - 'update-enforce-boundary-lint-rule', - {}, - tree - ); - - const lintContent = readJsonInTree(result, '.eslintrc'); - expect( - lintContent.rules['@nrwl/nx/enforce-module-boundaries'][1] - .enforceBuildableLibDependency - ).toBeTruthy(); - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-8-12-0/update-enforce-boundary-lint-rule.ts b/packages/workspace/src/migrations/update-8-12-0/update-enforce-boundary-lint-rule.ts deleted file mode 100644 index 7aa470a99ea655..00000000000000 --- a/packages/workspace/src/migrations/update-8-12-0/update-enforce-boundary-lint-rule.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { chain, Rule, Tree } from '@angular-devkit/schematics'; -import { updateJsonInTree } from '../../utils/ast-utils'; - -export const addEnforceBuildablePackageTslintRule = (host: Tree) => { - if (host.exists('tslint.json')) { - return updateJsonInTree('tslint.json', (json) => { - const ruleName = 'nx-enforce-module-boundaries'; - const rule = ruleName in json.rules ? json.rules[ruleName] : null; - - if (Array.isArray(rule) && typeof rule[1] === 'object') { - // add flag - rule[1].enforceBuildableLibDependency = true; - } - - return json; - }); - } -}; - -export const addEnforceBuildablePackageEslintRule = (host: Tree) => { - if (host.exists('.eslintrc')) { - return updateJsonInTree('.eslintrc', (json) => { - const ruleName = '@nrwl/nx/enforce-module-boundaries'; - const rule = ruleName in json.rules ? json.rules[ruleName] : null; - - if (Array.isArray(rule) && typeof rule[1] === 'object') { - // add flag - rule[1].enforceBuildableLibDependency = true; - } - - return json; - }); - } -}; - -export default function (): Rule { - return chain([ - addEnforceBuildablePackageTslintRule, - addEnforceBuildablePackageEslintRule, - ]); -} diff --git a/packages/workspace/src/migrations/update-8-12-0/update-package-json-deps.spec.ts b/packages/workspace/src/migrations/update-8-12-0/update-package-json-deps.spec.ts deleted file mode 100644 index 895b6b814573bf..00000000000000 --- a/packages/workspace/src/migrations/update-8-12-0/update-package-json-deps.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { readJsonInTree } from '../../utils/ast-utils'; -import { runMigration } from '../../utils/testing'; -import { createEmptyWorkspace } from '../../utils/testing-utils'; - -describe('Update 8.12.0: package.json deps', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - }); - - describe('Update angular devkit deps', () => { - it('should update the Angular devkit core packages', async () => { - tree.overwrite( - 'package.json', - JSON.stringify({ - devDependencies: { - '@angular-devkit/architect': '0.803.14', - '@angular-devkit/build-angular': '0.803.14', - '@angular-devkit/build-ng-packagr': '0.803.14', - '@angular-devkit/build-optimizer': '0.803.14', - '@angular-devkit/build-webpack': '0.803.14', - '@angular-devkit/schematics': '8.3.14', - '@angular/cli': '8.3.14', - }, - }) - ); - - const result = await runMigration('update-package-json-deps', {}, tree); - - const packageJson = readJsonInTree(result, 'package.json'); - expect(packageJson.devDependencies['@angular-devkit/architect']).toEqual( - '0.803.23' - ); - expect( - packageJson.devDependencies['@angular-devkit/build-angular'] - ).toEqual('0.803.23'); - expect( - packageJson.devDependencies['@angular-devkit/build-ng-packagr'] - ).toEqual('0.803.23'); - expect( - packageJson.devDependencies['@angular-devkit/build-optimizer'] - ).toEqual('0.803.23'); - expect( - packageJson.devDependencies['@angular-devkit/build-webpack'] - ).toEqual('0.803.23'); - expect(packageJson.devDependencies['@angular-devkit/schematics']).toEqual( - '8.3.23' - ); - expect(packageJson.devDependencies['@angular/cli']).toEqual('8.3.23'); - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-8-12-0/update-package-json-deps.ts b/packages/workspace/src/migrations/update-8-12-0/update-package-json-deps.ts deleted file mode 100644 index d97223d39efe56..00000000000000 --- a/packages/workspace/src/migrations/update-8-12-0/update-package-json-deps.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { chain, Rule } from '@angular-devkit/schematics'; -import { formatFiles } from '@nrwl/workspace/src/utils/rules/format-files'; -import * as path from 'path'; -import { updatePackagesInPackageJson } from '../../utils/update-packages-in-package-json'; - -export default function (): Rule { - return chain([ - updatePackagesInPackageJson( - path.join(__dirname, '../../..', 'migrations.json'), - '8120' - ), - formatFiles(), - ]); -} diff --git a/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.spec.ts b/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.spec.ts deleted file mode 100644 index 254baf928a6f06..00000000000000 --- a/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { callRule, runMigration } from '../../utils/testing'; -import { - readJsonInTree, - updateJsonInTree, -} from '@nrwl/workspace/src/utils/ast-utils'; - -describe('Update 8.2.0', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createEmptyWorkspace(Tree.empty()); - tree = await callRule( - updateJsonInTree('workspace.json', (json) => { - json.projects['my-app'] = { - root: 'my-app', - architect: { - lint: { - builder: '@angular-devkit/build-angular:tslint', - options: { - tsConfig: ['my-app/tsconfig.json'], - exclude: ['**/node_modules/**'], - }, - }, - }, - }; - - return json; - }), - tree - ); - }); - - it('should add exclusions for files other than the project root', async () => { - const result = await runMigration('update-8.2.0', {}, tree); - const workspaceJson = readJsonInTree(tree, 'workspace.json'); - const project = workspaceJson.projects['my-app']; - expect(project.architect.lint).toEqual({ - builder: '@angular-devkit/build-angular:tslint', - options: { - tsConfig: ['my-app/tsconfig.json'], - exclude: ['**/node_modules/**', '!my-app/**/*'], - }, - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.ts b/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.ts deleted file mode 100644 index 926801ee81b37a..00000000000000 --- a/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { updateWorkspace } from '../../utils/workspace'; -import { join, JsonArray, normalize } from '@angular-devkit/core'; -import { formatFiles } from '@nrwl/workspace'; -import { chain } from '@angular-devkit/schematics'; - -const addExcludes = updateWorkspace((workspace) => { - workspace.projects.forEach((project) => { - project.targets.forEach((target) => { - if (target.builder !== '@angular-devkit/build-angular:tslint') { - return; - } - const exceptRootGlob = `!${join(normalize(project.root), '**/*')}`; - - if (!target.options.exclude) { - target.options.exclude = []; - } - - if (!(target.options.exclude as JsonArray).includes(exceptRootGlob)) { - (target.options.exclude as JsonArray).push(exceptRootGlob); - } - }); - }); -}); - -export default function () { - return chain([addExcludes, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-8-3-0/rename-lint.ts b/packages/workspace/src/migrations/update-8-3-0/rename-lint.ts deleted file mode 100644 index 060e60cacef06a..00000000000000 --- a/packages/workspace/src/migrations/update-8-3-0/rename-lint.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { updateJsonInTree } from '../../utils/ast-utils'; -import { formatFiles } from '@nrwl/workspace'; -import { chain } from '@angular-devkit/schematics'; - -const updateLint = updateJsonInTree('package.json', (json) => { - if ( - json.scripts && - json.scripts.lint && - json.scripts.lint.indexOf('nx lint') > -1 - ) { - json.scripts.lint = json.scripts.lint.replace( - 'nx lint', - 'nx workspace-lint' - ); - } - return json; -}); - -export default function () { - return chain([updateLint, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-8-3-0/update-8-3-0.spec.ts b/packages/workspace/src/migrations/update-8-3-0/update-8-3-0.spec.ts deleted file mode 100644 index d72988dc5faa84..00000000000000 --- a/packages/workspace/src/migrations/update-8-3-0/update-8-3-0.spec.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { readJsonInTree } from '@nrwl/workspace'; -import { - SchematicTestRunner, - UnitTestTree, -} from '@angular-devkit/schematics/testing'; -import { join } from 'path'; - -describe('Update 8.3.0', () => { - let tree: Tree; - let schematicRunner: SchematicTestRunner; - - beforeEach(() => { - tree = new UnitTestTree(Tree.empty()); - - tree.create( - 'package.json', - JSON.stringify({ - devDependencies: { - '@angular/cli': '8.0.0', - '@angular-devkit/build-angular': '^0.800.0', - '@angular-devkit/build-ng-packagr': '~0.800.0', - }, - }) - ); - - schematicRunner = new SchematicTestRunner( - '@nrwl/workspace', - join(__dirname, '../../../migrations.json') - ); - }); - - describe('Update Angular CLI', () => { - it('should update @angular/cli', async () => { - const result = await schematicRunner - .runSchematicAsync('update-angular-cli-8-1', {}, tree) - .toPromise(); - - expect( - readJsonInTree(result, 'package.json').devDependencies['@angular/cli'] - ).toEqual('8.1.1'); - }); - - it('should update @angular-devkit/build-angular', async () => { - const result = await schematicRunner - .runSchematicAsync('update-angular-cli-8-1', {}, tree) - .toPromise(); - - expect( - readJsonInTree(result, 'package.json').devDependencies[ - '@angular-devkit/build-angular' - ] - ).toEqual('^0.801.1'); - }); - - it('should update @angular-devkit/build-ng-packagr', async () => { - const result = await schematicRunner - .runSchematicAsync('update-angular-cli-8-1', {}, tree) - .toPromise(); - - expect( - readJsonInTree(result, 'package.json').devDependencies[ - '@angular-devkit/build-ng-packagr' - ] - ).toEqual('~0.801.1'); - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-8-3-0/update-cypress-to-34.ts b/packages/workspace/src/migrations/update-8-3-0/update-cypress-to-34.ts deleted file mode 100644 index a10b6efb81a9ac..00000000000000 --- a/packages/workspace/src/migrations/update-8-3-0/update-cypress-to-34.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { addInstallTask, formatFiles, updateJsonInTree } from '@nrwl/workspace'; -import { chain } from '@angular-devkit/schematics'; - -const updateCypress = updateJsonInTree('package.json', (json) => { - json.devDependencies = json.devDependencies || {}; - if (json.devDependencies['cypress']) { - json.devDependencies['cypress'] = '3.4.0'; - } - - return json; -}); - -export default function () { - return chain([updateCypress, addInstallTask(), formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-8-3-0/update-ng-cli-8-1.ts b/packages/workspace/src/migrations/update-8-3-0/update-ng-cli-8-1.ts deleted file mode 100644 index c5b7fb1289666b..00000000000000 --- a/packages/workspace/src/migrations/update-8-3-0/update-ng-cli-8-1.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - updateJsonInTree, - checkAndCleanWithSemver, - addInstallTask, -} from '@nrwl/workspace'; -import { chain } from '@angular-devkit/schematics'; -import { gt } from 'semver'; - -const updateCLI = updateJsonInTree('package.json', (json) => { - json.devDependencies = json.devDependencies || {}; - const cliVersion = json.devDependencies['@angular/cli']; - const cleanCliVersion = checkAndCleanWithSemver('@angular/cli', cliVersion); - - if (cleanCliVersion && gt(cleanCliVersion, '8.1.1')) { - return json; - } - - if (json['devDependencies']['@angular/cli']) { - json['devDependencies']['@angular/cli'] = '8.1.1'; - } - - if (json['devDependencies']['@angular-devkit/build-angular']) { - json['devDependencies']['@angular-devkit/build-angular'] = '^0.801.1'; - } - - if (json['devDependencies']['@angular-devkit/build-ng-packagr']) { - json['devDependencies']['@angular-devkit/build-ng-packagr'] = '~0.801.1'; - } - - return json; -}); - -export default function () { - return chain([updateCLI, addInstallTask()]); -} diff --git a/packages/workspace/src/migrations/update-8-4-0/add-nx-script.ts b/packages/workspace/src/migrations/update-8-4-0/add-nx-script.ts deleted file mode 100644 index 30c472675e75a9..00000000000000 --- a/packages/workspace/src/migrations/update-8-4-0/add-nx-script.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { updateJsonInTree } from '../../utils/ast-utils'; -import { chain } from '@angular-devkit/schematics'; -import { formatFiles } from '@nrwl/workspace'; - -const addNxScript = updateJsonInTree('package.json', (json) => { - if (json.scripts && !json.scripts.nx) { - json.scripts.nx = 'nx'; - } - return json; -}); - -export default function () { - return chain([addNxScript, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-8-5-0/fix-tsconfig-lib-json.ts b/packages/workspace/src/migrations/update-8-5-0/fix-tsconfig-lib-json.ts deleted file mode 100644 index 2b1be505d60750..00000000000000 --- a/packages/workspace/src/migrations/update-8-5-0/fix-tsconfig-lib-json.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Tree, SchematicContext, chain } from '@angular-devkit/schematics'; -import { readWorkspace, readJsonInTree } from '../../utils/ast-utils'; -import { formatFiles } from '@nrwl/workspace'; - -export default function () { - return chain([ - (host: Tree) => { - const config = readWorkspace(host); - - const configsToUpdate = []; - Object.keys(config.projects).forEach((name) => { - const project = config.projects[name]; - if ( - project.projectType === 'library' && - project.architect && - project.architect.test && - project.architect.test.builder === '@nrwl/jest:jest' && - project.architect.test.options && - project.architect.test.options.setupFile === - `${project.sourceRoot}/test-setup.ts` - ) { - configsToUpdate.push(`${project.root}/tsconfig.lib.json`); - } - }); - - configsToUpdate.forEach((config) => { - const tsconfig = readJsonInTree(host, config); - if (tsconfig.exclude && tsconfig.exclude[0] === 'src/test.ts') { - tsconfig.exclude[0] = 'src/test-setup.ts'; - host.overwrite(config, JSON.stringify(tsconfig)); - } - }); - }, - formatFiles(), - ]); -} diff --git a/packages/workspace/src/migrations/update-8-5-0/update-8-5-0.spec.ts b/packages/workspace/src/migrations/update-8-5-0/update-8-5-0.spec.ts deleted file mode 100644 index fe42a532ea0be4..00000000000000 --- a/packages/workspace/src/migrations/update-8-5-0/update-8-5-0.spec.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { join } from 'path'; -import { readJsonInTree } from '@nrwl/workspace'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { createLibWithTests } from '../../utils/testing'; - -describe('Update 8.5.0', () => { - let tree: Tree; - let schematicRunner: SchematicTestRunner; - - const jestBuilder = '@nrwl/jest:jest'; - const nonJestBuilder = 'something-else'; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - schematicRunner = new SchematicTestRunner( - '@nrwl/workspace', - join(__dirname, '../../../migrations.json') - ); - }); - - describe('When fixing tsconfig.lib.json files', () => { - const schematicName = 'fix-tsconfig-lib-json'; - - it('should not modify non jest projects', async () => { - const lib = 'non-jest-lib'; - const exclude = [`src/test.ts`, '**/*.spec.ts']; - - tree = await createLibWithTests(tree, lib, nonJestBuilder, 'test.ts'); - tree.create( - `/libs/${lib}/tsconfig.lib.json`, - JSON.stringify({ exclude }) - ); - - const result = await schematicRunner - .runSchematicAsync(schematicName, {}, tree) - .toPromise(); - - const tsconfigJson = readJsonInTree( - result, - `libs/${lib}/tsconfig.lib.json` - ); - expect(tsconfigJson.exclude).toEqual(exclude); - }); - - it('should modify untouched jest projects', async () => { - const lib = 'jest-lib'; - const exclude = [`src/test.ts`, '**/*.spec.ts']; - const expected = ['src/test-setup.ts', '**/*.spec.ts']; - - tree = await createLibWithTests(tree, lib, jestBuilder, 'test-setup.ts'); - tree.create( - `/libs/${lib}/tsconfig.lib.json`, - JSON.stringify({ exclude }) - ); - - const result = await schematicRunner - .runSchematicAsync(schematicName, {}, tree) - .toPromise(); - - const tsconfigJson = readJsonInTree( - result, - `libs/${lib}/tsconfig.lib.json` - ); - - expect(tsconfigJson.exclude).toEqual(expected); - }); - - it('should not touch modified jest projects', async () => { - const lib = 'modified-jest-lib'; - const exclude = [`src/test-modified.ts`, '**/*.spec.ts']; - - tree = await createLibWithTests( - tree, - lib, - jestBuilder, - 'test-modified.ts.ts' - ); - tree.create( - `/libs/${lib}/tsconfig.lib.json`, - JSON.stringify({ exclude }) - ); - - const result = await schematicRunner - .runSchematicAsync(schematicName, {}, tree) - .toPromise(); - - const tsconfigJson = readJsonInTree( - result, - `libs/${lib}/tsconfig.lib.json` - ); - expect(tsconfigJson.exclude).toEqual(exclude); - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-9-0-0/update-9-0-0.ts b/packages/workspace/src/migrations/update-9-0-0/update-9-0-0.ts deleted file mode 100644 index 89beb2d13d301e..00000000000000 --- a/packages/workspace/src/migrations/update-9-0-0/update-9-0-0.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { chain } from '@angular-devkit/schematics'; -import { formatFiles, updatePackagesInPackageJson } from '@nrwl/workspace'; -import { join } from 'path'; - -const updatePackages = updatePackagesInPackageJson( - join(__dirname, '../../../', 'migrations.json'), - '9.0.0' -); - -export default function () { - return chain([updatePackages, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-9-1-0/update-9-1-0.ts b/packages/workspace/src/migrations/update-9-1-0/update-9-1-0.ts deleted file mode 100644 index 5670f7c9a19a9b..00000000000000 --- a/packages/workspace/src/migrations/update-9-1-0/update-9-1-0.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { chain } from '@angular-devkit/schematics'; -import { formatFiles, updatePackagesInPackageJson } from '@nrwl/workspace'; -import { join } from 'path'; - -const updatePackages = updatePackagesInPackageJson( - join(__dirname, '../../../', 'migrations.json'), - '9.1.0' -); -export default function () { - return chain([updatePackages, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-9-1-0/update-lint-config.spec.ts b/packages/workspace/src/migrations/update-9-1-0/update-lint-config.spec.ts deleted file mode 100644 index 57708029d81e55..00000000000000 --- a/packages/workspace/src/migrations/update-9-1-0/update-lint-config.spec.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { chain, Tree } from '@angular-devkit/schematics'; -import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { callRule, runMigration } from '../../utils/testing'; -import { updateWorkspace } from '@nrwl/workspace/src/utils/workspace'; - -describe('Update 9.1.0', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - }); - - it('should update tslint.json', async () => { - tree = await callRule( - chain([ - updateWorkspace((workspace) => { - workspace.projects.add({ - name: 'proj1', - root: 'proj1', - architect: { - lint: { - builder: '@angular-devkit/build-angular:tslint', - }, - }, - }); - workspace.projects.add({ - name: 'proj2', - root: 'proj2', - architect: { - lint: { - builder: '@angular-devkit/build-angular:tslint', - }, - }, - }); - }), - updateJsonInTree('proj1/tslint.json', () => ({ - rules: {}, - })), - updateJsonInTree('proj2/tslint.json', () => ({ - rules: {}, - linterOptions: { - exclude: ['whatever'], - }, - })), - ]), - tree - ); - - const result = await runMigration('update-lint-config-9-1-0', {}, tree); - - expect(readJsonInTree(result, 'proj1/tslint.json')).toEqual({ - rules: {}, - linterOptions: { - exclude: ['!**/*'], - }, - }); - - expect(readJsonInTree(result, 'proj2/tslint.json')).toEqual({ - rules: {}, - linterOptions: { - exclude: ['!**/*', 'whatever'], - }, - }); - }); - - it('should update .eslintrc', async () => { - tree = await callRule( - chain([ - updateWorkspace((workspace) => { - workspace.projects.add({ - name: 'proj1', - root: 'proj1', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - config: 'proj1/.eslintrc', - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj2', - root: 'proj2', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - config: 'proj2/.eslintrc', - }, - }, - }, - }); - }), - updateJsonInTree('proj1/.eslintrc', () => ({ - rules: {}, - })), - updateJsonInTree('proj2/.eslintrc', () => ({ - rules: {}, - ignorePatterns: ['whatever'], - })), - ]), - tree - ); - - const result = await runMigration('update-lint-config-9-1-0', {}, tree); - - expect(readJsonInTree(result, 'proj1/.eslintrc')).toEqual({ - rules: {}, - ignorePatterns: ['!**/*'], - }); - - expect(readJsonInTree(result, 'proj2/.eslintrc')).toEqual({ - rules: {}, - ignorePatterns: ['!**/*', 'whatever'], - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-9-1-0/update-lint-config.ts b/packages/workspace/src/migrations/update-9-1-0/update-lint-config.ts deleted file mode 100644 index 708fc7e43eb390..00000000000000 --- a/packages/workspace/src/migrations/update-9-1-0/update-lint-config.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { chain, SchematicContext, Tree } from '@angular-devkit/schematics'; -import { formatFiles, readWorkspace, updateJsonInTree } from '@nrwl/workspace'; - -function updateLintConfigurations(host: Tree, context: SchematicContext) { - const workspaceJson = readWorkspace(host); - Object.values(workspaceJson.projects).forEach((config: any) => { - if (!config.architect || !config.architect.lint) return; - if (config.architect.lint.builder === '@nrwl/linter:lint') { - updateJson( - (json) => { - // Prefix it so that previously ignored files will override the whitelist. - json.ignorePatterns = ['!**/*', ...(json.ignorePatterns || [])]; - return json; - }, - config.architect.lint.options.config, - host, - context - ); - } - if ( - config.architect.lint.builder === '@angular-devkit/build-angular:tslint' - ) { - updateJson( - (json) => { - json.linterOptions = { - ...json.linterOptions, - // Prefix it so that previously ignored files will override the whitelist. - exclude: [ - '!**/*', - ...((json.linterOptions && json.linterOptions.exclude) || []), - ], - }; - return json; - }, - `${config.root}/tslint.json`, - host, - context - ); - } - }); -} - -function updateJson(visitor, path, host, context) { - try { - if (host.exists(path)) { - // In case tslint.json does not exist we don't want to create it. - updateJsonInTree(path, visitor)(host, context); - } - } catch { - context.logger.warn(`Could not update ${path}`); - } -} - -export default function () { - return chain([updateLintConfigurations, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-9-2-0/update-9-2-0.spec.ts b/packages/workspace/src/migrations/update-9-2-0/update-9-2-0.spec.ts deleted file mode 100644 index d6b507a2c31572..00000000000000 --- a/packages/workspace/src/migrations/update-9-2-0/update-9-2-0.spec.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace'; -import type { NxJsonConfiguration } from '@nrwl/devkit'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { callRule, runMigration } from '../../utils/testing'; - -describe('Update 9.2.0', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - }); - - describe('for projects with no tasks runner options', () => { - it('should add configuration for cacheable operations', async () => { - tree = await runMigration('update-9-2-0', {}, tree); - const nxJson = readJsonInTree(tree, 'nx.json'); - expect(nxJson.tasksRunnerOptions).toEqual({ - default: { - runner: '@nrwl/workspace/tasks-runners/default', - options: { - cacheableOperations: ['build', 'lint', 'test', 'e2e'], - }, - }, - }); - }); - }); - - describe('for projects with tasks runner options', () => { - describe('with @nrwl/workspace/src/tasks-runner/default-task-runner', () => { - it('should add configuration for cacheable operations', async () => { - tree = await callRule( - updateJsonInTree('nx.json', (json) => { - json.tasksRunnerOptions = { - default: { - runner: '@nrwl/workspace/src/tasks-runner/default-task-runner', - options: { - cacheableOperations: ['custom-operation'], - }, - }, - }; - - return json; - }), - tree - ); - tree = await runMigration('update-9-2-0', {}, tree); - const nxJson = readJsonInTree(tree, 'nx.json'); - expect(nxJson.tasksRunnerOptions).toEqual({ - default: { - runner: '@nrwl/workspace/tasks-runners/default', - options: { - cacheableOperations: [ - 'custom-operation', - 'build', - 'lint', - 'test', - 'e2e', - ], - }, - }, - }); - }); - }); - - describe('with @nrwl/workspace/src/tasks-runner/tasks-runner-v2', () => { - it('should add configuration for cacheable operations', async () => { - tree = await callRule( - updateJsonInTree('nx.json', (json) => { - json.tasksRunnerOptions = { - default: { - runner: '@nrwl/workspace/src/tasks-runner/tasks-runner-v2', - options: { - cacheableOperations: ['custom-operation'], - }, - }, - }; - - return json; - }), - tree - ); - tree = await runMigration('update-9-2-0', {}, tree); - const nxJson = readJsonInTree(tree, 'nx.json'); - expect(nxJson.tasksRunnerOptions).toEqual({ - default: { - runner: '@nrwl/workspace/tasks-runners/default', - options: { - cacheableOperations: [ - 'custom-operation', - 'build', - 'lint', - 'test', - 'e2e', - ], - }, - }, - }); - }); - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-9-2-0/update-9-2-0.ts b/packages/workspace/src/migrations/update-9-2-0/update-9-2-0.ts deleted file mode 100644 index 53732264eab245..00000000000000 --- a/packages/workspace/src/migrations/update-9-2-0/update-9-2-0.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { chain } from '@angular-devkit/schematics'; -import { - formatFiles, - updateJsonInTree, - updatePackagesInPackageJson, -} from '@nrwl/workspace'; -import { join } from 'path'; - -const updatePackages = updatePackagesInPackageJson( - join(__dirname, '../../../', 'migrations.json'), - '9.2.0' -); - -const addCacheableOperations = updateJsonInTree('nx.json', (nxJson) => { - nxJson.tasksRunnerOptions = nxJson.tasksRunnerOptions || {}; - - if (!nxJson.tasksRunnerOptions.default) { - nxJson.tasksRunnerOptions.default = { - runner: '@nrwl/workspace/tasks-runners/default', - options: { - cacheableOperations: ['build', 'lint', 'test', 'e2e'], - }, - }; - - return nxJson; - } else if ( - nxJson.tasksRunnerOptions.default && - (nxJson.tasksRunnerOptions.default.runner === - '@nrwl/workspace/src/tasks-runner/default-task-runner' || - nxJson.tasksRunnerOptions.default.runner === - '@nrwl/workspace/src/tasks-runner/tasks-runner-v2') - ) { - nxJson.tasksRunnerOptions.default.runner = - '@nrwl/workspace/tasks-runners/default'; - - nxJson.tasksRunnerOptions.default.options = - nxJson.tasksRunnerOptions.default.options || {}; - nxJson.tasksRunnerOptions.default.options.cacheableOperations = - nxJson.tasksRunnerOptions.default.options.cacheableOperations || []; - - const cacheableOperations = new Set( - nxJson.tasksRunnerOptions.default.options.cacheableOperations - ); - cacheableOperations.add('build'); - cacheableOperations.add('lint'); - cacheableOperations.add('test'); - cacheableOperations.add('e2e'); - - nxJson.tasksRunnerOptions.default.options.cacheableOperations = - Array.from(cacheableOperations); - - return nxJson; - } - - return nxJson; -}); - -export default function () { - return chain([updatePackages, addCacheableOperations, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-9-3-0/update-9-3-0.ts b/packages/workspace/src/migrations/update-9-3-0/update-9-3-0.ts deleted file mode 100644 index 5e26653ad64eea..00000000000000 --- a/packages/workspace/src/migrations/update-9-3-0/update-9-3-0.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { chain } from '@angular-devkit/schematics'; -import { formatFiles, updatePackagesInPackageJson } from '@nrwl/workspace'; -import { join } from 'path'; - -const updatePackages = updatePackagesInPackageJson( - join(__dirname, '../../../', 'migrations.json'), - '9.3.0' -); - -export default function () { - return chain([updatePackages, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-9-4-0/add-decorate-cli.spec.ts b/packages/workspace/src/migrations/update-9-4-0/add-decorate-cli.spec.ts deleted file mode 100644 index e85224c103558d..00000000000000 --- a/packages/workspace/src/migrations/update-9-4-0/add-decorate-cli.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { runMigration } from '../../utils/testing'; - -function createAngularCLIPoweredWorkspace() { - const tree = createEmptyWorkspace(Tree.empty()); - tree.delete('workspace.json'); - tree.create('angular.json', '{}'); - return tree; -} - -describe('Decorate Angular CLI to ensure computation caching', () => { - it('should add postinstall script and the file when used with Angular CLI', async () => { - const tree = createAngularCLIPoweredWorkspace(); - tree.overwrite('/package.json', JSON.stringify({ scripts: { ng: 'ng' } })); - const result = await runMigration('add-decorate-cli', {}, tree); - const packageJson = JSON.parse(result.read('/package.json').toString()); - expect(packageJson.scripts.postinstall).toEqual( - 'node ./decorate-angular-cli.js' - ); - expect(packageJson.scripts.ng).toEqual('nx'); - expect(result.exists('decorate-angular-cli.js')).toBeTruthy(); - }); - - it('should handle the case when postinstall script is already present', async () => { - const tree = createAngularCLIPoweredWorkspace(); - tree.overwrite( - '/package.json', - JSON.stringify({ scripts: { postinstall: 'echo 1' } }) - ); - const result = await runMigration('add-decorate-cli', {}, tree); - const packageJson = JSON.parse(result.read('/package.json').toString()); - expect(packageJson.scripts.postinstall).toEqual( - 'echo 1 && node ./decorate-angular-cli.js' - ); - }); - - it('should do nothing when used with Nx CLI', async () => { - const tree = createEmptyWorkspace(Tree.empty()); - const result = await runMigration('add-decorate-cli', {}, tree); - const packageJson = JSON.parse(result.read('/package.json').toString()); - expect(packageJson.scripts).toBeUndefined(); - expect(result.exists('decorate-angular-cli.js')).toBeFalsy(); - }); -}); diff --git a/packages/workspace/src/migrations/update-9-4-0/add-decorate-cli.ts b/packages/workspace/src/migrations/update-9-4-0/add-decorate-cli.ts deleted file mode 100644 index 45fa45b2b0c82d..00000000000000 --- a/packages/workspace/src/migrations/update-9-4-0/add-decorate-cli.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { chain, SchematicContext, Tree } from '@angular-devkit/schematics'; -import { formatFiles } from '../../utils/rules/format-files'; -import { readFileSync } from 'fs'; -import { updateJsonInTree } from '@nrwl/workspace'; -import { join as pathJoin } from 'path'; - -const decorateAngularClI = (host: Tree, context: SchematicContext) => { - if (host.exists('angular.json')) { - const decorateCli = readFileSync( - pathJoin( - __dirname as any, - '..', - '..', - 'generators', - 'utils', - 'decorate-angular-cli.js__tmpl__' - ) - ).toString(); - host.create('decorate-angular-cli.js', decorateCli); - updateJsonInTree('package.json', (json) => { - if ( - json.scripts && - json.scripts.postinstall && - !json.scripts.postinstall.includes('decorate-angular-cli.js') - ) { - // if exists, add execution of this script - json.scripts.postinstall += ' && node ./decorate-angular-cli.js'; - } else { - if (!json.scripts) json.scripts = {}; - // if doesn't exist, set to execute this script - json.scripts.postinstall = 'node ./decorate-angular-cli.js'; - } - if (json.scripts.ng) { - json.scripts.ng = 'nx'; - } - return json; - })(host, context); - } -}; - -export default function () { - return chain([decorateAngularClI, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-9-4-0/update-eslint-config.spec.ts b/packages/workspace/src/migrations/update-9-4-0/update-eslint-config.spec.ts deleted file mode 100644 index c551a2f3cb813a..00000000000000 --- a/packages/workspace/src/migrations/update-9-4-0/update-eslint-config.spec.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { readWorkspace } from '@nrwl/workspace'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { callRule, runMigration } from '../../utils/testing'; -import { updateWorkspace } from '@nrwl/workspace/src/utils/workspace'; - -describe('Update eslint config for 9.4.0', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - tree = await callRule( - updateWorkspace((workspace) => { - workspace.projects.add({ - name: 'proj1', - root: 'proj1', - architect: { - lint: { - builder: '@angular-devkit/build-angular:tslint', - options: { - config: 'proj1/tslint.json', - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj2', - root: 'proj2', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - linter: 'eslint', - config: 'proj2/.eslintrc', - }, - configurations: { - prod: { - linter: 'eslint', - config: 'proj2/.eslintrc', - }, - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj3', - root: 'proj3', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - linter: 'tslint', - config: 'proj3/tslint.json', - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj4', - root: 'proj4', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - linter: 'eslint', - config: 'proj4/.eslintrc.custom', - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj5', - root: 'proj5', - architect: { - lint: { - builder: '@nrwl/linter:lint', - }, - }, - }); - workspace.projects.add({ - name: 'proj6', - root: 'proj6', - }); - }), - tree - ); - }); - - it('should remove config builder option when using eslint', async () => { - const result = await runMigration('update-eslint-config', {}, tree); - - const json = readWorkspace(result); - - expect(json.projects.proj1.architect.lint.options.config).toMatch( - 'proj1/tslint.json' - ); - expect(json.projects.proj2.architect.lint.options.config).toBeUndefined(); - expect( - json.projects.proj2.architect.lint.configurations.prod.config - ).toBeUndefined(); - expect(json.projects.proj3.architect.lint.options.config).toMatch( - 'proj3/tslint.json' - ); - expect(json.projects.proj4.architect.lint.options.config).toMatch( - 'proj4/.eslintrc.custom' - ); - }); -}); diff --git a/packages/workspace/src/migrations/update-9-4-0/update-eslint-config.ts b/packages/workspace/src/migrations/update-9-4-0/update-eslint-config.ts deleted file mode 100644 index 910fc93e666389..00000000000000 --- a/packages/workspace/src/migrations/update-9-4-0/update-eslint-config.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { chain, SchematicContext, Tree } from '@angular-devkit/schematics'; -import { formatFiles } from '../../utils/rules/format-files'; -import { updateWorkspaceInTree } from '../../utils/ast-utils'; - -function removeEslintConfigOption(host: Tree, context: SchematicContext) { - return updateWorkspaceInTree((json) => { - Object.values(json.projects).forEach((project) => { - if (!project.architect) { - return; - } - Object.values(project.architect).forEach((target) => { - if (target.builder !== '@nrwl/linter:lint') { - return; - } - if (target?.options?.config === `${project.root}/.eslintrc`) { - delete target.options.config; - } - if (!target.configurations) { - return; - } - Object.values(target.configurations).forEach((options) => { - if (options.config === `${project.root}/.eslintrc`) { - delete options.config; - } - }); - }); - }); - return json; - }); -} - -export default function () { - return chain([removeEslintConfigOption, formatFiles()]); -} diff --git a/packages/workspace/src/migrations/update-9-4-0/update-linters-exclude.spec.ts b/packages/workspace/src/migrations/update-9-4-0/update-linters-exclude.spec.ts deleted file mode 100644 index 0992e661180537..00000000000000 --- a/packages/workspace/src/migrations/update-9-4-0/update-linters-exclude.spec.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { Tree } from '@angular-devkit/schematics'; -import { readWorkspace } from '@nrwl/workspace'; -import { createEmptyWorkspace } from '@nrwl/workspace/testing'; -import { callRule, runMigration } from '../../utils/testing'; -import { updateWorkspace } from '@nrwl/workspace/src/utils/workspace'; - -describe('Update eslint and tslint exclude pattern for 9.4.0', () => { - let tree: Tree; - - beforeEach(async () => { - tree = Tree.empty(); - tree = createEmptyWorkspace(tree); - tree = await callRule( - updateWorkspace((workspace) => { - workspace.projects.add({ - name: 'proj1', - root: 'apps/proj1', - architect: { - lint: { - builder: 'some-other-linter', - options: { - exclude: ['**/node_modules/**', '!apps/proj1/**'], - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj2', - root: 'apps/proj2', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - linter: 'eslint', - exclude: ['!apps/proj2/**', '**/node_modules/**'], - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj3', - root: 'apps/proj3', - architect: { - lint: { - builder: '@angular-devkit/build-angular:tslint', - options: { - linter: 'eslint', - exclude: ['!apps/proj3/**', '**/node_modules/**'], - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj4', - root: 'apps/proj4', - architect: { - lint: { - builder: '@angular-devkit/build-angular:tslint', - options: { - linter: 'tslint', - exclude: ['!apps/proj4/*', '**/node_modules/**'], - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj5', - root: 'apps/proj5', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - linter: 'tslint', - exclude: ['!apps/proj5/*', '**/node_modules/**'], - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj6', - root: 'libs/proj6', - architect: { - lint: { - builder: '@angular-devkit/build-angular:tslint', - options: { - linter: 'eslint', - exclude: [ - '**/node_modules/**', - 'libs/proj6/**', - '!libs/proj6/**', - ], - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj7', - root: 'libs/proj7', - architect: { - lint: { - builder: '@nrwl/linter:lint', - options: { - linter: 'eslint', - exclude: [ - '**/node_modules/**', - 'libs/proj7/**', - '!libs/proj7/**', - ], - }, - }, - }, - }); - workspace.projects.add({ - name: 'proj8', - root: 'proj8', - architect: { - lint: { - builder: '@nrwl/linter:lint', - }, - }, - }); - workspace.projects.add({ - name: 'proj9', - root: 'proj9', - }); - }), - tree - ); - }); - - it('should fix the exclude option when using tslint', async () => { - const result = await runMigration('update-linters-exclude', {}, tree); - - const json = readWorkspace(result); - - expect(json.projects.proj1.architect.lint.options.exclude).toEqual([ - '**/node_modules/**', - '!apps/proj1/**', - ]); - expect(json.projects.proj2.architect.lint.options.exclude).toEqual([ - '!apps/proj2/**/*', - '**/node_modules/**', - ]); - expect(json.projects.proj3.architect.lint.options.exclude).toEqual([ - '!apps/proj3/**/*', - '**/node_modules/**', - ]); - expect(json.projects.proj4.architect.lint.options.exclude).toEqual([ - '!apps/proj4/*', - '**/node_modules/**', - ]); - expect(json.projects.proj5.architect.lint.options.exclude).toEqual([ - '!apps/proj5/*', - '**/node_modules/**', - ]); - expect(json.projects.proj6.architect.lint.options.exclude).toEqual([ - '**/node_modules/**', - 'libs/proj6/**', - '!libs/proj6/**/*', - ]); - expect(json.projects.proj7.architect.lint.options.exclude).toEqual([ - '**/node_modules/**', - 'libs/proj7/**', - '!libs/proj7/**/*', - ]); - }); -}); diff --git a/packages/workspace/src/migrations/update-9-4-0/update-linters-exclude.ts b/packages/workspace/src/migrations/update-9-4-0/update-linters-exclude.ts deleted file mode 100644 index cd24862a75d4ee..00000000000000 --- a/packages/workspace/src/migrations/update-9-4-0/update-linters-exclude.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { chain, SchematicContext, Tree } from '@angular-devkit/schematics'; -import { formatFiles } from '../../utils/rules/format-files'; -import { updateBuilderConfig, updateWorkspace } from '../../utils/workspace'; -import { JsonArray } from '@angular-devkit/core'; - -function updateExcludePattern(host: Tree, context: SchematicContext) { - const builders = [ - '@nrwl/linter:lint', - '@angular-devkit/build-angular:tslint', - ]; - return updateBuilderConfig((options, target, project) => { - if (!options?.exclude) { - return options; - } - const faultyPattern = `!${project.root}/**`; - if ((options?.exclude as JsonArray).includes(faultyPattern)) { - const index: number = (options?.exclude as JsonArray).indexOf( - faultyPattern - ); - (options?.exclude as JsonArray)[index] = `${faultyPattern}/*`; - } - return options; - }, ...builders); -} - -export default function () { - return chain([updateExcludePattern, formatFiles()]); -} diff --git a/packages/workspace/src/tasks-runner/cache.ts b/packages/workspace/src/tasks-runner/cache.ts index ba51e87356b680..e2f2f4c9af9391 100644 --- a/packages/workspace/src/tasks-runner/cache.ts +++ b/packages/workspace/src/tasks-runner/cache.ts @@ -1,27 +1,22 @@ import { appRootPath } from '@nrwl/tao/src/utils/app-root'; import { Task } from '@nrwl/devkit'; -import { exists, lstat, readdir } from 'fs'; import { copy, - ensureDir, - ensureDirSync, mkdir, + mkdirSync, readFile, remove, unlink, writeFile, + pathExists, + lstat, + readdir, } from 'fs-extra'; import { dirname, join, resolve, sep } from 'path'; import { DefaultTasksRunnerOptions } from './default-tasks-runner'; import { spawn, exec } from 'child_process'; import { cacheDir } from '../utilities/cache-directory'; - -const util = require('util'); - -const readFileAsync = util.promisify(readFile); -const existsAsync = util.promisify(exists); -const lstatAsync = util.promisify(lstat); -const readdirAsync = util.promisify(readdir); +import { platform } from 'os'; export type CachedResult = { terminalOutput: string; @@ -36,7 +31,7 @@ export class Cache { cachePath = this.createCacheDir(); terminalOutputsDir = this.createTerminalOutputsDir(); latestOutputsHashesDir = this.ensureLatestOutputsHashesDir(); - useFsExtraToCopyAndRemove = false; + useFsExtraToCopyAndRemove = platform() === 'win32'; constructor(private readonly options: DefaultTasksRunnerOptions) {} @@ -106,11 +101,12 @@ export class Cache { await Promise.all( outputs.map(async (f) => { const src = join(this.root, f); - if (await existsAsync(src)) { + if (await pathExists(src)) { const cached = join(td, 'outputs', f); - const directory = resolve(cached, '..'); - await ensureDir(directory); - await this.copy(src, directory); + const isFile = (await lstat(src)).isFile(); + const directory = isFile ? dirname(cached) : cached; + await mkdir(directory, { recursive: true }); + await this.copy(src, cached); } }) ); @@ -144,12 +140,14 @@ export class Cache { await Promise.all( outputs.map(async (f) => { const cached = join(cachedResult.outputsPath, f); - if (await existsAsync(cached)) { + if (await pathExists(cached)) { + const isFile = (await lstat(cached)).isFile(); const src = join(this.root, f); await this.remove(src); - const directory = resolve(src, '..'); - await ensureDir(directory); - await this.copy(cached, directory); + // Ensure parent directory is created if src is a file + const directory = isFile ? resolve(src, '..') : src; + await mkdir(directory, { recursive: true }); + await this.copy(cached, src); } }) ); @@ -166,7 +164,7 @@ export class Cache { const hashFile = this.getFileNameWithLatestRecordedHashForOutput(output); try { await unlink(hashFile); - } catch (e) {} + } catch {} } } @@ -186,15 +184,15 @@ export class Cache { ); } - private copy(src: string, directory: string) { + private copy(src: string, directory: string): Promise { if (this.useFsExtraToCopyAndRemove) { return copy(src, directory); } return new Promise((res, rej) => { - exec(`cp -a "${src}" "${directory}"`, (error) => { + exec(`cp -a "${src}" "${dirname(directory)}"`, (error) => { if (!error) { - res(null); + res(); } else { this.useFsExtraToCopyAndRemove = true; copy(src, directory).then(res, rej); @@ -203,15 +201,15 @@ export class Cache { }); } - private remove(folder: string) { + private remove(folder: string): Promise { if (this.useFsExtraToCopyAndRemove) { return remove(folder); } - return new Promise((res, rej) => { + return new Promise((res, rej) => { exec(`rm -rf "${folder}"`, (error) => { if (!error) { - res(null); + res(); } else { this.useFsExtraToCopyAndRemove = true; remove(folder).then(res, rej); @@ -227,7 +225,7 @@ export class Cache { for (const output of outputs) { const hashFile = this.getFileNameWithLatestRecordedHashForOutput(output); try { - await ensureDir(dirname(hashFile)); + await mkdir(dirname(hashFile), { recursive: true }); await writeFile(hashFile, hash); } catch {} } @@ -248,12 +246,11 @@ export class Cache { output: string ): Promise { try { - return ( - await readFileAsync( - this.getFileNameWithLatestRecordedHashForOutput(output) - ) - ).toString(); - } catch (e) { + return await readFile( + this.getFileNameWithLatestRecordedHashForOutput(output), + 'utf-8' + ); + } catch { return null; } } @@ -267,24 +264,24 @@ export class Cache { const rootOutputPath = join(this.root, output); if ( - (await existsAsync(cacheOutputPath)) && - (await lstatAsync(cacheOutputPath)).isFile() + (await pathExists(cacheOutputPath)) && + (await lstat(cacheOutputPath)).isFile() ) { return ( - (await existsAsync(join(cachedResult.outputsPath, output))) && - !(await existsAsync(join(this.root, output))) + (await pathExists(join(cachedResult.outputsPath, output))) && + !(await pathExists(join(this.root, output))) ); } const haveDifferentAmountOfFiles = - (await existsAsync(cacheOutputPath)) && - (await existsAsync(rootOutputPath)) && - (await readdirAsync(cacheOutputPath)).length !== - (await readdirAsync(rootOutputPath)).length; + (await pathExists(cacheOutputPath)) && + (await pathExists(rootOutputPath)) && + (await readdir(cacheOutputPath)).length !== + (await readdir(rootOutputPath)).length; if ( - ((await existsAsync(cacheOutputPath)) && - !(await existsAsync(rootOutputPath))) || + ((await pathExists(cacheOutputPath)) && + !(await pathExists(rootOutputPath))) || haveDifferentAmountOfFiles ) { return true; @@ -304,7 +301,7 @@ export class Cache { const tdCommit = join(this.cachePath, `${task.hash}.commit`); const td = join(this.cachePath, task.hash); - if (await existsAsync(tdCommit)) { + if (await pathExists(tdCommit)) { const terminalOutput = await readFile( join(td, 'terminalOutput'), 'utf-8' @@ -312,7 +309,7 @@ export class Cache { let code = 0; try { code = Number(await readFile(join(td, 'code'), 'utf-8')); - } catch (e) {} + } catch {} return { terminalOutput, outputsPath: join(td, 'outputs'), @@ -324,19 +321,19 @@ export class Cache { } private createCacheDir() { - ensureDirSync(cacheDir); + mkdirSync(cacheDir, { recursive: true }); return cacheDir; } private createTerminalOutputsDir() { const path = join(this.cachePath, 'terminalOutputs'); - ensureDirSync(path); + mkdirSync(path, { recursive: true }); return path; } private ensureLatestOutputsHashesDir() { const path = join(this.cachePath, 'latestOutputsHashes'); - ensureDirSync(path); + mkdirSync(path, { recursive: true }); return path; } diff --git a/packages/workspace/src/tasks-runner/run-command.ts b/packages/workspace/src/tasks-runner/run-command.ts index 11e4c395287ada..2dd64775e4ebfd 100644 --- a/packages/workspace/src/tasks-runner/run-command.ts +++ b/packages/workspace/src/tasks-runner/run-command.ts @@ -84,11 +84,6 @@ export async function runCommand( terminalOutputStrategy: 'default' | 'hide-cached-output' | 'run-one', initiatingProject: string | null ) { - if (nxArgs.onlyFailed || nxArgs['only-failed']) { - output.warn({ - title: '--only-failed has been removed. Nx is executing all the tasks.', - }); - } const { tasksRunner, runnerOptions } = getRunner(nxArgs, nxJson); // Doing this for backwards compatibility, should be removed in v14 diff --git a/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.spec.ts b/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.spec.ts index 043e13566bdda1..a52355944219c4 100644 --- a/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.spec.ts +++ b/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.spec.ts @@ -1170,16 +1170,7 @@ Circular file chain: }); function createFile(f: string, deps?: string[]): FileData { - return { - file: f, - hash: '', - ...(deps && { - deps: deps.map((dep) => ({ - projectName: dep, - dependencyType: DependencyType.static, - })), - }), - }; + return { file: f, hash: '', ...(deps && { deps }) }; } function runRule( diff --git a/packages/workspace/src/utilities/buildable-libs-utils.ts b/packages/workspace/src/utilities/buildable-libs-utils.ts index 060efc49e73ef7..6e798d56aac008 100644 --- a/packages/workspace/src/utilities/buildable-libs-utils.ts +++ b/packages/workspace/src/utilities/buildable-libs-utils.ts @@ -110,7 +110,7 @@ function readTsConfigWithRemappedPaths( dependencies ); - if (process.env.NX_VERBOSE_LOGGING === 'true') { + if (process.env.NX_VERBOSE_LOGGING_PATH_MAPPINGS === 'true') { output.log({ title: 'TypeScript path mappings have been rewritten.', }); diff --git a/packages/workspace/src/utilities/cache-directory.ts b/packages/workspace/src/utilities/cache-directory.ts index 5801698cb12c54..96cd576df568b7 100644 --- a/packages/workspace/src/utilities/cache-directory.ts +++ b/packages/workspace/src/utilities/cache-directory.ts @@ -1,5 +1,5 @@ import { NxJsonConfiguration, readJsonFile } from '@nrwl/devkit'; -import { join } from 'path'; +import { join, isAbsolute } from 'path'; import { appRootPath } from '@nrwl/tao/src/utils/app-root'; function readCacheDirectoryProperty(root: string): string | undefined { @@ -17,10 +17,10 @@ function cacheDirectory(root: string, cacheDirectory: string) { cacheDirectory = cacheDirFromEnv; } if (cacheDirectory) { - if (cacheDirectory.startsWith('./')) { - return join(root, cacheDirectory); - } else { + if (isAbsolute(cacheDirectory)) { return cacheDirectory; + } else { + return join(root, cacheDirectory); } } else { return join(root, 'node_modules', '.cache', 'nx'); diff --git a/packages/workspace/src/utilities/output.ts b/packages/workspace/src/utilities/output.ts index ba95b8b166e8ae..bd7d363557633a 100644 --- a/packages/workspace/src/utilities/output.ts +++ b/packages/workspace/src/utilities/output.ts @@ -28,7 +28,9 @@ export interface CLISuccessMessageConfig { /** * Automatically disable styling applied by chalk if CI=true */ -if (isCI()) { +const forceColor = + process.env.FORCE_COLOR === '' || process.env.FORCE_COLOR === 'true'; +if (isCI() && !forceColor) { (chalk as any).level = 0; } diff --git a/packages/workspace/src/utilities/project-graph-utils.spec.ts b/packages/workspace/src/utilities/project-graph-utils.spec.ts index d49d973c6dc599..f3a252e5d08950 100644 --- a/packages/workspace/src/utilities/project-graph-utils.spec.ts +++ b/packages/workspace/src/utilities/project-graph-utils.spec.ts @@ -1,5 +1,5 @@ import { PackageJson } from '@nrwl/tao/src/shared/package-json'; -import { DependencyType, ProjectGraph } from '../core/project-graph'; +import { ProjectGraph } from '../core/project-graph'; import { getProjectNameFromDirPath, getSourceDirOfDependentProjects, @@ -52,17 +52,17 @@ describe('project graph utils', () => { dependencies: { 'demo-app': [ { - type: DependencyType.static, + type: 'static', source: 'demo-app', target: 'ui', }, { - type: DependencyType.static, + type: 'static', source: 'demo-app', target: 'npm:chalk', }, { - type: DependencyType.static, + type: 'static', source: 'demo-app', target: 'core', }, diff --git a/packages/workspace/src/utils/graph-utils.ts b/packages/workspace/src/utils/graph-utils.ts index 358a5e13a6181e..2846d326884ac8 100644 --- a/packages/workspace/src/utils/graph-utils.ts +++ b/packages/workspace/src/utils/graph-utils.ts @@ -116,19 +116,17 @@ export function checkCircularPath( export function findFilesInCircularPath( circularPath: ProjectGraphNode[] ): Array { - const filePathChain: string[][] = []; + const filePathChain = []; for (let i = 0; i < circularPath.length - 1; i++) { const next = circularPath[i + 1].name; - const files: Record = circularPath[i].data.files; + const files: FileData[] = circularPath[i].data.files; filePathChain.push( Object.keys(files) .filter( - (key) => - files[key].deps && - files[key].deps.some((dep) => dep.projectName === next) + (key) => files[key].deps && files[key].deps.indexOf(next) !== -1 ) - .map((key) => (files[key] as FileData).file) + .map((key) => files[key].file) ); } diff --git a/packages/workspace/src/utils/runtime-lint-utils.ts b/packages/workspace/src/utils/runtime-lint-utils.ts index 16fdfc3272dc42..22414dd3ec65a7 100644 --- a/packages/workspace/src/utils/runtime-lint-utils.ts +++ b/packages/workspace/src/utils/runtime-lint-utils.ts @@ -279,7 +279,7 @@ export function mapProjectGraphFiles( projectGraph.nodes as Record ).forEach(([name, node]) => { const files: Record = {}; - node.data.files.forEach(({ file, hash, deps }: FileData) => { + node.data.files.forEach(({ file, hash, deps }) => { files[removeExt(file)] = { file, hash, ...(deps && { deps }) }; }); const data = { ...node.data, files }; diff --git a/packages/workspace/src/utils/versions.ts b/packages/workspace/src/utils/versions.ts index 05ac5db6ae727e..ed8827a7b8b01e 100644 --- a/packages/workspace/src/utils/versions.ts +++ b/packages/workspace/src/utils/versions.ts @@ -1,9 +1,9 @@ export const nxVersion = '*'; -export const angularCliVersion = '~13.1.0'; -export const typescriptVersion = '~4.4.3'; +export const angularCliVersion = '~13.2.0'; +export const typescriptVersion = '~4.5.2'; export const prettierVersion = '^2.5.1'; export const tslintVersion = '~6.1.0'; -export const typescriptESLintVersion = '~5.3.0'; -export const eslintVersion = '8.2.0'; +export const typescriptESLintVersion = '~5.10.0'; +export const eslintVersion = '~8.7.0'; export const eslintConfigPrettierVersion = '8.1.0'; diff --git a/scripts/documentation/generate-devkit-documentation.ts b/scripts/documentation/generate-devkit-documentation.ts index 9daa360da24683..f2fac8d4420fe8 100644 --- a/scripts/documentation/generate-devkit-documentation.ts +++ b/scripts/documentation/generate-devkit-documentation.ts @@ -12,7 +12,7 @@ export function generateDevkitDocumentation() { execSync('nx build typedoc-theme', execSyncOptions); execSync( - `rm -rf docs/generated/api-nx-devkit && npx typedoc packages/devkit/index.ts packages/devkit/ngcli-adapter.ts --tsconfig packages/devkit/tsconfig.lib.json --out ./docs/generated/api-nx-devkit --hideBreadcrumbs true --disableSources --publicPath ../../generated/nx-devkit/ --theme dist/typedoc-theme/src/lib --readme none`, + `rm -rf docs/generated/api-nx-devkit && npx typedoc packages/devkit/index.ts packages/devkit/ngcli-adapter.ts --tsconfig packages/devkit/tsconfig.lib.json --out ./docs/generated/api-nx-devkit --hideBreadcrumbs true --disableSources --publicPath ../../nx-devkit/ --theme dist/typedoc-theme/src/lib --readme none`, execSyncOptions ); execSync( diff --git a/yarn.lock b/yarn.lock index e6a7d9c7b23b48..477ae6b3d13d4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -106,53 +106,53 @@ "@algolia/logger-common" "4.11.0" "@algolia/requester-common" "4.11.0" -"@ampproject/remapping@1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.2.tgz" - integrity sha512-SncaVxs+E3EdoA9xJgHfWPxZfowAgeIsd71VpqCKP6KNKm6s7zSqqvUc70UpKUFsrV3dAmy6qxHoIj5NG+3DiA== +"@ampproject/remapping@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-1.1.1.tgz#e220d0a5288b07afd6392a584d15921839e9da32" + integrity sha512-YVAcA4DKLOj296CF5SrQ8cYiMRiUGc2sqFpLxsDGWE34suHqhGP/5yMsDHKsrh8hs8I5TiRVXNwKPWQpX3iGjw== dependencies: - "@jridgewell/resolve-uri" "1.0.0" + "@jridgewell/resolve-uri" "^3.0.3" sourcemap-codec "1.4.8" -"@angular-devkit/architect@0.1301.1", "@angular-devkit/architect@~0.1301.0": - version "0.1301.1" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.1.tgz" - integrity sha512-3g1wlqihVEOhClsuSzyJYm8Sr4qc4IUDuOa45m8439bz9iQy2wZ3JUGTwX1NcpeLxmCDrgewuphIsW096HxYlg== +"@angular-devkit/architect@0.1302.0", "@angular-devkit/architect@~0.1302.0": + version "0.1302.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1302.0.tgz#31a2e6f0c744c5076c85b6db71e31665d7daef55" + integrity sha512-1CmVYvxyfvK/khTcDJwwXibm/z4upM2j5SDpwuIdaLx21E4oQPmHn+U/quT/jE5VI1zfZi2vfvIaSXn9XQzMiQ== dependencies: - "@angular-devkit/core" "13.1.1" + "@angular-devkit/core" "13.2.0" rxjs "6.6.7" -"@angular-devkit/build-angular@~13.1.0": - version "13.1.1" - resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.1.tgz" - integrity sha512-9+Ql4+rIt5CFfxLCZntCUdcVGl7mOi43/jpmYd31DKEUt4OPrqLoR5LsYepy3UR0+B0kNP6/PEOvaRiCb4t2GQ== - dependencies: - "@ampproject/remapping" "1.0.2" - "@angular-devkit/architect" "0.1301.1" - "@angular-devkit/build-webpack" "0.1301.1" - "@angular-devkit/core" "13.1.1" - "@babel/core" "7.16.0" - "@babel/generator" "7.16.0" - "@babel/helper-annotate-as-pure" "7.16.0" - "@babel/plugin-proposal-async-generator-functions" "7.16.4" - "@babel/plugin-transform-async-to-generator" "7.16.0" - "@babel/plugin-transform-runtime" "7.16.4" - "@babel/preset-env" "7.16.4" - "@babel/runtime" "7.16.3" - "@babel/template" "7.16.0" +"@angular-devkit/build-angular@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-13.2.0.tgz#5880890b5083a31f96d237ffee5f82af6fcc11a8" + integrity sha512-cHnm/P7uKJjKh2BCN8gnnd240J5z3IesQyRAx88kFSlL5sKCGyGoAYKAjU585/lllIXjtFXSR/S2d/cHg8ShKw== + dependencies: + "@ampproject/remapping" "1.1.1" + "@angular-devkit/architect" "0.1302.0" + "@angular-devkit/build-webpack" "0.1302.0" + "@angular-devkit/core" "13.2.0" + "@babel/core" "7.16.12" + "@babel/generator" "7.16.8" + "@babel/helper-annotate-as-pure" "7.16.7" + "@babel/plugin-proposal-async-generator-functions" "7.16.8" + "@babel/plugin-transform-async-to-generator" "7.16.8" + "@babel/plugin-transform-runtime" "7.16.10" + "@babel/preset-env" "7.16.11" + "@babel/runtime" "7.16.7" + "@babel/template" "7.16.7" "@discoveryjs/json-ext" "0.5.6" - "@ngtools/webpack" "13.1.1" + "@ngtools/webpack" "13.2.0" ansi-colors "4.1.1" babel-loader "8.2.3" babel-plugin-istanbul "6.1.1" browserslist "^4.9.1" cacache "15.3.0" circular-dependency-plugin "5.2.2" - copy-webpack-plugin "10.0.0" - core-js "3.19.3" - critters "0.0.15" + copy-webpack-plugin "10.2.1" + core-js "3.20.3" + critters "0.0.16" css-loader "6.5.1" - esbuild-wasm "0.14.2" + esbuild-wasm "0.14.14" glob "7.2.0" https-proxy-agent "5.0.0" inquirer "8.2.0" @@ -162,53 +162,53 @@ less-loader "10.2.0" license-webpack-plugin "4.0.0" loader-utils "3.2.0" - mini-css-extract-plugin "2.4.5" + mini-css-extract-plugin "2.5.3" minimatch "3.0.4" open "8.4.0" ora "5.4.1" parse5-html-rewriting-stream "6.0.1" - piscina "3.1.0" - postcss "8.4.4" + piscina "3.2.0" + postcss "8.4.5" postcss-import "14.0.2" postcss-loader "6.2.1" - postcss-preset-env "6.7.0" + postcss-preset-env "7.2.3" regenerator-runtime "0.13.9" - resolve-url-loader "4.0.0" + resolve-url-loader "5.0.0" rxjs "6.6.7" - sass "1.44.0" + sass "1.49.0" sass-loader "12.4.0" semver "7.3.5" - source-map-loader "3.0.0" + source-map-loader "3.0.1" source-map-support "0.5.21" - stylus "0.55.0" + stylus "0.56.0" stylus-loader "6.2.0" terser "5.10.0" text-table "0.2.0" tree-kill "1.2.2" tslib "2.3.1" - webpack "5.65.0" - webpack-dev-middleware "5.2.2" - webpack-dev-server "4.6.0" + webpack "5.67.0" + webpack-dev-middleware "5.3.0" + webpack-dev-server "4.7.3" webpack-merge "5.8.0" - webpack-subresource-integrity "5.0.0" + webpack-subresource-integrity "5.1.0" optionalDependencies: - esbuild "0.14.2" + esbuild "0.14.14" -"@angular-devkit/build-optimizer@~0.1301.0": - version "0.1301.1" - resolved "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1301.1.tgz" - integrity sha512-FND2kw6CwI6C0xqyBEWVUoisU+b/Oh4ZK5t0/f1JYqdE/vgXQsJAU5iHXdI7OoNo8WXN8K5OmQtoM599dvpNCw== +"@angular-devkit/build-optimizer@~0.1302.0": + version "0.1302.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1302.0.tgz#510c1154ac055111522547cf7fc4894e47269989" + integrity sha512-3V2vD95DTlcTwPUvNcQ5tWUSNCR06DnRdGiiweL7KljG0SBvydvgI+nd1hN0bpKhDlsjFE2YabdnkjbjGdA8bg== dependencies: source-map "0.7.3" tslib "2.3.1" - typescript "4.5.3" + typescript "4.5.5" -"@angular-devkit/build-webpack@0.1301.1", "@angular-devkit/build-webpack@~0.1301.0": - version "0.1301.1" - resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.1.tgz" - integrity sha512-drXKdqsM3uB4nII0pU8FtAI6cd96sza3r1mWl8mqJEkzgkYIGVK/2CekKdVe1AXAvEeQFVRDRMYXraMNpli/QQ== +"@angular-devkit/build-webpack@0.1302.0", "@angular-devkit/build-webpack@~0.1302.0": + version "0.1302.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1302.0.tgz#92e41035805fb99c1167fe2a9018a20e03025e76" + integrity sha512-x5BLdobF7c7j4W8frJuKM73ZYvPygjPN8vq1iKhsEraClqJG8cLiDwLEEFcrzIfmCHTX1o1o75sWC0FNln2LfQ== dependencies: - "@angular-devkit/architect" "0.1301.1" + "@angular-devkit/architect" "0.1302.0" rxjs "6.6.7" "@angular-devkit/core@13.0.2": @@ -223,12 +223,12 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@13.1.1", "@angular-devkit/core@~13.1.0": - version "13.1.1" - resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.1.tgz" - integrity sha512-tpOOzdrbrXG+BiJ/iKUX5VU5vBXN/n+H1EMThTwjgT11mqw2uvMj4sSRPvHUrrfxbLE9deuCDQEzmci71enn2w== +"@angular-devkit/core@13.2.0", "@angular-devkit/core@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-13.2.0.tgz#d7ee99ba40af70193a436a27ee1591a1ec754cd9" + integrity sha512-5+aV2W2QUazySMKusBuT2pi2qsXWpTHJG2x62mKGAy0lxzwG8l3if+WP3Uh85SQS+zqlHeKxEbmm9zNn8ZrzFg== dependencies: - ajv "8.8.2" + ajv "8.9.0" ajv-formats "2.1.1" fast-json-stable-stringify "2.1.0" magic-string "0.25.7" @@ -246,12 +246,12 @@ ora "5.4.1" rxjs "6.6.7" -"@angular-devkit/schematics@13.1.1", "@angular-devkit/schematics@~13.1.0": - version "13.1.1" - resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.1.tgz" - integrity sha512-uDE0vzjx7MyiJOul91MYMVpRPnAW5/o+pHcINx85wR6t4/RDQSH3UdBCCFxxwv1W9YZSR4kMiwi/sUYqPqbQMw== +"@angular-devkit/schematics@13.2.0", "@angular-devkit/schematics@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-13.2.0.tgz#656a5491be9f25e08faffd410c6ad9a75a82a8a2" + integrity sha512-EwoqDqLJH5YpWiLuQJwonnJu2bi4xQlyKXyUTuXsQ4gIsAPrg+ijyAe+F/brAtDLBj0sU7JHoC0U1yx2pZ7f1A== dependencies: - "@angular-devkit/core" "13.1.1" + "@angular-devkit/core" "13.2.0" jsonc-parser "3.0.0" magic-string "0.25.7" ora "5.4.1" @@ -296,15 +296,15 @@ "@angular-eslint/bundled-angular-compiler" "13.0.1" "@typescript-eslint/experimental-utils" "5.3.0" -"@angular/cli@~13.1.0": - version "13.1.1" - resolved "https://registry.npmjs.org/@angular/cli/-/cli-13.1.1.tgz" - integrity sha512-cdcl3UAhA2oQK8klDl9zt5SwScSg2F4VQDUQ8XsdApKIRlEfee1Xf7WXKsGpgAuojrFHMzDVWjAg/bOyIpioLg== +"@angular/cli@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-13.2.0.tgz#550841330a4eead75466f423c68a57be3640ec53" + integrity sha512-xrtClCucVSBwELG6zgaHrjC71p1rZOkwjF/HewnOFNjyjXSbWIO2y5d/6O2wxmNASoeStpiEU0zPpwDGhXiYpQ== dependencies: - "@angular-devkit/architect" "0.1301.1" - "@angular-devkit/core" "13.1.1" - "@angular-devkit/schematics" "13.1.1" - "@schematics/angular" "13.1.1" + "@angular-devkit/architect" "0.1302.0" + "@angular-devkit/core" "13.2.0" + "@angular-devkit/schematics" "13.2.0" + "@schematics/angular" "13.2.0" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.3.3" @@ -315,23 +315,23 @@ npm-pick-manifest "6.1.1" open "8.4.0" ora "5.4.1" - pacote "12.0.2" - resolve "1.20.0" + pacote "12.0.3" + resolve "1.22.0" semver "7.3.5" symbol-observable "4.0.0" uuid "8.3.2" -"@angular/common@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/common/-/common-13.1.0.tgz" - integrity sha512-bDuxl9N2fsaDrkNNuyNEdXMLwCCkjT9ru03QzP+b9RxmCBoUGeHD0uN61N5PMrsKq2RxB6jv4MJQJjT+jQqTsA== +"@angular/common@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-13.2.0.tgz#d5e311c14c90867d5da7d1d5f539813e338a7d5f" + integrity sha512-zyq3kscl5BoY+xxl4YOfbKP72xwzx/vKLE+2ougjPu2spm5KIllIAo/VrxVqIBrsGWT/4gs9pvIOqOdOfufxUA== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.0.tgz" - integrity sha512-AUfRF3+hqy2M1TFvi70OiC13Ew9IzzTAbZppGF+N7f5ZbhyuZyGNy/gs3BxlZC0Up5ZQo7GcMHwPxovLNvgFMA== +"@angular/compiler-cli@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-13.2.0.tgz#6eee613e86ec028a4a2b88a9dce45512eef7e862" + integrity sha512-IDX0X3GXjhUzd/cFyNZBG3eVqh6Y2W7MYvH9tXbZHcJ6vH9RkN2+zh/XQautVWy4EP33oQoDlsydfYKqbHr9TA== dependencies: "@babel/core" "^7.8.6" canonical-path "1.0.0" @@ -345,59 +345,59 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.0.tgz" - integrity sha512-l5qE3e+I/ogjVtXVHK0VoBOTE7N71dUcshI7Cvh5J7dFLKqbkYIr9xAP1D1tEVR6h9mzOVP5qD/M5ylR51rrOA== +"@angular/compiler@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-13.2.0.tgz#4112970f2bf6e347511de1e32459d717141750e3" + integrity sha512-TTA+Mn31vAwI4qiaH0h8DqNV3DWgZF+Q9G8Qqbw17k8Jf+B5CdLkMYBF8wbGegIdsEfo+6DebCp71W+aJxuSlw== dependencies: tslib "^2.3.0" -"@angular/core@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/core/-/core-13.1.0.tgz" - integrity sha512-eW+8dqGUqVbuzmFdyjhwizzH1FF9Mey5tvRZqzDSG1nTzlMgzQfrF/R0NEuqJdxUyjDFXiO4NyhUivFQ65CsdA== +"@angular/core@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-13.2.0.tgz#8db7b6f56eb2f211b72d943582061b247f39fe7f" + integrity sha512-mWRWbbZ6k00AicA/GrxmWKaw8upo77sRQz4tSYKpwVKt2TtCeoW8OkdYUpnmuVjxpF0bD6PtVc0e1fD6es/ElA== dependencies: tslib "^2.3.0" -"@angular/forms@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/forms/-/forms-13.1.0.tgz" - integrity sha512-sf9I8wftUk2+bTbdaVH2ioTXw5UfKNl0P4XFUoFxDuAzUxxlxN/ocY/VzevIEtQfoAwUp8eawnN9BkIXy+EMww== +"@angular/forms@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-13.2.0.tgz#67d505c09175d1ba809be721303316db7b0c60d4" + integrity sha512-aduXLuvqynDRRdb316yY1O5rdMQ2DKeNxu5P2FG1nkLQ3hqZvpiaUMhFyXvKDG3s0rV5e/PZs1cpg0Aqdfwevw== dependencies: tslib "^2.3.0" -"@angular/platform-browser-dynamic@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.0.tgz" - integrity sha512-rLFOHejw3ifJZapze0q/tHopFUZw+u/2biLFNffo+Z3UFsKI/PrBq9F+NVXnLdWzJNRY+NiI8ZFctJ9u4H39GQ== +"@angular/platform-browser-dynamic@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.2.0.tgz#68e24f5774e016283bc8dc864d4bb3f6abc895b9" + integrity sha512-VPL0uF/KWk+jBfkZwt60K6YbTFOvQzZbhwE4LttjjejstdvR0IMD3PtVDrdgIUWNfjikcCVN5Ds0GB6zZUb04Q== dependencies: tslib "^2.3.0" -"@angular/platform-browser@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.0.tgz" - integrity sha512-2c1OdOefpGVuIgFD0bojtEzPttXMC+iC8h/4fMpmW4v9JyRvTgPV2OPIpgfT25fTnGLQAJ19C8VG/S1J/JlXMw== +"@angular/platform-browser@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-13.2.0.tgz#d8a309c231dec646ab1dad28240466a00151b54b" + integrity sha512-FB9eKdRqpjopTFbea5JXnqSPFR7DZD4nepOSGnYttV9cVj4pABqx2A6FJCnyvPPUSTamODye/pNkGmzP2P1gcw== dependencies: tslib "^2.3.0" -"@angular/router@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/router/-/router-13.1.0.tgz" - integrity sha512-A/8O0GGLKENg5wxP7TFTPWmDtyMOL9qq65uxYQCyv46/2ra76FKteFg9UzcuuXPBiCAxD1wbL5kRF2MZlfrQ3Q== +"@angular/router@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-13.2.0.tgz#1bde95cc05195ed2c5cb1ec4f54233e48c2f33a3" + integrity sha512-8fWxcWT/LpaGhmXJ8xH+E7UObzt5IMGzK1sJGRu508y5tcbuBlTJt3yV97mCeUQ0g/E+2GEv6vuxY7OcfDaZow== dependencies: tslib "^2.3.0" -"@angular/service-worker@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/service-worker/-/service-worker-13.1.0.tgz" - integrity sha512-VcSgBYj6Jf634kZPxtpUdFX2FxfYBtfpsGjkwOfXlLrpU3NDl6xD72/2++MLVdgxfLwsjM9W9Aou58v/eJeE0g== +"@angular/service-worker@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/service-worker/-/service-worker-13.2.0.tgz#38e6eb423ef36528f3a7a162a726b0b47098a61d" + integrity sha512-ppxsckRObzMRlSYouGa5GCpbMlVCV7g70JPRYHK3UFTYrMLAEIsOhW9sAugEL72QfxgeXFKAjWdwQgBxwq7uLw== dependencies: tslib "^2.3.0" -"@angular/upgrade@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular/upgrade/-/upgrade-13.1.0.tgz" - integrity sha512-2uWwE/seEDx10hJUGJB04JqkT0V1yksJyYw7t05/ORo6DJTlv+F6AOlNpFbRng03EOh7e+qR/rsQOR6brG5K1Q== +"@angular/upgrade@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@angular/upgrade/-/upgrade-13.2.0.tgz#ce57628bd37783cff588458717283e154b7120d3" + integrity sha512-TFF/+Jun+14nr4ODhBWmJ3G1Ql7ywfr4lpONhgUd/55G+b0TnI/W624nPESqtDbp688Ec6w3Jl/teF74150BJg== dependencies: tslib "^2.3.0" @@ -427,11 +427,23 @@ dependencies: "@babel/highlight" "^7.16.0" +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": version "7.16.4" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz" integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== +"@babel/compat-data@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz" @@ -454,7 +466,28 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.16.0", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.6": +"@babel/core@7.16.12": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.6": version "7.16.0" resolved "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz" integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== @@ -496,7 +529,16 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@7.16.0", "@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.16.0", "@babel/generator@^7.4.0", "@babel/generator@^7.7.2": +"@babel/generator@7.16.8", "@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.16.0", "@babel/generator@^7.4.0", "@babel/generator@^7.7.2": version "7.16.0" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz" integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== @@ -514,7 +556,14 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@7.16.0", "@babel/helper-annotate-as-pure@^7.15.4", "@babel/helper-annotate-as-pure@^7.16.0": +"@babel/helper-annotate-as-pure@7.16.7", "@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-annotate-as-pure@^7.15.4", "@babel/helper-annotate-as-pure@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz" integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== @@ -537,6 +586,14 @@ "@babel/helper-explode-assignable-expression" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3": version "7.16.3" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz" @@ -547,6 +604,16 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz" @@ -559,6 +626,19 @@ "@babel/helper-replace-supers" "^7.16.0" "@babel/helper-split-export-declaration" "^7.16.0" +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-class-features-plugin@^7.16.5": version "7.16.5" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz" @@ -580,6 +660,14 @@ "@babel/helper-annotate-as-pure" "^7.16.0" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^4.7.1" + "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz" @@ -608,6 +696,20 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-environment-visitor@^7.16.5": version "7.16.5" resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz" @@ -615,6 +717,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz" @@ -622,6 +731,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-function-name@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz" @@ -631,6 +747,15 @@ "@babel/template" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-get-function-arity@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz" @@ -638,6 +763,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-hoist-variables@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz" @@ -645,6 +777,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-member-expression-to-functions@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz" @@ -659,6 +798,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.15.4", "@babel/helper-module-imports@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz" @@ -666,6 +812,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz" @@ -694,6 +847,20 @@ "@babel/traverse" "^7.16.5" "@babel/types" "^7.16.0" +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-optimise-call-expression@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz" @@ -701,6 +868,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz" @@ -716,6 +890,11 @@ resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz" integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ== +"@babel/helper-plugin-utils@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + "@babel/helper-remap-async-to-generator@^7.16.0", "@babel/helper-remap-async-to-generator@^7.16.4": version "7.16.4" resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz" @@ -734,6 +913,15 @@ "@babel/helper-wrap-function" "^7.16.5" "@babel/types" "^7.16.0" +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + "@babel/helper-replace-supers@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz" @@ -755,6 +943,17 @@ "@babel/traverse" "^7.16.5" "@babel/types" "^7.16.0" +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-simple-access@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz" @@ -762,6 +961,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz" @@ -776,16 +982,33 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + "@babel/helper-wrap-function@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz" @@ -806,6 +1029,16 @@ "@babel/traverse" "^7.16.5" "@babel/types" "^7.16.0" +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + "@babel/helpers@^7.12.5", "@babel/helpers@^7.16.0": version "7.16.3" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz" @@ -824,6 +1057,15 @@ "@babel/traverse" "^7.16.5" "@babel/types" "^7.16.0" +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz" @@ -833,11 +1075,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.5", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.15.0", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.4.3", "@babel/parser@^7.7.2": version "7.16.4" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz" integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== +"@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + "@babel/parser@^7.16.5": version "7.16.6" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz" @@ -850,6 +1106,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz" @@ -859,7 +1122,25 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.0" -"@babel/plugin-proposal-async-generator-functions@7.16.4", "@babel/plugin-proposal-async-generator-functions@^7.16.4": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@7.16.8", "@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-async-generator-functions@^7.16.4": version "7.16.4" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz" integrity sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg== @@ -893,6 +1174,14 @@ "@babel/helper-create-class-features-plugin" "^7.16.5" "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-proposal-class-static-block@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz" @@ -911,6 +1200,15 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-proposal-decorators@^7.12.12", "@babel/plugin-proposal-decorators@^7.14.5": version "7.16.4" resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.4.tgz" @@ -936,6 +1234,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-default-from@^7.12.1": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.0.tgz" @@ -960,6 +1266,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz" @@ -976,6 +1290,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-proposal-logical-assignment-operators@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz" @@ -992,6 +1314,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz" @@ -1008,6 +1338,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz" @@ -1024,6 +1362,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz" @@ -1055,6 +1401,17 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.16.5" +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz" @@ -1071,6 +1428,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz" @@ -1089,6 +1454,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz" @@ -1097,6 +1471,14 @@ "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-proposal-private-methods@^7.16.5": version "7.16.5" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.5.tgz" @@ -1125,6 +1507,16 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz" @@ -1141,6 +1533,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-proposal-unicode-property-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" @@ -1316,7 +1716,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" -"@babel/plugin-transform-async-to-generator@7.16.0", "@babel/plugin-transform-async-to-generator@^7.16.0": +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@7.16.8", "@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + +"@babel/plugin-transform-async-to-generator@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz" integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== @@ -1348,6 +1764,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz" @@ -1362,6 +1785,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz" @@ -1389,6 +1819,20 @@ "@babel/helper-split-export-declaration" "^7.16.0" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz" @@ -1403,6 +1847,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz" @@ -1417,6 +1868,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz" @@ -1433,6 +1891,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-dotall-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-duplicate-keys@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz" @@ -1447,6 +1913,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz" @@ -1463,6 +1936,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.5" "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-flow-strip-types@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.0.tgz" @@ -1485,6 +1966,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-function-name@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz" @@ -1501,6 +1989,15 @@ "@babel/helper-function-name" "^7.16.0" "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-literals@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz" @@ -1515,6 +2012,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-member-expression-literals@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz" @@ -1529,6 +2033,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-modules-amd@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz" @@ -1547,6 +2058,15 @@ "@babel/helper-plugin-utils" "^7.16.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz" @@ -1567,6 +2087,16 @@ "@babel/helper-simple-access" "^7.16.0" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz" @@ -1589,6 +2119,17 @@ "@babel/helper-validator-identifier" "^7.15.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz" @@ -1605,6 +2146,14 @@ "@babel/helper-module-transforms" "^7.16.5" "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz" @@ -1619,6 +2168,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.0" +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/plugin-transform-new-target@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz" @@ -1633,6 +2189,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-object-super@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz" @@ -1649,6 +2212,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/helper-replace-supers" "^7.16.5" +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.0", "@babel/plugin-transform-parameters@^7.16.3": version "7.16.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz" @@ -1663,6 +2234,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-property-literals@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz" @@ -1677,6 +2255,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-constant-elements@^7.14.5": version "7.16.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.5.tgz" @@ -1731,6 +2316,13 @@ dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + dependencies: + regenerator-transform "^0.14.2" + "@babel/plugin-transform-reserved-words@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz" @@ -1745,7 +2337,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" -"@babel/plugin-transform-runtime@7.16.4", "@babel/plugin-transform-runtime@^7.15.0": +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-runtime@7.16.10": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz#53d9fd3496daedce1dd99639097fa5d14f4c7c2c" + integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + semver "^6.3.0" + +"@babel/plugin-transform-runtime@^7.15.0": version "7.16.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz" integrity sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A== @@ -1771,6 +2382,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz" @@ -1787,6 +2405,14 @@ "@babel/helper-plugin-utils" "^7.16.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-transform-sticky-regex@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz" @@ -1801,6 +2427,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz" @@ -1815,6 +2448,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-typeof-symbol@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz" @@ -1829,6 +2469,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-typescript@^7.16.0": version "7.16.1" resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz" @@ -1852,6 +2499,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.5" +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-unicode-regex@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz" @@ -1868,7 +2522,95 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.16.5" -"@babel/preset-env@7.16.4", "@babel/preset-env@^7.12.11", "@babel/preset-env@^7.15.0": +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" + semver "^6.3.0" + +"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.15.0": version "7.16.4" resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz" integrity sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA== @@ -2095,14 +2837,30 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@7.16.3", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.16.3" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz" integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@7.16.0", "@babel/template@^7.12.7", "@babel/template@^7.16.0", "@babel/template@^7.3.3", "@babel/template@^7.4.0": +"@babel/template@7.16.7", "@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/template@^7.12.7", "@babel/template@^7.16.0", "@babel/template@^7.3.3", "@babel/template@^7.4.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz" integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== @@ -2126,6 +2884,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.16.5": version "7.16.5" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz" @@ -2158,6 +2932,14 @@ "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" +"@babel/types@^7.16.7", "@babel/types@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz" @@ -2223,31 +3005,6 @@ resolved "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@cypress/request@2.88.9": - version "2.88.9" - resolved "https://registry.npmjs.org/@cypress/request/-/request-2.88.9.tgz" - integrity sha512-6md3dtAd3DXfTEXFb2Yde3TSaqpYsSBw3a1VFwAC9Fscu2B0DtY2Venu35csZyJj09XNkPMGRoE4ZXUdtkI+zg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.3.6" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - "@cypress/request@^2.88.10": version "2.88.10" resolved "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz" @@ -2426,14 +3183,14 @@ ts-node "^9" tslib "^2" -"@eslint/eslintrc@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz" - integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.0.0" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" @@ -2486,18 +3243,18 @@ resolved "https://registry.npmjs.org/@heroicons/react/-/react-1.0.5.tgz" integrity sha512-UDMyLM2KavIu2vlWfMspapw9yii7aoLwzI2Hudx4fyoPwfKfxU8r3cL8dEBXOjcLG0/oOONZzbT14M1HoNtEcg== -"@humanwhocodes/config-array@^0.6.0": - version "0.6.0" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz" - integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e" + integrity sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@hutson/parse-repository-url@^3.0.0": @@ -2767,10 +3524,10 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jridgewell/resolve-uri@1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz" - integrity sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA== +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.3.tgz#b80093f4edbb5490c49746231513669c8f518acb" + integrity sha512-fuIOnc81C5iRNevb/XPiM8Khp9bVjreydRQ37rt0C/dY0PAW1DRvEM3WrKX/5rStS5lbgwS0FCgqSndh9tvK5w== "@mdx-js/loader@^1.6.22": version "1.6.22" @@ -3044,10 +3801,10 @@ dependencies: tslib "^2.0.0" -"@ngtools/webpack@13.1.1": - version "13.1.1" - resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.1.tgz" - integrity sha512-TGCuscGFNHPoXScswuj9UxNv8E+A/PXs5XH8cyTtbkmlpBec1EShnaUTdDP5nhykjjaWzd3TLChlp9DinE+Ctg== +"@ngtools/webpack@13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-13.2.0.tgz#9e1b9f66007033cf1fd58345b364773ce090cb10" + integrity sha512-dQKPsEsST/HSBYtC75E0ARI1zVsW65h/NYzcAwtOd8DKFmlj8EZMqKC4KwcJ/EKlwR1PN12nBZhuQ1HUVH8Vtg== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -3135,68 +3892,69 @@ node-gyp "^8.2.0" read-package-json-fast "^2.0.1" -"@nrwl/cli@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-13.5.0-rc.1.tgz#d6c9b7da824d5446ba00488c0f9af156c2a5dc53" - integrity sha512-bFT3ohOFwaaNmRMfXfxf6wNyTbq7GczDjomht6FHds8xcT7869vxGM7EZG/cypu8HxDOyP3vMOcT0Hw2nQYJFg== +"@nrwl/cli@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-13.7.1.tgz#da23bade4c8cf2dec0d122d0979302dd2e5d4330" + integrity sha512-UfupcHb0P2/yvNs/TjPM6uQyH9nZYNySPqTL1tV9ItO8vPm4YnO3jd+NrO3WWzrBCZVfwX8LHZ2PTtBGkCA01w== dependencies: - "@nrwl/tao" "13.5.0-rc.1" + "@nrwl/tao" "13.7.1" chalk "4.1.0" enquirer "~2.3.6" v8-compile-cache "2.3.0" yargs-parser "20.0.0" -"@nrwl/cypress@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-13.5.0-rc.1.tgz#96e96ec78fa2a7d8115efa0ae17737da4aa9a307" - integrity sha512-G+VhVTHNly2ukpMeW5FMvHAQ54cGR3VTGaBfSlkh7JzZKK0Q2+TWGXDI5sEGywKAFJJX/BfWmJ7j+2VVnvdhcA== +"@nrwl/cypress@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-13.7.1.tgz#a5bf3b935a1c31fcea26b27c183977f7e037f9da" + integrity sha512-xt27D8q9sciH+T1WVlqGf2MR6FZcCkCd9i1KGVlpW3WyyhOVtAetkeYBf9vu7xNbQkppNCi2IkdJWiiPWWVfIw== dependencies: "@cypress/webpack-preprocessor" "^5.9.1" - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/linter" "13.7.1" + "@nrwl/workspace" "13.7.1" chalk "4.1.0" enhanced-resolve "^5.8.3" fork-ts-checker-webpack-plugin "6.2.10" rxjs "^6.5.4" ts-loader "^9.2.6" tsconfig-paths "^3.9.0" - tsconfig-paths-webpack-plugin "3.4.1" + tsconfig-paths-webpack-plugin "3.5.2" tslib "^2.3.0" webpack-node-externals "^3.0.0" -"@nrwl/devkit@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-13.5.0-rc.1.tgz#d4e46044823b814ce613f8908508e4d38fb96104" - integrity sha512-IQB6qbahj/Drx3CZibUp53OTQp7c799aKuZIf8xCUcz2N37RsxdZOCQP/kfTWnmkiONPYrr9+uWYE59RztcKEQ== +"@nrwl/devkit@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-13.7.1.tgz#11a1cab83bcaf6dcfd5de45d1c658258da070210" + integrity sha512-AAwDbBddQEq90UG8trQg74eN6x60Pc7L8wCOLiRQ/shFCdD93boODlqEFy8Ae6bH1E4xb6hUldeqjcm/yFkOMg== dependencies: - "@nrwl/tao" "13.5.0-rc.1" + "@nrwl/tao" "13.7.1" ejs "^3.1.5" ignore "^5.0.4" rxjs "^6.5.4" semver "7.3.4" tslib "^2.3.0" -"@nrwl/eslint-plugin-nx@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-13.5.0-rc.1.tgz#85fa2e353a6484eac360c027f8d36f9eb1ad5600" - integrity sha512-BOKRL/GJEoMYAakbOeB14YkXNf7PrHANIMdZALat/QtYdmEYoj5hi718Me5t0r87YSqgOXTjVRrwAZpExgE8ew== +"@nrwl/eslint-plugin-nx@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-13.7.1.tgz#4433c1de21ddc6b39fe723b1780bfcca6e12d9b5" + integrity sha512-lJKMDU9UvKOL7Ei+guEAvAXV134/UYpQ5N5BzCd1++jy/TmVeHLAzEIXhF3mvq0hXecfLPrAcsgVyxnY4OW3eg== dependencies: - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" - "@typescript-eslint/experimental-utils" "~5.3.0" + "@nrwl/devkit" "13.7.1" + "@nrwl/workspace" "13.7.1" + "@swc-node/register" "^1.4.2" + "@typescript-eslint/experimental-utils" "~5.10.0" + chalk "4.1.0" confusing-browser-globals "^1.0.9" - ts-node "^9.1.1" tsconfig-paths "^3.9.0" -"@nrwl/jest@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-13.5.0-rc.1.tgz#374f30daf220cffc7ef6e3e2e19444c3ad4ee278" - integrity sha512-zTDfZHjPAcoV99z1tOrwNJ/S85GGH7RHStMwqyQRtmPNqhjlwsCEGf/pnSFj4mER6MKsXr4Da9pN31VmMkUOsQ== +"@nrwl/jest@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-13.7.1.tgz#451c402ea8010d21015a773b3ce8bb55e7801f32" + integrity sha512-slsEaPaxythqME3BLeiUPk1obx8IpsgsDF/layg0y3+uKXpcs2feBoE+PQEJS5aM8lrdfhx28rxZ0X94d2+vDw== dependencies: "@jest/reporters" "27.2.2" "@jest/test-result" "27.2.2" - "@nrwl/devkit" "13.5.0-rc.1" + "@nrwl/devkit" "13.7.1" chalk "4.1.0" identity-obj-proxy "3.0.0" jest-config "27.2.2" @@ -3206,15 +3964,15 @@ rxjs "^6.5.4" tslib "^2.3.0" -"@nrwl/js@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-13.5.0-rc.1.tgz#78e11960d8bd3d171904a05799df0004aa6b9094" - integrity sha512-zt8Toj2WNn6mEv2T4fnOUB74WM8jQYP8HsK4ZvdvIwn31zlhjACUh5vDixTYiG6EljgXKo5h/yCUll9CbS6D3Q== +"@nrwl/js@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-13.7.1.tgz#0c9060e8268e497daa47c219ca4253d0bb9981f7" + integrity sha512-/W21giNXsft05MnMvhg9rs1dlP0avWfwe5rqDPNPmGCHsYaqZt18g/N5xyBE01fs97/XgBFTlvmTte8rtS5XDg== dependencies: - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/jest" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/jest" "13.7.1" + "@nrwl/linter" "13.7.1" + "@nrwl/workspace" "13.7.1" "@parcel/watcher" "2.0.4" chalk "4.1.0" fast-glob "^3.2.7" @@ -3227,30 +3985,30 @@ source-map-support "0.5.19" tree-kill "1.2.2" -"@nrwl/linter@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-13.5.0-rc.1.tgz#4dd42c237cab2ab1e9012f420ac1994adb46452a" - integrity sha512-G+VGQpNyS0dGJ+jHyS3WEonvIYYpEMxEou0tBSi2ldkA/K0MGM+CU1DNeH+aYhyHABwT1cIroV3SlfFpHL+Xzg== +"@nrwl/linter@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-13.7.1.tgz#dad363709d30a82d74d0d211790b3c867e14e8ac" + integrity sha512-j4vk0O3WqWwXMJnX78B97irZmce1aQblWI/3N45MsrUjYjb2Ow3mGGs2GZMZv5aiOnijpERb3Pl80UaLm9Vo0Q== dependencies: - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/jest" "13.5.0-rc.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/jest" "13.7.1" "@phenomnomnominal/tsquery" "4.1.1" tmp "~0.2.1" tslib "^2.3.0" -"@nrwl/next@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-13.5.0-rc.1.tgz#8217f55b3ea41e10150b0d4e6c91de0e272636ce" - integrity sha512-wekLeQHnvdo5s/v/ckZIteSg9V26sC5UtkxoQRVCsd/pWCWp3V94LC2O1+pdU61jQxwLah4bUnY9Ovyt7NmCag== +"@nrwl/next@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-13.7.1.tgz#cfbff56f6783eff6558c3123403fbfa07149abe5" + integrity sha512-pdLjqUoEBHgSCmYIbpxZUStAJ0vypgaB8fmRoz21K3mXwlnlKlyhDjIvB1q1FxWweArGWJrNB5hXEgust22xTw== dependencies: "@babel/plugin-proposal-decorators" "^7.14.5" - "@nrwl/cypress" "13.5.0-rc.1" - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/jest" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" - "@nrwl/react" "13.5.0-rc.1" - "@nrwl/web" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" + "@nrwl/cypress" "13.7.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/jest" "13.7.1" + "@nrwl/linter" "13.7.1" + "@nrwl/react" "13.7.1" + "@nrwl/web" "13.7.1" + "@nrwl/workspace" "13.7.1" "@svgr/webpack" "^6.1.2" chalk "4.1.0" eslint-config-next "^12.0.0" @@ -3260,31 +4018,31 @@ url-loader "^4.1.1" webpack-merge "^5.8.0" -"@nrwl/node@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/node/-/node-13.5.0-rc.1.tgz#a178a765d36e9ac0b8732832b95268cffdd5d107" - integrity sha512-iULzXXuA09983oCmICtYxuZPNI3rxsOO3UIDBNL0KLmnNoHYUz2R49RU4H8wXsfT2bWNpdIrhKqKXsy9VTJNIw== +"@nrwl/node@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/node/-/node-13.7.1.tgz#7ad188c658d7f77208b22328441bb9952e8bbc8a" + integrity sha512-W1usrMM5eebFdp8++jwR4Ct2zN2acqiTKMlE9jWLjxwKSvahjpDbv0CkZVtRdtGlgtHW6MJmk5/HgNRoLTPKfQ== dependencies: - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/jest" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/jest" "13.7.1" + "@nrwl/linter" "13.7.1" + "@nrwl/workspace" "13.7.1" chalk "4.1.0" copy-webpack-plugin "^9.0.1" enhanced-resolve "^5.8.3" fork-ts-checker-webpack-plugin "6.2.10" fs-extra "^9.1.0" glob "7.1.4" - license-webpack-plugin "2.3.15" + license-webpack-plugin "4.0.0" rxjs "^6.5.4" rxjs-for-await "0.0.2" source-map-support "0.5.19" - terser-webpack-plugin "^5.1.1" + terser-webpack-plugin "^5.3.0" tree-kill "1.2.2" ts-loader "^9.2.6" ts-node "~9.1.1" tsconfig-paths "^3.9.0" - tsconfig-paths-webpack-plugin "3.4.1" + tsconfig-paths-webpack-plugin "3.5.2" tslib "^2.3.0" webpack "^5.58.1" webpack-merge "^5.8.0" @@ -3302,21 +4060,21 @@ strip-json-comments "^3.1.1" tar "6.1.11" -"@nrwl/react@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-13.5.0-rc.1.tgz#953e9b803660c89c2916bc31ba04630698007fa6" - integrity sha512-L1rkZJy4/kiNqXCJRGlFv7mh2i/zSL2Af6QP3kQhM22QBZsfA/RIiEKfN/Z5/TNySNvd6b14hMTZqKU9uAGaVA== +"@nrwl/react@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-13.7.1.tgz#1f37909b79113f12c0238bab8b42544214aaaacd" + integrity sha512-N6OldrCFW7Qshaj60hrsCy/GFcLTszC3f8LdJSFS5BC2Mme/gpFyF/7oRL5TM1biweEhEwLKJoSFeYj9rJEF3A== dependencies: "@babel/core" "^7.15.0" "@babel/preset-react" "^7.14.5" - "@nrwl/cypress" "13.5.0-rc.1" - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/jest" "13.5.0-rc.1" - "@nrwl/js" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" - "@nrwl/storybook" "13.5.0-rc.1" - "@nrwl/web" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" + "@nrwl/cypress" "13.7.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/jest" "13.7.1" + "@nrwl/js" "13.7.1" + "@nrwl/linter" "13.7.1" + "@nrwl/storybook" "13.7.1" + "@nrwl/web" "13.7.1" + "@nrwl/workspace" "13.7.1" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.1" "@storybook/node-logger" "6.1.20" "@svgr/webpack" "^6.1.2" @@ -3324,31 +4082,31 @@ eslint-plugin-import "^2.25.2" eslint-plugin-jsx-a11y "^6.5.1" eslint-plugin-react "^7.27.0" - eslint-plugin-react-hooks "^4.2.0" + eslint-plugin-react-hooks "^4.3.0" react-refresh "^0.10.0" semver "7.3.4" url-loader "^4.1.1" webpack "^5.58.1" webpack-merge "^5.8.0" -"@nrwl/storybook@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-13.5.0-rc.1.tgz#7bd1e8364122e412c265eb9876ed5dea08842253" - integrity sha512-junMxFMVaTSoXszyAqWLc/5IVphKf8Klr06M+5ZLTSNMsl5XBSvyU1ie6dbYkia/GMX85G/eSwguw3g1E0ilMQ== +"@nrwl/storybook@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-13.7.1.tgz#858e6a964830bfa216bebc5da4471341c555876c" + integrity sha512-jm9dEtji0ZOn8UU1rtXtjmz5weDGTs/PglHs33hKfjVTA6duYwfk3p3qGxbeWsDg49eDubKfcxOTJUN/w10Kzg== dependencies: - "@nrwl/cypress" "13.5.0-rc.1" - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" + "@nrwl/cypress" "13.7.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/linter" "13.7.1" + "@nrwl/workspace" "13.7.1" core-js "^3.6.5" semver "7.3.4" ts-loader "^9.2.6" - tsconfig-paths-webpack-plugin "3.4.1" + tsconfig-paths-webpack-plugin "3.5.2" -"@nrwl/tao@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-13.5.0-rc.1.tgz#d572e15ff12b5bc3b368894bc7889be5d8dc4e99" - integrity sha512-7RGiwEpxgBXUuCVVA71BFl8XjEgyfdzI3FlNjpJ3xY7G9A85TXqSDDKAWeKt4kBd2Vkbec07J76ra9WEL+x84g== +"@nrwl/tao@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-13.7.1.tgz#1f257232c38324521cd7c1478896f4c0e948216a" + integrity sha512-Ho7OHIu82aT/6hCSAZ1nxgmFAmTVt6TM6oxeg+/J4JTizCbevjrEFxS7RQ7GYsW/a8NxOTTMq6rTMln3W2OPzg== dependencies: chalk "4.1.0" enquirer "~2.3.6" @@ -3356,7 +4114,7 @@ fs-extra "^9.1.0" ignore "^5.0.4" jsonc-parser "3.0.0" - nx "13.5.0-rc.1" + nx "13.7.1" rxjs "^6.5.4" rxjs-for-await "0.0.2" semver "7.3.4" @@ -3364,10 +4122,10 @@ tslib "^2.3.0" yargs-parser "20.0.0" -"@nrwl/web@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-13.5.0-rc.1.tgz#8d79775cc906db86eef54ca11fb8137050135da3" - integrity sha512-xMAPfLH7RxX3z+kAUBrDpsl3wEJvzXok+qROgJ6g14uV+Yn7yfQD7xtYZkcTv+1SeSAqwAhBcXaJnkUCEFOtLg== +"@nrwl/web@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-13.7.1.tgz#7af3a7a241873613698cb25893e6568d3d09e959" + integrity sha512-HLqPY/nhJofz39leVl9ksV/dCddSrVzhQzxTNoM4lu3ZayTFOVN1v/r3E7A+7806quoAxPOTJEhdi8FI8syDdw== dependencies: "@babel/core" "^7.15.0" "@babel/plugin-proposal-class-properties" "^7.14.5" @@ -3377,12 +4135,12 @@ "@babel/preset-env" "^7.15.0" "@babel/preset-typescript" "^7.15.0" "@babel/runtime" "^7.14.8" - "@nrwl/cypress" "13.5.0-rc.1" - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/jest" "13.5.0-rc.1" - "@nrwl/js" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" - "@nrwl/workspace" "13.5.0-rc.1" + "@nrwl/cypress" "13.7.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/jest" "13.7.1" + "@nrwl/js" "13.7.1" + "@nrwl/linter" "13.7.1" + "@nrwl/workspace" "13.7.1" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.1" "@rollup/plugin-babel" "^5.3.0" "@rollup/plugin-commonjs" "^20.0.0" @@ -3413,13 +4171,12 @@ ignore "^5.0.4" less "3.12.2" less-loader "^10.1.0" - license-webpack-plugin "2.3.15" + license-webpack-plugin "4.0.0" loader-utils "1.2.3" mini-css-extract-plugin "~2.4.7" - open "^7.4.2" parse5 "4.0.0" parse5-html-rewriting-stream "6.0.1" - postcss "8.3.0" + postcss "^8.2.13" postcss-import "14.0.2" postcss-loader "^6.1.1" raw-loader "^4.0.2" @@ -3440,12 +4197,11 @@ style-loader "^3.3.0" stylus "^0.55.0" stylus-loader "^6.2.0" - terser "4.3.8" - terser-webpack-plugin "^5.1.1" + terser-webpack-plugin "^5.3.0" ts-loader "^9.2.6" ts-node "~9.1.1" tsconfig-paths "^3.9.0" - tsconfig-paths-webpack-plugin "3.4.1" + tsconfig-paths-webpack-plugin "3.5.2" tslib "^2.3.0" webpack "^5.58.1" webpack-dev-server "^4.3.1" @@ -3453,15 +4209,15 @@ webpack-sources "^3.0.2" webpack-subresource-integrity "^1.5.2" -"@nrwl/workspace@13.5.0-rc.1": - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-13.5.0-rc.1.tgz#b315f69aebc68828a427c254357869d825e86187" - integrity sha512-sbg+SfjanD61PvkAdZUV6xWZAY+Az8Pz0/OiVOiCgfYOAjr98d5B9gh7VGX9fmf4vnwGW4dg3rTtoCdH+8YSOQ== +"@nrwl/workspace@13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-13.7.1.tgz#49f0ccfa9aba7e81de021e871a49a9b4f3f72b49" + integrity sha512-lJ3xHBAPNYP3yvl4NwGATfv8BveCeniB9YdEut82E3CgJEpIgB5cJatw1ZjTYnHxDqPmdIJ8GS9i0B7BmYt8Ew== dependencies: - "@nrwl/cli" "13.5.0-rc.1" - "@nrwl/devkit" "13.5.0-rc.1" - "@nrwl/jest" "13.5.0-rc.1" - "@nrwl/linter" "13.5.0-rc.1" + "@nrwl/cli" "13.7.1" + "@nrwl/devkit" "13.7.1" + "@nrwl/jest" "13.7.1" + "@nrwl/linter" "13.7.1" "@parcel/watcher" "2.0.4" chalk "4.1.0" chokidar "^3.5.1" @@ -3476,7 +4232,7 @@ ignore "^5.0.4" minimatch "3.0.4" npm-run-path "^4.0.1" - open "^7.4.2" + open "^8.4.0" rxjs "^6.5.4" semver "7.3.4" tmp "~0.2.1" @@ -3714,13 +4470,13 @@ resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz" integrity sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A== -"@schematics/angular@13.1.1", "@schematics/angular@~13.1.0": - version "13.1.1" - resolved "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.1.tgz" - integrity sha512-GY49qumsQ+w1aDsCa796iPL/GcokCVKr2OMLss3avwciBFciMOVsLxZ04lprPCivCQRcKNqbSDDx4+xH5qkrAg== +"@schematics/angular@13.2.0", "@schematics/angular@~13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-13.2.0.tgz#fee1ef0810d16d7090822233e6e6e01a91a04a2c" + integrity sha512-DlUJ+ix9u/wz7IWc82dix5xsDGu0nztZ6Litrv+EsFDRYc95IFxTWuNwwjL2eRkI2KLIk79wmO7xhlUwrUyNlg== dependencies: - "@angular-devkit/core" "13.1.1" - "@angular-devkit/schematics" "13.1.1" + "@angular-devkit/core" "13.2.0" + "@angular-devkit/schematics" "13.2.0" jsonc-parser "3.0.0" "@sindresorhus/is@^0.14.0": @@ -4734,6 +5490,117 @@ "@svgr/plugin-jsx" "^6.1.2" "@svgr/plugin-svgo" "^6.1.2" +"@swc-node/core@^1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@swc-node/core/-/core-1.8.2.tgz#950ad394a8e8385658e6a951ec554bbf61a1693e" + integrity sha512-IoJ7tGHQ6JOMSmFe4VhP64uLmFKMNasS0QEgUrLFQ0h/dTvpQMynnoGBEJoPL6LfsebZ/q4uKqbpWrth6/yrAA== + dependencies: + "@swc/core" "^1.2.119" + +"@swc-node/register@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc-node/register/-/register-1.4.2.tgz#98801cc5ad8792519511bd6ae31c01f40aa487a3" + integrity sha512-wLZz0J7BTO//1Eq7e4eBQjKF380Hr2eVemz849msQSKcVM1D7UJUt/dP2TinEVGx++/BXJ/0q37i6n9Iw0EM0w== + dependencies: + "@swc-node/core" "^1.8.2" + "@swc-node/sourcemap-support" "^0.1.11" + chalk "4" + debug "^4.3.3" + pirates "^4.0.4" + tslib "^2.3.1" + typescript "^4.5.3" + +"@swc-node/sourcemap-support@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@swc-node/sourcemap-support/-/sourcemap-support-0.1.11.tgz#50cda396baade0636e8f53596b7a66386490c06d" + integrity sha512-b+Mn3oQl+7nUSt7hPzIbY9B30YhcFo1PT4kd9P4QmD6raycmIealOAhAdZID/JevphzsOXHQB4OqJm7Yi5tMcA== + dependencies: + source-map-support "^0.5.21" + +"@swc/core-android-arm-eabi@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.133.tgz#dea04365897889c6f827ceb544ea241c90f02709" + integrity sha512-S6gc8Z1zhkDmMRwjeGp5Wf8zE+Vwc5m3weSltUTxbO27r48X6A8R2egM48ci/muPTPA6mOWQTViTFcq/hEgV2w== + +"@swc/core-android-arm64@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.133.tgz#9467327193885692d6b9204599bcb16863e3ccab" + integrity sha512-rlsJ+UCk6QOUVde2l4yeM32R04KbnOM6a2WBw43f5IA8M8PDlWdRNHFE3jiwCIwBoG6MJ+EJE2PPmjxr3iSWvw== + +"@swc/core-darwin-arm64@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.133.tgz#95e6d46a8406c4b09e96eec4a3f0bad270285744" + integrity sha512-COktqzeii453+JCGwgIM8vs4y4bgbIzY2lvSEYQmxZRVMAkqQVviLqG4cjm9tYHrW0o+9zpw+XTgpdPpkg32Yg== + +"@swc/core-darwin-x64@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.133.tgz#d40999cb465a160c1226fef42df31c7be1ed4999" + integrity sha512-H5Hk+qWotdgVQOuQZdSMmIo4KUGxJjfVVBBbKe+TG1Vqyo5SQderc9TUZH8UzMP/tlX83Nzin0FHB+Ui9UhYqA== + +"@swc/core-freebsd-x64@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.133.tgz#0968766e4ff69509ae347e4fed3accb1f1e97c53" + integrity sha512-eFYkZLyAghY90w7CfwHsQ7/doJ46QSlmMGA9qR9NEuPt9MthM84ZXE6d20BvOid0zeib2o6HdFzfaAkS09/hvA== + +"@swc/core-linux-arm-gnueabihf@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.133.tgz#fcbefd1783c8fbde44d965ec0fb051387c3c92a9" + integrity sha512-oB9L0Xs6cfOYUr7Qc8tpPd3IpY3dXIaJZ/OZQqFhIQFzeMZVApaLBeyfX+gwH8d8wgceuPj4HeyZE+IWw2GTJQ== + +"@swc/core-linux-arm64-gnu@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.133.tgz#2d2986824aaf1dd58c4b4e173d6186b7e2073d54" + integrity sha512-SF0Yviv+9L1ELsn578/TJd44rIhqbGGAD+AgpyJB8YGoFTAFUTnoAhFYNEPOEfbf/IQyWcyHk3vAZ7a2VPRIFg== + +"@swc/core-linux-arm64-musl@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.133.tgz#9daae6e86b9c692aecdaa6109721a5ff00d114ad" + integrity sha512-tZiqwz7dTOxnGMwnYguULKl6gNom6CQWXoUyoliksaZA6+uNALO1/PNh/ctzuDbu2Agj4ltsmoevhZlrzC3geA== + +"@swc/core-linux-x64-gnu@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.133.tgz#77439a67f2e39125b2f6c5c62d70accaf5140323" + integrity sha512-xXx+/x9y803chUtOqsETvZjimCEiFNcYobsV4wDzlO/E9njrDhmteGcHOv5C6cGSfP6H8tG+hL1JlqJQm+hPSQ== + +"@swc/core-linux-x64-musl@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.133.tgz#f37122c608d9392a3dbda4189e1d68db46f49614" + integrity sha512-LnLY5MnwG/L7U+FC/k5LU4K7h+kz5/fo8DC507BncSZj5LLxT9ohhCxO+iUp7qKGw+UQFgSUgUinh1I8FfV6cQ== + +"@swc/core-win32-arm64-msvc@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.133.tgz#322ea6234182005a81a2b3e64d3e35273057bd8c" + integrity sha512-Fk4D8v56TOhoP5lRFSoZqWXt8enCdHGbZsSIdz7DSjQyS/VeePXdoZI8vmWUcuy2OSquQ4hpS2o1v3wVSREWiw== + +"@swc/core-win32-ia32-msvc@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.133.tgz#b9766f17821ce3ae7010577174df2549f92a8a07" + integrity sha512-Sf9UmXSPFr7308OSDfIIU0iLRfzilWlnVfVzUfWLd02Z9t5awBxNYCAZrXxny4FUvTDK9qL+/uY378bFH6tYiw== + +"@swc/core-win32-x64-msvc@1.2.133": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.133.tgz#5afc09724bac622e6f40ce6cd5e901e1458aad98" + integrity sha512-nXZJihzwUjzzF78ipPp+uUWmLQtbFzuR5eADNk1MsnHgWflKaL5OXNVz5c8+qyTl5/c3/W1b4GSevFOfEuApxw== + +"@swc/core@^1.2.119": + version "1.2.133" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.133.tgz#2d0654b2135ea822e2933c02e150563165bdefff" + integrity sha512-bXrGSrNK9O6Q5dHSazhAVvcGqxSy6ffAIeGSnweHM2cq0Gsrv0Admrj79ERH0dzsubxy4EnY8A0oHj3pEVmL0g== + optionalDependencies: + "@swc/core-android-arm-eabi" "1.2.133" + "@swc/core-android-arm64" "1.2.133" + "@swc/core-darwin-arm64" "1.2.133" + "@swc/core-darwin-x64" "1.2.133" + "@swc/core-freebsd-x64" "1.2.133" + "@swc/core-linux-arm-gnueabihf" "1.2.133" + "@swc/core-linux-arm64-gnu" "1.2.133" + "@swc/core-linux-arm64-musl" "1.2.133" + "@swc/core-linux-x64-gnu" "1.2.133" + "@swc/core-linux-x64-musl" "1.2.133" + "@swc/core-win32-arm64-msvc" "1.2.133" + "@swc/core-win32-ia32-msvc" "1.2.133" + "@swc/core-win32-x64-msvc" "1.2.133" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" @@ -4820,6 +5687,11 @@ resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" @@ -4879,6 +5751,13 @@ "@types/connect" "*" "@types/node" "*" +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + "@types/cacheable-request@^6.0.1": version "6.0.2" resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" @@ -4901,6 +5780,14 @@ resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + "@types/connect@*": version "3.4.35" resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" @@ -4938,7 +5825,7 @@ "@types/eslint" "*" "@types/estree" "*" -"@types/eslint@*", "@types/eslint@^8.2.0": +"@types/eslint@*": version "8.2.0" resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz" integrity sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ== @@ -4946,6 +5833,14 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/eslint@~8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" + integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + "@types/estree@*", "@types/estree@^0.0.50": version "0.0.50" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz" @@ -4956,22 +5851,23 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/express-serve-static-core@*": - version "4.17.25" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.25.tgz" - integrity sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.28" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" + integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" -"@types/express@4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz" - integrity sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== +"@types/express@*", "@types/express@4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" "@types/serve-static" "*" "@types/flat@^5.0.1": @@ -5330,6 +6226,13 @@ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz" integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + "@types/serve-static@*": version "1.13.10" resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" @@ -5348,6 +6251,13 @@ resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz" integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz" @@ -5394,15 +6304,6 @@ "@types/source-list-map" "*" source-map "^0.7.3" -"@types/webpack-sources@^0.1.5": - version "0.1.9" - resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz" - integrity sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.6.1" - "@types/webpack@^4.41.26", "@types/webpack@^4.41.8": version "4.41.32" resolved "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz" @@ -5415,6 +6316,13 @@ anymatch "^3.0.0" source-map "^0.6.0" +"@types/ws@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.2.2.tgz#7c5be4decb19500ae6b3d563043cd407bf366c21" + integrity sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "20.2.1" resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz" @@ -5441,13 +6349,14 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@~5.3.0": - version "5.3.1" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz" - integrity sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw== +"@typescript-eslint/eslint-plugin@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz#870195d0f2146b36d11fc71131b75aba52354c69" + integrity sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ== dependencies: - "@typescript-eslint/experimental-utils" "5.3.1" - "@typescript-eslint/scope-manager" "5.3.1" + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/type-utils" "5.10.1" + "@typescript-eslint/utils" "5.10.1" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -5455,6 +6364,13 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/experimental-utils@5.10.1", "@typescript-eslint/experimental-utils@~5.10.0": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.1.tgz#49fa5a7800ed08ea70aef14fccb14fbae85116ab" + integrity sha512-Ryeb8nkJa/1zKl8iujNtJC8tgj6PgaY0sDUnrTqbmC70nrKKkZaHfiRDTcqICmCSCEQyLQcJAoh0AukLaIaGTw== + dependencies: + "@typescript-eslint/utils" "5.10.1" + "@typescript-eslint/experimental-utils@5.3.0": version "5.3.0" resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz" @@ -5467,17 +6383,15 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/experimental-utils@5.3.1", "@typescript-eslint/experimental-utils@~5.3.0": - version "5.3.1" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz" - integrity sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w== +"@typescript-eslint/parser@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.1.tgz#4ce9633cc33fc70bc13786cb793c1a76fe5ad6bd" + integrity sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA== dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.3.1" - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/typescript-estree" "5.3.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/typescript-estree" "5.10.1" + debug "^4.3.2" "@typescript-eslint/parser@^4.20.0": version "4.33.0" @@ -5489,7 +6403,7 @@ "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@~5.3.0": +"@typescript-eslint/parser@^5.0.0": version "5.3.1" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.1.tgz" integrity sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw== @@ -5507,6 +6421,14 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" +"@typescript-eslint/scope-manager@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz#f0539c73804d2423506db2475352a4dec36cd809" + integrity sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg== + dependencies: + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/visitor-keys" "5.10.1" + "@typescript-eslint/scope-manager@5.3.0": version "5.3.0" resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz" @@ -5523,11 +6445,25 @@ "@typescript-eslint/types" "5.3.1" "@typescript-eslint/visitor-keys" "5.3.1" +"@typescript-eslint/type-utils@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz#5e526c00142585e40ab1503e83f1ff608c367405" + integrity sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw== + dependencies: + "@typescript-eslint/utils" "5.10.1" + debug "^4.3.2" + tsutils "^3.21.0" + "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== +"@typescript-eslint/types@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.1.tgz#dca9bd4cb8c067fc85304a31f38ec4766ba2d1ea" + integrity sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q== + "@typescript-eslint/types@5.3.0": version "5.3.0" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.0.tgz" @@ -5551,6 +6487,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz#b268e67be0553f8790ba3fe87113282977adda15" + integrity sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ== + dependencies: + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/visitor-keys" "5.10.1" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/typescript-estree@5.3.0": version "5.3.0" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz" @@ -5577,6 +6526,18 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/utils@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.1.tgz#fa682a33af47080ba2c4368ee0ad2128213a1196" + integrity sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/typescript-estree" "5.10.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@4.33.0": version "4.33.0" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz" @@ -5585,6 +6546,14 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz#29102de692f59d7d34ecc457ed59ab5fc558010b" + integrity sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ== + dependencies: + "@typescript-eslint/types" "5.10.1" + eslint-visitor-keys "^3.0.0" + "@typescript-eslint/visitor-keys@5.3.0": version "5.3.0" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz" @@ -6114,7 +7083,7 @@ acorn@^8.2.4, acorn@^8.4.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz" integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== -acorn@^8.5.0: +acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== @@ -6235,10 +7204,10 @@ ajv@8.6.3: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@8.8.2: - version "8.8.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz" - integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== +ajv@8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -6757,6 +7726,18 @@ autoprefixer@^10.2.5: picocolors "^1.0.0" postcss-value-parser "^4.1.0" +autoprefixer@^10.4.2: + version "10.4.2" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.2.tgz#25e1df09a31a9fba5c40b578936b90d35c9d4d3b" + integrity sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ== + dependencies: + browserslist "^4.19.1" + caniuse-lite "^1.0.30001297" + fraction.js "^4.1.2" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + autoprefixer@^9.6.1, autoprefixer@^9.8.6: version "9.8.8" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz" @@ -6968,6 +7949,14 @@ babel-plugin-polyfill-corejs3@^0.4.0: "@babel/helper-define-polyfill-provider" "^0.3.0" core-js-compat "^3.18.0" +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060" + integrity sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.20.0" + babel-plugin-polyfill-regenerator@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz" @@ -7230,6 +8219,22 @@ body-parser@1.19.0, body-parser@^1.16.1: raw-body "2.4.0" type-is "~1.6.17" +body-parser@1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" + integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== + dependencies: + bytes "3.1.1" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.9.6" + raw-body "2.4.2" + type-is "~1.6.18" + bonjour@^3.5.0: version "3.5.0" resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" @@ -7395,6 +8400,17 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4 node-releases "^2.0.1" picocolors "^1.0.0" +browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + browserstack@^1.5.1: version "1.6.1" resolved "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz" @@ -7532,7 +8548,7 @@ bytes@3.1.0: resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -bytes@^3.1.0: +bytes@3.1.1, bytes@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz" integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== @@ -7739,6 +8755,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, can resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz" integrity sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg== +caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001297, caniuse-lite@^1.0.30001299: + version "1.0.30001303" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz#9b168e4f43ccfc372b86f4bc5a551d9b909c95c9" + integrity sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ== + canonical-path@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz" @@ -7782,6 +8803,14 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4. escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@4, chalk@4.1.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz" @@ -7798,14 +8827,6 @@ chalk@4.1.0, chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@4.1.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" @@ -8419,6 +9440,13 @@ content-disposition@0.5.3: dependencies: safe-buffer "5.1.2" +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" @@ -8613,6 +9641,11 @@ cookie@0.4.0: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + cookies@0.8.0: version "0.8.0" resolved "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz" @@ -8652,10 +9685,10 @@ copy-to-clipboard@^3, copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" -copy-webpack-plugin@10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.0.0.tgz" - integrity sha512-tuCVuFMBbRsb7IH0q1CUb50/Skv+7a6c7DJ+xi4fAbOzNLTYVMUTPnf8uGvKPtmqTvzYBrfEFo7YgP4TsUWmtg== +copy-webpack-plugin@10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz#115a41f913070ac236a1b576066204cbf35341a1" + integrity sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg== dependencies: fast-glob "^3.2.7" glob-parent "^6.0.1" @@ -8684,15 +9717,23 @@ core-js-compat@^3.18.0, core-js-compat@^3.19.1, core-js-compat@^3.8.1: browserslist "^4.17.6" semver "7.0.0" +core-js-compat@^3.20.0, core-js-compat@^3.20.2: + version "3.20.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6" + integrity sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + core-js-pure@^3.19.0, core-js-pure@^3.8.1, core-js-pure@^3.8.2: version "3.19.1" resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz" integrity sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ== -core-js@3.19.3: - version "3.19.3" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz" - integrity sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g== +core-js@3.20.3: + version "3.20.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.3.tgz#c710d0a676e684522f3db4ee84e5e18a9d11d69a" + integrity sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag== core-js@^2.2.0: version "2.6.12" @@ -8810,13 +9851,13 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -critters@0.0.15: - version "0.0.15" - resolved "https://registry.npmjs.org/critters/-/critters-0.0.15.tgz" - integrity sha512-AE7hkXb3eZUbEvS1SKZa+OU4o2kUOXtzVeE/2E/mjU/0mV1wpBT1HfUCWVRS4zwvkBNJ0AQYsVjAoFm+kIhfdw== +critters@0.0.16: + version "0.0.16" + resolved "https://registry.yarnpkg.com/critters/-/critters-0.0.16.tgz#ffa2c5561a65b43c53b940036237ce72dcebfe93" + integrity sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A== dependencies: chalk "^4.1.0" - css-select "^4.1.3" + css-select "^4.2.0" parse5 "^6.0.1" parse5-htmlparser2-tree-adapter "^6.0.1" postcss "^8.3.7" @@ -8887,6 +9928,13 @@ css-blank-pseudo@^0.1.4: dependencies: postcss "^7.0.5" +css-blank-pseudo@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.2.tgz#f8660f6a48b17888a9277e53f25cc5abec1f0169" + integrity sha512-hOb1LFjRR+8ocA071xUSmg5VslJ8NGo/I2qpUpdeAYyBVCgupS5O8SEVo4SxEMYyFBNodBkzG3T1iqW9HCXxew== + dependencies: + postcss-selector-parser "^6.0.8" + css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" @@ -8907,6 +9955,13 @@ css-has-pseudo@^0.10.0: postcss "^7.0.6" postcss-selector-parser "^5.0.0-rc.4" +css-has-pseudo@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.3.tgz#4824a34cb92dae7e09ea1d3fd19691b653412098" + integrity sha512-0gDYWEKaGacwxCqvQ3Ypg6wGdD1AztbMm5h1JsactG2hP2eiflj808QITmuWBpE7sjSEVrAlZhPTVd/nNMj/hQ== + dependencies: + postcss-selector-parser "^6.0.8" + css-loader@6.5.1, css-loader@^6.4.0: version "6.5.1" resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz" @@ -8959,6 +10014,11 @@ css-prefers-color-scheme@^3.1.1: dependencies: postcss "^7.0.5" +css-prefers-color-scheme@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.2.tgz#d5c03a980caab92d8beeee176a8795d331e0c727" + integrity sha512-gv0KQBEM+q/XdoKyznovq3KW7ocO7k+FhPP+hQR1MenJdu0uPGS6IZa9PzlbqBeS6XcZJNAoqoFxlAUW461CrA== + css-select@^4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz" @@ -8970,6 +10030,17 @@ css-select@^4.1.3: domutils "^2.6.0" nth-check "^2.0.0" +css-select@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" + integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== + dependencies: + boolbase "^1.0.0" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" + css-to-react-native@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz" @@ -8987,9 +10058,9 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^5.0.0: +css-what@^5.0.0, css-what@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== css.escape@1.5.1: @@ -9011,6 +10082,11 @@ cssdb@^4.4.0: resolved "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz" integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== +cssdb@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-5.1.0.tgz#ec728d5f5c0811debd0820cbebda505d43003400" + integrity sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw== + cssesc@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz" @@ -9335,7 +10411,7 @@ debug@4.3.1: dependencies: ms "2.1.2" -debug@4.3.3: +debug@4.3.3, debug@^4.3.3: version "4.3.3" resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== @@ -9844,14 +10920,21 @@ domhandler@^4.0.0, domhandler@^4.2.0: dependencies: domelementtype "^2.2.0" +domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== + dependencies: + domelementtype "^2.2.0" + dompurify@^2.2.6: version "2.3.3" resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.3.3.tgz" integrity sha512-dqnqRkPMAjOZE0FogZ+ceJNM2dZ3V/yNOuFB7+39qpO93hHhfRpHw3heYQC7DPK9FqbQTfBKUJhiSfz4MvXYwg== -domutils@^2.5.2, domutils@^2.6.0: +domutils@^2.5.2, domutils@^2.6.0, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -9963,6 +11046,11 @@ electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723, electron-to-chromi resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.903.tgz" integrity sha512-+PnYAyniRRTkNq56cqYDLq9LyklZYk0hqoDy9GpcU11H5QjRmFZVDbxtgHUMK/YzdNTcn1XWP5gb+hFlSCr20g== +electron-to-chromium@^1.4.17: + version "1.4.54" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz#69005d39ed11542e1bcb65ec1a98e44d39527ba8" + integrity sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw== + element-resize-detector@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.3.tgz" @@ -10102,7 +11190,7 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0, enhanced-resolve@^5.8.3: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5, enquirer@^2.3.6, enquirer@~2.3.6: +enquirer@^2.3.6, enquirer@~2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -10287,10 +11375,10 @@ esbuild-android-arm64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.13.tgz#da07b5fb2daf7d83dcd725f7cf58a6758e6e702a" integrity sha512-T02aneWWguJrF082jZworjU6vm8f4UQ+IH2K3HREtlqoY9voiJUwHLRL6khRlsNLzVglqgqb7a3HfGx7hAADCQ== -esbuild-android-arm64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz#256b7cf2f9d382a2a92a4ff4e13187587c9b7c6a" - integrity sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw== +esbuild-android-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.14.tgz#3705f32f209deeb11c275af47c298c8783dd5f0c" + integrity sha512-be/Uw6DdpQiPfula1J4bdmA+wtZ6T3BRCZsDMFB5X+k0Gp8TIh9UvmAcqvKNnbRAafSaXG3jPCeXxDKqnc8hFQ== esbuild-android-arm64@0.14.5: version "0.14.5" @@ -10302,10 +11390,10 @@ esbuild-darwin-64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.13.tgz#e94e9fd3b4b5455a2e675cd084a19a71b6904bbf" integrity sha512-wkaiGAsN/09X9kDlkxFfbbIgR78SNjMOfUhoel3CqKBDsi9uZhw7HBNHNxTzYUK8X8LAKFpbODgcRB3b/I8gHA== -esbuild-darwin-64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz#891a59ce6bc3aded0265f982469b3eb9571b92f8" - integrity sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA== +esbuild-darwin-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.14.tgz#c07e4eae6d938300a2d330ea82494c55bcea84e5" + integrity sha512-BEexYmjWafcISK8cT6O98E3TfcLuZL8DKuubry6G54n2+bD4GkoRD6HYUOnCkfl2p7jodA+s4369IjSFSWjtHg== esbuild-darwin-64@0.14.5: version "0.14.5" @@ -10317,10 +11405,10 @@ esbuild-darwin-arm64@0.13.13: resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.13.tgz" integrity sha512-b02/nNKGSV85Gw9pUCI5B48AYjk0vFggDeom0S6QMP/cEDtjSh1WVfoIFNAaLA0MHWfue8KBwoGVsN7rBshs4g== -esbuild-darwin-arm64@0.14.2: - version "0.14.2" - resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz" - integrity sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A== +esbuild-darwin-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.14.tgz#a8631e13a51a6f784fb0906e2a64c6ab53988755" + integrity sha512-tnBKm41pDOB1GtZ8q/w26gZlLLRzVmP8fdsduYjvM+yFD7E2DLG4KbPAqFMWm4Md9B+DitBglP57FY7AznxbTg== esbuild-darwin-arm64@0.14.5: version "0.14.5" @@ -10332,10 +11420,10 @@ esbuild-freebsd-64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.13.tgz#ce0ca5b8c4c274cfebc9326f9b316834bd9dd151" integrity sha512-ALgXYNYDzk9YPVk80A+G4vz2D22Gv4j4y25exDBGgqTcwrVQP8rf/rjwUjHoh9apP76oLbUZTmUmvCMuTI1V9A== -esbuild-freebsd-64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz#f7fc87a83f02de27d5a48472571efa1a432ae86d" - integrity sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ== +esbuild-freebsd-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.14.tgz#c280c2b944746b27ee6c6487c2691865c90bed2e" + integrity sha512-Q9Rx6sgArOHalQtNwAaIzJ6dnQ8A+I7f/RsQsdkS3JrdzmnlFo8JEVofTmwVQLoIop7OKUqIVOGP4PoQcwfVMA== esbuild-freebsd-64@0.14.5: version "0.14.5" @@ -10347,10 +11435,10 @@ esbuild-freebsd-arm64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.13.tgz#463da17562fdcfdf03b3b94b28497d8d8dcc8f62" integrity sha512-uFvkCpsZ1yqWQuonw5T1WZ4j59xP/PCvtu6I4pbLejhNo4nwjW6YalqnBvBSORq5/Ifo9S/wsIlVHzkzEwdtlw== -esbuild-freebsd-arm64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz#bc8758420431106751f3180293cac0b5bc4ce2ee" - integrity sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ== +esbuild-freebsd-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.14.tgz#aa4e21276efcf20e5ab2487e91ca1d789573189b" + integrity sha512-TJvq0OpLM7BkTczlyPIphcvnwrQwQDG1HqxzoYePWn26SMUAlt6wrLnEvxdbXAvNvDLVzG83kA+JimjK7aRNBA== esbuild-freebsd-arm64@0.14.5: version "0.14.5" @@ -10362,10 +11450,10 @@ esbuild-linux-32@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.13.tgz#2035793160da2c4be48a929e5bafb14a31789acc" integrity sha512-yxR9BBwEPs9acVEwTrEE2JJNHYVuPQC9YGjRfbNqtyfK/vVBQYuw8JaeRFAvFs3pVJdQD0C2BNP4q9d62SCP4w== -esbuild-linux-32@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz#0cc2dcd816d6d66e255bc7aeac139b1d04246812" - integrity sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ== +esbuild-linux-32@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.14.tgz#3db4d929239203ce38a9060d5419ac6a6d28846c" + integrity sha512-h/CrK9Baimt5VRbu8gqibWV7e1P9l+mkanQgyOgv0Ng3jHT1NVFC9e6rb1zbDdaJVmuhWX5xVliUA5bDDCcJeg== esbuild-linux-32@0.14.5: version "0.14.5" @@ -10377,10 +11465,10 @@ esbuild-linux-64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.13.tgz#fbe4802a8168c6d339d0749f977b099449b56f22" integrity sha512-kzhjlrlJ+6ESRB/n12WTGll94+y+HFeyoWsOrLo/Si0s0f+Vip4b8vlnG0GSiS6JTsWYAtGHReGczFOaETlKIw== -esbuild-linux-64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz#c790f739aa75b15c153609ea3457153fbe4db93d" - integrity sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg== +esbuild-linux-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.14.tgz#f880026254c1f565a7a10fdebb7cff9b083a127d" + integrity sha512-IC+wAiIg/egp5OhQp4W44D9PcBOH1b621iRn1OXmlLzij9a/6BGr9NMIL4CRwz4j2kp3WNZu5sT473tYdynOuQ== esbuild-linux-64@0.14.5: version "0.14.5" @@ -10392,10 +11480,10 @@ esbuild-linux-arm64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.13.tgz#f08d98df28d436ed4aad1529615822bb74d4d978" integrity sha512-KMrEfnVbmmJxT3vfTnPv/AiXpBFbbyExH13BsUGy1HZRPFMi5Gev5gk8kJIZCQSRfNR17aqq8sO5Crm2KpZkng== -esbuild-linux-arm64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz#96858a1f89ad30274dec780d0e3dd8b5691c6b0c" - integrity sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww== +esbuild-linux-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.14.tgz#a34bc3076e50b109c3b8c8bad9c146e35942322b" + integrity sha512-6QVul3RI4M5/VxVIRF/I5F+7BaxzR3DfNGoqEVSCZqUbgzHExPn+LXr5ly1C7af2Kw4AHpo+wDqx8A4ziP9avw== esbuild-linux-arm64@0.14.5: version "0.14.5" @@ -10407,10 +11495,10 @@ esbuild-linux-arm@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.13.tgz#6f968c3a98b64e30c80b212384192d0cfcb32e7f" integrity sha512-hXub4pcEds+U1TfvLp1maJ+GHRw7oizvzbGRdUvVDwtITtjq8qpHV5Q5hWNNn6Q+b3b2UxF03JcgnpzCw96nUQ== -esbuild-linux-arm@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz#03e193225afa9b1215d2ec6efe8edf0c03eeed6f" - integrity sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ== +esbuild-linux-arm@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.14.tgz#231ffd12fef69ee06365d4c94b69850e4830e927" + integrity sha512-gxpOaHOPwp7zSmcKYsHrtxabScMqaTzfSQioAMUaB047YiMuDBzqVcKBG8OuESrYkGrL9DDljXr/mQNg7pbdaQ== esbuild-linux-arm@0.14.5: version "0.14.5" @@ -10422,10 +11510,10 @@ esbuild-linux-mips64le@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.13.tgz#690c78dc4725efe7d06a1431287966fbf7774c7f" integrity sha512-cJT9O1LYljqnnqlHaS0hdG73t7hHzF3zcN0BPsjvBq+5Ad47VJun+/IG4inPhk8ta0aEDK6LdP+F9299xa483w== -esbuild-linux-mips64le@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz#972f218d2cb5125237376d40ad60a6e5356a782c" - integrity sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ== +esbuild-linux-mips64le@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.14.tgz#bd00570e3a30422224b732c7a5f262146c357403" + integrity sha512-4Jl5/+xoINKbA4cesH3f4R+q0vltAztZ6Jm8YycS8lNhN1pgZJBDxWfI6HUMIAdkKlIpR1PIkA9aXQgZ8sxFAg== esbuild-linux-mips64le@0.14.5: version "0.14.5" @@ -10437,25 +11525,30 @@ esbuild-linux-ppc64le@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.13.tgz#7ec9048502de46754567e734aae7aebd2df6df02" integrity sha512-+rghW8st6/7O6QJqAjVK3eXzKkZqYAw6LgHv7yTMiJ6ASnNvghSeOcIvXFep3W2oaJc35SgSPf21Ugh0o777qQ== -esbuild-linux-ppc64le@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz#20b71622ac09142b0e523f633af0829def7fed6b" - integrity sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA== +esbuild-linux-ppc64le@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.14.tgz#430609413fd9e04d9def4e3f06726b031b23d825" + integrity sha512-BitW37GxeebKxqYNl4SVuSdnIJAzH830Lr6Mkq3pBHXtzQay0vK+IeOR/Ele1GtNVJ+/f8wYM53tcThkv5SC5w== esbuild-linux-ppc64le@0.14.5: version "0.14.5" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.5.tgz#5fa1178c7d7ebd13056c7ccd0604653b0ccc2264" integrity sha512-usfQrVVIQcpuc/U2NWc7/Ry+m622v+PjJ5eErNPdjWBPlcvD6kXaBTv94uQkVzZOHX3uYqprRrOjseed9ApSYA== +esbuild-linux-s390x@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.14.tgz#2f0d8cbfe53cf3cb97f6372549a41a8051dbd689" + integrity sha512-vLj6p76HOZG3wfuTr5MyO3qW5iu8YdhUNxuY+tx846rPo7GcKtYSPMusQjeVEfZlJpSYoR+yrNBBxq+qVF9zrw== + esbuild-netbsd-64@0.13.13: version "0.13.13" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.13.tgz#439bdaefffa03a8fa84324f5d83d636f548a2de3" integrity sha512-A/B7rwmzPdzF8c3mht5TukbnNwY5qMJqes09ou0RSzA5/jm7Jwl/8z853ofujTFOLhkNHUf002EAgokzSgEMpQ== -esbuild-netbsd-64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz#dbd6a25117902ef67aa11d8779dd9c6bca7fbe82" - integrity sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw== +esbuild-netbsd-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.14.tgz#3e44de35e1add7e9582f3c0d2558d86aafbc813b" + integrity sha512-fn8looXPQhpVqUyCBWUuPjesH+yGIyfbIQrLKG05rr1Kgm3rZD/gaYrd3Wpmf5syVZx70pKZPvdHp8OTA+y7cQ== esbuild-netbsd-64@0.14.5: version "0.14.5" @@ -10467,10 +11560,10 @@ esbuild-openbsd-64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.13.tgz#c9958e5291a00a3090c1ec482d6bcdf2d5b5d107" integrity sha512-szwtuRA4rXKT3BbwoGpsff6G7nGxdKgUbW9LQo6nm0TVCCjDNDC/LXxT994duIW8Tyq04xZzzZSW7x7ttDiw1w== -esbuild-openbsd-64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz#3c5f199eed459b2f88865548394c0b77383d9ca4" - integrity sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q== +esbuild-openbsd-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.14.tgz#04710ef1d01cd9f15d54f50d20b5a3778f8306a2" + integrity sha512-HdAnJ399pPff3SKbd8g+P4o5znseni5u5n5rJ6Z7ouqOdgbOwHe2ofZbMow17WMdNtz1IyOZk2Wo9Ve6/lZ4Rg== esbuild-openbsd-64@0.14.5: version "0.14.5" @@ -10482,20 +11575,20 @@ esbuild-sunos-64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.13.tgz#ac9ead8287379cd2f6d00bd38c5997fda9c1179e" integrity sha512-ihyds9O48tVOYF48iaHYUK/boU5zRaLOXFS+OOL3ceD39AyHo46HVmsJLc7A2ez0AxNZCxuhu+P9OxfPfycTYQ== -esbuild-sunos-64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz#900a681db6b76c6a7f60fc28d2bfe5b11698641c" - integrity sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow== +esbuild-sunos-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.14.tgz#8e583dd92c5c7ac4303ddc37f588e44211e04e19" + integrity sha512-bmDHa99ulsGnYlh/xjBEfxoGuC8CEG5OWvlgD+pF7bKKiVTbtxqVCvOGEZeoDXB+ja6AvHIbPxrEE32J+m5nqQ== esbuild-sunos-64@0.14.5: version "0.14.5" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.5.tgz#3e2b0e79188069a366faec3d5b1b3065b792a733" integrity sha512-J2ffKsBBWscQlye+/giEgKsQCppwHHFqqt/sh+ojVF+DZy1ve6RpPGwXGcGF6IaZTAI9+Vk4eHleiQxb+PC9Yw== -esbuild-wasm@0.14.2: - version "0.14.2" - resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz" - integrity sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA== +esbuild-wasm@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.14.14.tgz#d4c8d5fc405939a2234a31abf00967dfd1da1caa" + integrity sha512-qTjK4MWnYtQHCMGg2qDUqeFYXfVvYq5qJkQTIsOV4VZCknoYePVaDTG9ygEB9Ct0kc0DWs7IrS6Ja+GjY62Kzw== esbuild-wasm@^0.14.0: version "0.14.5" @@ -10507,10 +11600,10 @@ esbuild-windows-32@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.13.tgz#a3820fc86631ca594cb7b348514b5cc3f058cfd6" integrity sha512-h2RTYwpG4ldGVJlbmORObmilzL8EECy8BFiF8trWE1ZPHLpECE9//J3Bi+W3eDUuv/TqUbiNpGrq4t/odbayUw== -esbuild-windows-32@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz#61e0ba5bd95b277a55d2b997ac4c04dfe2559220" - integrity sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ== +esbuild-windows-32@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.14.tgz#6d293ddfb71229f21cc13d85d5d2f43e8131693b" + integrity sha512-6tVooQcxJCNenPp5GHZBs/RLu31q4B+BuF4MEoRxswT+Eq2JGF0ZWDRQwNKB8QVIo3t6Svc5wNGez+CwKNQjBg== esbuild-windows-32@0.14.5: version "0.14.5" @@ -10522,10 +11615,10 @@ esbuild-windows-64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.13.tgz#1da748441f228d75dff474ddb7d584b81887323c" integrity sha512-oMrgjP4CjONvDHe7IZXHrMk3wX5Lof/IwFEIbwbhgbXGBaN2dke9PkViTiXC3zGJSGpMvATXVplEhlInJ0drHA== -esbuild-windows-64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz#6ab59ef721ff75c682a1c8ae0570dabb637abddb" - integrity sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg== +esbuild-windows-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.14.tgz#08a36844b69542f8ec1cb33a5ddcea02b9d0b2e8" + integrity sha512-kl3BdPXh0/RD/dad41dtzj2itMUR4C6nQbXQCyYHHo4zoUoeIXhpCrSl7BAW1nv5EFL8stT1V+TQVXGZca5A2A== esbuild-windows-64@0.14.5: version "0.14.5" @@ -10537,10 +11630,10 @@ esbuild-windows-arm64@0.13.13: resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.13.tgz#06dfa52a6b178a5932a9a6e2fdb240c09e6da30c" integrity sha512-6fsDfTuTvltYB5k+QPah/x7LrI2+OLAJLE3bWLDiZI6E8wXMQU+wLqtEO/U/RvJgVY1loPs5eMpUBpVajczh1A== -esbuild-windows-arm64@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz#aca2a4f83d2f0d1592ad4be832ed0045fc888cda" - integrity sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA== +esbuild-windows-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.14.tgz#ca747ce4066d5b8a79dbe48fe6ecd92d202e5366" + integrity sha512-dCm1wTOm6HIisLanmybvRKvaXZZo4yEVrHh1dY0v582GThXJOzuXGja1HIQgV09RpSHYRL3m4KoUBL00l6SWEg== esbuild-windows-arm64@0.14.5: version "0.14.5" @@ -10570,28 +11663,29 @@ esbuild@0.13.13: esbuild-windows-64 "0.13.13" esbuild-windows-arm64 "0.13.13" -esbuild@0.14.2: - version "0.14.2" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz" - integrity sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg== +esbuild@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.14.tgz#3b99f20d628013c3e2ae90e67687e03f1d6eb071" + integrity sha512-aiK4ddv+uui0k52OqSHu4xxu+SzOim7Rlz4i25pMEiC8rlnGU0HJ9r+ZMfdWL5bzifg+nhnn7x4NSWTeehYblg== optionalDependencies: - esbuild-android-arm64 "0.14.2" - esbuild-darwin-64 "0.14.2" - esbuild-darwin-arm64 "0.14.2" - esbuild-freebsd-64 "0.14.2" - esbuild-freebsd-arm64 "0.14.2" - esbuild-linux-32 "0.14.2" - esbuild-linux-64 "0.14.2" - esbuild-linux-arm "0.14.2" - esbuild-linux-arm64 "0.14.2" - esbuild-linux-mips64le "0.14.2" - esbuild-linux-ppc64le "0.14.2" - esbuild-netbsd-64 "0.14.2" - esbuild-openbsd-64 "0.14.2" - esbuild-sunos-64 "0.14.2" - esbuild-windows-32 "0.14.2" - esbuild-windows-64 "0.14.2" - esbuild-windows-arm64 "0.14.2" + esbuild-android-arm64 "0.14.14" + esbuild-darwin-64 "0.14.14" + esbuild-darwin-arm64 "0.14.14" + esbuild-freebsd-64 "0.14.14" + esbuild-freebsd-arm64 "0.14.14" + esbuild-linux-32 "0.14.14" + esbuild-linux-64 "0.14.14" + esbuild-linux-arm "0.14.14" + esbuild-linux-arm64 "0.14.14" + esbuild-linux-mips64le "0.14.14" + esbuild-linux-ppc64le "0.14.14" + esbuild-linux-s390x "0.14.14" + esbuild-netbsd-64 "0.14.14" + esbuild-openbsd-64 "0.14.14" + esbuild-sunos-64 "0.14.14" + esbuild-windows-32 "0.14.14" + esbuild-windows-64 "0.14.14" + esbuild-windows-arm64 "0.14.14" esbuild@^0.14.0: version "0.14.5" @@ -10865,10 +11959,10 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz" - integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -10890,24 +11984,28 @@ eslint-visitor-keys@^3.0.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz" integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== -eslint@8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz" - integrity sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw== +eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" + integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== + +eslint@8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.7.0.tgz#22e036842ee5b7cf87b03fe237731675b4d3633c" + integrity sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w== dependencies: - "@eslint/eslintrc" "^1.0.4" - "@humanwhocodes/config-array" "^0.6.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^6.0.0" + eslint-scope "^7.1.0" eslint-utils "^3.0.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" + eslint-visitor-keys "^3.2.0" + espree "^9.3.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -10915,7 +12013,7 @@ eslint@8.2.0: functional-red-black-tree "^1.0.1" glob-parent "^6.0.1" globals "^13.6.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" @@ -10926,22 +12024,20 @@ eslint@8.2.0: minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" regexpp "^3.2.0" - semver "^7.2.1" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz" - integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== +espree@^9.2.0, espree@^9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" + integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== dependencies: - acorn "^8.5.0" + acorn "^8.7.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.0.0" + eslint-visitor-keys "^3.1.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -11147,17 +12243,53 @@ expect@^27.2.3, expect@^27.3.1: jest-message-util "^27.3.1" jest-regex-util "^27.0.6" -express@4.17.1, express@^4.17.1: - version "4.17.1" - resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== +express@4.17.1, express@^4.17.1: + version "4.17.1" + resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +express@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" + integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== dependencies: accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.19.1" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.4.1" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" @@ -11171,13 +12303,13 @@ express@4.17.1, express@^4.17.1: on-finished "~2.3.0" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.9.6" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" + safe-buffer "5.2.1" + send "0.17.2" + serve-static "1.14.2" + setprototypeof "1.2.0" statuses "~1.5.0" type-is "~1.6.18" utils-merge "1.0.1" @@ -11703,9 +12835,9 @@ forwarded@0.2.0: resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.1.1: +fraction.js@^4.1.1, fraction.js@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== fragment-cache@^0.2.1: @@ -12360,6 +13492,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + graphlib@^2.1.8: version "2.1.8" resolved "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz" @@ -12879,6 +14016,17 @@ http-errors@1.8.0: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + http-errors@~1.6.2: version "1.6.3" resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" @@ -12903,6 +14051,15 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy-middleware@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz" @@ -13023,9 +14180,9 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2: +iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -13086,6 +14243,11 @@ ignore@^5.0.4, ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + image-size@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz" @@ -13460,6 +14622,13 @@ is-core-module@^2.2.0, is-core-module@^2.4.0, is-core-module@^2.5.0, is-core-mod dependencies: has "^1.0.3" +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" @@ -14700,6 +15869,15 @@ jest-worker@^27.0.2, jest-worker@^27.0.6, jest-worker@^27.2.2, jest-worker@^27.3 merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^27.4.1: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" + integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@27.2.3: version "27.2.3" resolved "https://registry.npmjs.org/jest/-/jest-27.2.3.tgz" @@ -15242,14 +16420,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -license-webpack-plugin@2.3.15: - version "2.3.15" - resolved "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.15.tgz" - integrity sha512-reA0yvwvkkFMRsyqVikTcLGFXmgWKPVXrFaR3tRvAnFoZozM4zvwlNNQxuB5Il6fgTtS7nGkrIPm9xS2KZtu7g== - dependencies: - "@types/webpack-sources" "^0.1.5" - webpack-sources "^1.2.0" - license-webpack-plugin@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.0.tgz" @@ -15663,7 +16833,29 @@ make-error@1.x, make-error@^1, make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: +make-fetch-happen@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.0.0.tgz#a2dc77ec1ebf082927f4dc6eaa70227f72e5a250" + integrity sha512-CREcDkbKZZ64g5MN1FT+u58mDHX9FQFFtFyio5HonX44BdQdytqPZBXUz+6ibi2w/6ncji59f2phyXGSMGpgzA== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -16178,10 +17370,10 @@ mini-create-react-context@^0.3.0: "@babel/runtime" "^7.12.1" tiny-warning "^1.0.3" -mini-css-extract-plugin@2.4.5: - version "2.4.5" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.5.tgz" - integrity sha512-oEIhRucyn1JbT/1tU2BhnwO6ft1jjH1iCX9Gc59WFMg0n5773rQU0oyQ0zzeYFFuBfONaRbQJyGoPtuNseMxjA== +mini-css-extract-plugin@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz#c5c79f9b22ce9b4f164e9492267358dbe35376d9" + integrity sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw== dependencies: schema-utils "^4.0.0" @@ -16368,7 +17560,7 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -16497,6 +17689,11 @@ negotiator@0.6.2, negotiator@^0.6.2: resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" @@ -16605,10 +17802,10 @@ next@12.0.7: "@next/swc-win32-ia32-msvc" "12.0.7" "@next/swc-win32-x64-msvc" "12.0.7" -ng-packagr@~13.1.0: - version "13.1.1" - resolved "https://registry.npmjs.org/ng-packagr/-/ng-packagr-13.1.1.tgz" - integrity sha512-7g1+jHggC8yHrQdxY4XCCSPQo+wLL04jCB1IFn6xKy0Vzb9VsOHUJb4Vn1TtWCWYzz9kBb8GM+aK8ch7rIqFwg== +ng-packagr@~13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-13.2.0.tgz#c057c7f87feb857a1326457b59bd007eeaa2a389" + integrity sha512-qfAipG1jQLjQ0+NXUTYyCmi5xSdMYY3LUWc7iXrbPfl8R2b8fLO+abW1zNMxS6TtcBUZMyfYtz2NGcFrh7QteA== dependencies: "@rollup/plugin-json" "^4.1.0" "@rollup/plugin-node-resolve" "^13.0.0" @@ -16627,13 +17824,13 @@ ng-packagr@~13.1.0: less "^4.1.0" ora "^5.1.0" postcss "^8.2.4" - postcss-preset-env "^6.7.0" + postcss-preset-env "^7.0.0" postcss-url "^10.1.1" rollup "^2.45.1" rollup-plugin-sourcemaps "^0.6.3" - rxjs "^6.5.0" + rxjs "^7.0.0" sass "^1.32.8" - stylus "^0.55.0" + stylus "^0.56.0" optionalDependencies: esbuild "^0.14.0" @@ -16696,11 +17893,23 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-forge@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.2.1.tgz#82794919071ef2eb5c509293325cec8afd0fd53c" + integrity sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w== + node-gyp-build@^4.2.1, node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz" @@ -16885,12 +18094,12 @@ npm-pick-manifest@6.1.1, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: npm-package-arg "^8.1.2" semver "^7.3.4" -npm-registry-fetch@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz" - integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== +npm-registry-fetch@^12.0.0: + version "12.0.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-12.0.1.tgz#211eff2483b1e71706c9a7ce891182ab3ea9168b" + integrity sha512-ricy4ezH3Uv0d4am6RSwHjCYTWJI74NJjurIigWMAG7Vs3PFyd0TUlkrez5L0AgaPzDLRsEzqb5cOZ/Ue01bmA== dependencies: - make-fetch-happen "^9.0.1" + make-fetch-happen "^10.0.0" minipass "^3.1.3" minipass-fetch "^1.3.0" minipass-json-stream "^1.0.1" @@ -16931,9 +18140,9 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -nth-check@^2.0.0: +nth-check@^2.0.0, nth-check@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: boolbase "^1.0.0" @@ -16958,12 +18167,12 @@ nwsapi@^2.2.0: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -nx@13.5.0-rc.1: - version "13.5.0-rc.1" - resolved "https://registry.yarnpkg.com/nx/-/nx-13.5.0-rc.1.tgz#641eaccaa66b4c875807ae77c696cb69de596dde" - integrity sha512-UJYEyQ1zN5EMO+faG6+ou+ouLgtKom8glIvBNkFQYl1CqQrsbW50WvPRHRh4/UiExZloUYJS/LekaxTCaY1swA== +nx@13.7.1: + version "13.7.1" + resolved "https://registry.yarnpkg.com/nx/-/nx-13.7.1.tgz#5f07ab6e4c0d262c28e833f5970ce385d0dec521" + integrity sha512-/jKcS8t88ESwP6gRZ8Mg3sy86D/9YquLEoAcBVxR/bkoAZLQLXcdrJRQbx+yT5Wo8iJXzCC+wEyrDueJLJLaAQ== dependencies: - "@nrwl/cli" "13.5.0-rc.1" + "@nrwl/cli" "13.7.1" oauth-sign@~0.9.0: version "0.9.0" @@ -17130,7 +18339,7 @@ onigasm@^2.2.5: dependencies: lru-cache "^5.1.1" -open@7.4.2, open@^7.0.2, open@^7.0.3, open@^7.4.2: +open@7.4.2, open@^7.0.2, open@^7.0.3: version "7.4.2" resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== @@ -17138,7 +18347,7 @@ open@7.4.2, open@^7.0.2, open@^7.0.3, open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" -open@8.4.0, open@^8.0.9: +open@8.4.0, open@^8.0.9, open@^8.4.0: version "8.4.0" resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== @@ -17394,10 +18603,10 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" -pacote@12.0.2: - version "12.0.2" - resolved "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz" - integrity sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg== +pacote@12.0.3: + version "12.0.3" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.3.tgz#b6f25868deb810e7e0ddf001be88da2bcaca57c7" + integrity sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow== dependencies: "@npmcli/git" "^2.1.0" "@npmcli/installed-package-contents" "^1.0.6" @@ -17412,7 +18621,7 @@ pacote@12.0.2: npm-package-arg "^8.0.1" npm-packlist "^3.0.0" npm-pick-manifest "^6.0.0" - npm-registry-fetch "^11.0.0" + npm-registry-fetch "^12.0.0" promise-retry "^2.0.1" read-package-json-fast "^2.0.1" rimraf "^3.0.2" @@ -17798,10 +19007,15 @@ pirates@^4.0.0, pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -piscina@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz" - integrity sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg== +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +piscina@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-3.2.0.tgz#f5a1dde0c05567775690cccefe59d9223924d154" + integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== dependencies: eventemitter-asyncresource "^1.0.0" hdr-histogram-js "^2.0.1" @@ -17917,6 +19131,13 @@ postcss-attribute-case-insensitive@^4.0.1: postcss "^7.0.2" postcss-selector-parser "^6.0.2" +postcss-attribute-case-insensitive@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz#39cbf6babf3ded1e4abf37d09d6eda21c644105c" + integrity sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ== + dependencies: + postcss-selector-parser "^6.0.2" + postcss-calc@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz" @@ -17933,6 +19154,13 @@ postcss-color-functional-notation@^2.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" +postcss-color-functional-notation@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.1.tgz#a25e9e1855e14d04319222a689f120b3240d39e0" + integrity sha512-62OBIXCjRXpQZcFOYIXwXBlpAVWrYk8ek1rcjvMING4Q2cf0ipyN9qT+BhHA6HmftGSEnFQu2qgKO3gMscl3Rw== + dependencies: + postcss-value-parser "^4.2.0" + postcss-color-gray@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz" @@ -17950,6 +19178,13 @@ postcss-color-hex-alpha@^5.0.3: postcss "^7.0.14" postcss-values-parser "^2.0.1" +postcss-color-hex-alpha@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.2.tgz#7a248b006dd47bd83063f662352d31fd982f74ec" + integrity sha512-gyx8RgqSmGVK156NAdKcsfkY3KPGHhKqvHTL3hhveFrBBToguKFzhyiuk3cljH6L4fJ0Kv+JENuPXs1Wij27Zw== + dependencies: + postcss-value-parser "^4.2.0" + postcss-color-mod-function@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz" @@ -17967,6 +19202,13 @@ postcss-color-rebeccapurple@^4.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" +postcss-color-rebeccapurple@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz#5d397039424a58a9ca628762eb0b88a61a66e079" + integrity sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw== + dependencies: + postcss-value-parser "^4.2.0" + postcss-colormin@^5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.1.tgz" @@ -17991,6 +19233,18 @@ postcss-custom-media@^7.0.8: dependencies: postcss "^7.0.14" +postcss-custom-media@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz#1be6aff8be7dc9bf1fe014bde3b71b92bb4552f1" + integrity sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g== + +postcss-custom-properties@^12.1.2: + version "12.1.3" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.3.tgz#8e37651c7188e72e6762eeae8db39755e84d3a64" + integrity sha512-rtu3otIeY532PnEuuBrIIe+N+pcdbX/7JMZfrcL09wc78YayrHw5E8UkDfvnlOhEUrI4ptCuzXQfj+Or6spbGA== + dependencies: + postcss-value-parser "^4.2.0" + postcss-custom-properties@^8.0.11: version "8.0.11" resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz" @@ -18007,6 +19261,13 @@ postcss-custom-selectors@^5.1.2: postcss "^7.0.2" postcss-selector-parser "^5.0.0-rc.3" +postcss-custom-selectors@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz#022839e41fbf71c47ae6e316cb0e6213012df5ef" + integrity sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q== + dependencies: + postcss-selector-parser "^6.0.4" + postcss-dir-pseudo-class@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz" @@ -18015,6 +19276,13 @@ postcss-dir-pseudo-class@^5.0.0: postcss "^7.0.2" postcss-selector-parser "^5.0.0-rc.3" +postcss-dir-pseudo-class@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.3.tgz#febfe305e75267913a53bf5094c7679f5cfa9b55" + integrity sha512-qiPm+CNAlgXiMf0J5IbBBEXA9l/Q5HGsNGkL3znIwT2ZFRLGY9U2fTUpa4lqCUXQOxaLimpacHeQC80BD2qbDw== + dependencies: + postcss-selector-parser "^6.0.8" + postcss-discard-comments@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz" @@ -18043,6 +19311,13 @@ postcss-double-position-gradients@^1.0.0: postcss "^7.0.5" postcss-values-parser "^2.0.0" +postcss-double-position-gradients@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.4.tgz#2484b9785ef3ba81b0f03a279c52ec58fc5344c2" + integrity sha512-qz+s5vhKJlsHw8HjSs+HVk2QGFdRyC68KGRQGX3i+GcnUjhWhXQEmCXW6siOJkZ1giu0ddPwSO6I6JdVVVPoog== + dependencies: + postcss-value-parser "^4.2.0" + postcss-env-function@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz" @@ -18051,6 +19326,13 @@ postcss-env-function@^2.0.2: postcss "^7.0.2" postcss-values-parser "^2.0.0" +postcss-env-function@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.4.tgz#4e85359ca4fcdde4ec4b73752a41de818dbe91cc" + integrity sha512-0ltahRTPtXSIlEZFv7zIvdEib7HN0ZbUQxrxIKn8KbiRyhALo854I/CggU5lyZe6ZBvSTJ6Al2vkZecI2OhneQ== + dependencies: + postcss-value-parser "^4.2.0" + postcss-flexbugs-fixes@^4.2.1: version "4.2.1" resolved "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz" @@ -18065,6 +19347,13 @@ postcss-focus-visible@^4.0.0: dependencies: postcss "^7.0.2" +postcss-focus-visible@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.3.tgz#14635b71a6b9140f488f11f26cbc9965a13f6843" + integrity sha512-ozOsg+L1U8S+rxSHnJJiET6dNLyADcPHhEarhhtCI9DBLGOPG/2i4ddVoFch9LzrBgb8uDaaRI4nuid2OM82ZA== + dependencies: + postcss-selector-parser "^6.0.8" + postcss-focus-within@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz" @@ -18072,6 +19361,13 @@ postcss-focus-within@^3.0.0: dependencies: postcss "^7.0.2" +postcss-focus-within@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.3.tgz#0b0bf425f14a646bbfd973b463e2d20d85a3a841" + integrity sha512-fk9y2uFS6/Kpp7/A9Hz9Z4rlFQ8+tzgBcQCXAFSrXFGAbKx+4ZZOmmfHuYjCOMegPWoz0pnC6fNzi8j7Xyqp5Q== + dependencies: + postcss-selector-parser "^6.0.8" + postcss-font-variant@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz" @@ -18079,6 +19375,11 @@ postcss-font-variant@^4.0.0: dependencies: postcss "^7.0.2" +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + postcss-gap-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz" @@ -18086,6 +19387,11 @@ postcss-gap-properties@^2.0.0: dependencies: postcss "^7.0.2" +postcss-gap-properties@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.2.tgz#562fbf43a6a721565b3ca0e01008690991d2f726" + integrity sha512-EaMy/pbxtQnKDsnbEjdqlkCkROTQZzolcLKgIE+3b7EuJfJydH55cZeHfm+MtIezXRqhR80VKgaztO/vHq94Fw== + postcss-image-set-function@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz" @@ -18094,6 +19400,13 @@ postcss-image-set-function@^3.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" +postcss-image-set-function@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.4.tgz#ce91579ab2c1386d412ff5cd5e733c474b1f75ee" + integrity sha512-BlEo9gSTj66lXjRNByvkMK9dEdEGFXRfGjKRi9fo8s0/P3oEk74cAoonl/utiM50E2OPVb/XSu+lWvdW4KtE/Q== + dependencies: + postcss-value-parser "^4.2.0" + postcss-import@14.0.2: version "14.0.2" resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz" @@ -18110,6 +19423,11 @@ postcss-initial@^3.0.0: dependencies: postcss "^7.0.2" +postcss-initial@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" + integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== + postcss-js@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz" @@ -18126,6 +19444,13 @@ postcss-lab-function@^2.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" +postcss-lab-function@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.0.3.tgz#633745b324afbcd5881da85fe2cef58b17487536" + integrity sha512-MH4tymWmefdZQ7uVG/4icfLjAQmH6o2NRYyVh2mKoB4RXJp9PjsyhZwhH4ouaCQHvg+qJVj3RzeAR1EQpIlXZA== + dependencies: + postcss-value-parser "^4.2.0" + postcss-load-config@^3.0.0, postcss-load-config@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz" @@ -18171,6 +19496,11 @@ postcss-logical@^3.0.0: dependencies: postcss "^7.0.2" +postcss-logical@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.3.tgz#9934e0fb16af70adbd94217b24d2f315ceb5c2f0" + integrity sha512-P5NcHWYrif0vK8rgOy/T87vg0WRIj3HSknrvp1wzDbiBeoDPVmiVRmkown2eSQdpPveat/MC1ess5uhzZFVnqQ== + postcss-media-minmax@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz" @@ -18178,6 +19508,11 @@ postcss-media-minmax@^4.0.0: dependencies: postcss "^7.0.2" +postcss-media-minmax@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" + integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== + postcss-merge-longhand@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz" @@ -18312,6 +19647,13 @@ postcss-nested@5.0.6: dependencies: postcss-selector-parser "^6.0.6" +postcss-nesting@^10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.1.2.tgz#2e5f811b3d75602ea18a95dd445bde5297145141" + integrity sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ== + dependencies: + postcss-selector-parser "^6.0.8" + postcss-nesting@^7.0.0: version "7.0.1" resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz" @@ -18401,6 +19743,11 @@ postcss-overflow-shorthand@^2.0.0: dependencies: postcss "^7.0.2" +postcss-overflow-shorthand@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.2.tgz#b4e9c89728cd1e4918173dfb95936b75f78d4148" + integrity sha512-odBMVt6PTX7jOE9UNvmnLrFzA9pXS44Jd5shFGGtSHY80QCuJF+14McSy0iavZggRZ9Oj//C9vOKQmexvyEJMg== + postcss-page-break@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz" @@ -18408,6 +19755,11 @@ postcss-page-break@^2.0.0: dependencies: postcss "^7.0.2" +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + postcss-place@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz" @@ -18416,7 +19768,53 @@ postcss-place@^4.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" -postcss-preset-env@6.7.0, postcss-preset-env@^6.7.0: +postcss-place@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.3.tgz#ca8040dfd937c7769a233a3bd6e66e139cf89e62" + integrity sha512-tDQ3m+GYoOar+KoQgj+pwPAvGHAp/Sby6vrFiyrELrMKQJ4AejL0NcS0mm296OKKYA2SRg9ism/hlT/OLhBrdQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@7.2.3, postcss-preset-env@^7.0.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz#01b9b6eea0ff16c27a3d514f10105d56363428a6" + integrity sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA== + dependencies: + autoprefixer "^10.4.2" + browserslist "^4.19.1" + caniuse-lite "^1.0.30001299" + css-blank-pseudo "^3.0.2" + css-has-pseudo "^3.0.3" + css-prefers-color-scheme "^6.0.2" + cssdb "^5.0.0" + postcss-attribute-case-insensitive "^5.0.0" + postcss-color-functional-notation "^4.2.1" + postcss-color-hex-alpha "^8.0.2" + postcss-color-rebeccapurple "^7.0.2" + postcss-custom-media "^8.0.0" + postcss-custom-properties "^12.1.2" + postcss-custom-selectors "^6.0.0" + postcss-dir-pseudo-class "^6.0.3" + postcss-double-position-gradients "^3.0.4" + postcss-env-function "^4.0.4" + postcss-focus-visible "^6.0.3" + postcss-focus-within "^5.0.3" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.2" + postcss-image-set-function "^4.0.4" + postcss-initial "^4.0.1" + postcss-lab-function "^4.0.3" + postcss-logical "^5.0.3" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.1.2" + postcss-overflow-shorthand "^3.0.2" + postcss-page-break "^3.0.4" + postcss-place "^7.0.3" + postcss-pseudo-class-any-link "^7.0.2" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^5.0.0" + +postcss-preset-env@^6.7.0: version "6.7.0" resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz" integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== @@ -18467,6 +19865,13 @@ postcss-pseudo-class-any-link@^6.0.0: postcss "^7.0.2" postcss-selector-parser "^5.0.0-rc.3" +postcss-pseudo-class-any-link@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.0.2.tgz#6284c2f970715c78fe992d2fac1130e9991585c9" + integrity sha512-CG35J1COUH7OOBgpw5O+0koOLUd5N4vUGKUqSAuIe4GiuLHWU96Pqp+UPC8QITTd12zYAFx76pV7qWT/0Aj/TA== + dependencies: + postcss-selector-parser "^6.0.8" + postcss-reduce-initial@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz" @@ -18490,6 +19895,11 @@ postcss-replace-overflow-wrap@^3.0.0: dependencies: postcss "^7.0.2" +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + postcss-selector-matches@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz" @@ -18506,6 +19916,13 @@ postcss-selector-not@^4.0.0: balanced-match "^1.0.0" postcss "^7.0.2" +postcss-selector-not@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz#ac5fc506f7565dd872f82f5314c0f81a05630dc7" + integrity sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ== + dependencies: + balanced-match "^1.0.0" + postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: version "5.0.0" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz" @@ -18576,7 +19993,7 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -"postcss@5 - 7", postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: +"postcss@5 - 7", postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== @@ -18593,19 +20010,10 @@ postcss@8.2.15: nanoid "^3.1.23" source-map "^0.6.1" -postcss@8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz" - integrity sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ== - dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map-js "^0.6.2" - -postcss@8.4.4: - version "8.4.4" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz" - integrity sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q== +postcss@8.4.5, postcss@^8.2.13, postcss@^8.2.14: + version "8.4.5" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" + integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== dependencies: nanoid "^3.1.30" picocolors "^1.0.0" @@ -18740,11 +20148,6 @@ process@0.11.10, process@^0.11.10: resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" @@ -18842,7 +20245,7 @@ protractor@5.4.3: webdriver-js-extender "2.1.0" webdriver-manager "^12.0.6" -proxy-addr@~2.0.5: +proxy-addr@~2.0.5, proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== @@ -18949,6 +20352,11 @@ qs@6.7.0: resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.9.6: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + qs@^6.10.0, qs@^6.4.0, qs@^6.9.4: version "6.10.1" resolved "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz" @@ -19065,6 +20473,16 @@ raw-body@2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" + integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== + dependencies: + bytes "3.1.1" + http-errors "1.8.1" + iconv-lite "0.4.24" + unpipe "1.0.0" + raw-loader@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz" @@ -20040,15 +21458,15 @@ resolve-pathname@^3.0.0: resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve-url-loader@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz" - integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== +resolve-url-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz#ee3142fb1f1e0d9db9524d539cfa166e9314f795" + integrity sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg== dependencies: adjust-sourcemap-loader "^4.0.0" convert-source-map "^1.7.0" loader-utils "^2.0.0" - postcss "^7.0.35" + postcss "^8.2.14" source-map "0.6.1" resolve-url@^0.2.1: @@ -20069,6 +21487,15 @@ resolve@1.20.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0 is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.21.0: version "1.21.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz" @@ -20282,7 +21709,7 @@ rxjs@6.5.5: dependencies: tslib "^1.9.0" -rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.0, rxjs@^6.5.4: +rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.4, rxjs@^7.0.0: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -20306,7 +21733,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -20370,13 +21797,14 @@ sass-loader@^12.2.0: klona "^2.0.4" neo-async "^2.6.2" -sass@1.44.0: - version "1.44.0" - resolved "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz" - integrity sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw== +sass@1.49.0: + version "1.49.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.0.tgz#65ec1b1d9a6bc1bae8d2c9d4b392c13f5d32c078" + integrity sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" sass@^1.29.0, sass@^1.32.8, sass@^1.42.1: version "1.43.4" @@ -20515,6 +21943,13 @@ selfsigned@^1.10.11: dependencies: node-forge "^0.10.0" +selfsigned@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.0.tgz#e927cd5377cbb0a1075302cff8df1042cc2bce5b" + integrity sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ== + dependencies: + node-forge "^1.2.0" + semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" @@ -20544,7 +21979,7 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" -semver@7.3.5, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@7.3.5, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -20575,6 +22010,25 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "1.8.1" + mime "1.6.0" + ms "2.1.3" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" @@ -20630,6 +22084,16 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" +serve-static@1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.2" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" @@ -20927,6 +22391,11 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +"source-map-js@>=0.6.2 <2.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-js@^0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz" @@ -20937,7 +22406,16 @@ source-map-js@^1.0.1: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz" integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== -source-map-loader@3.0.0, source-map-loader@^3.0.0: +source-map-loader@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" + integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.3" + source-map-js "^1.0.1" + +source-map-loader@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz" integrity sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw== @@ -20973,7 +22451,7 @@ source-map-support@0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@0.5.21, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: +source-map-support@0.5.21, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.21, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -21564,7 +23042,19 @@ stylus-loader@6.2.0, stylus-loader@^6.2.0: klona "^2.0.4" normalize-path "^3.0.0" -stylus@0.55.0, stylus@^0.55.0: +stylus@0.56.0, stylus@^0.56.0: + version "0.56.0" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.56.0.tgz#13fc85c48082db483c90d2530942fe8b0be988eb" + integrity sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA== + dependencies: + css "^3.0.0" + debug "^4.3.2" + glob "^7.1.6" + safer-buffer "^2.1.2" + sax "~1.2.4" + source-map "^0.7.3" + +stylus@^0.55.0: version "0.55.0" resolved "https://registry.npmjs.org/stylus/-/stylus-0.55.0.tgz" integrity sha512-MuzIIVRSbc8XxHH7FjkvWqkIcr1BvoMZoR/oFuAJDlh7VSaNJzrB4uJ38GRQa+mWjLXODAMzeDe0xi9GYbGwnw== @@ -21796,7 +23286,7 @@ terser-webpack-plugin@^4.2.3: terser "^5.3.4" webpack-sources "^1.4.3" -terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.1.3: +terser-webpack-plugin@^5.1.3: version "5.2.5" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz" integrity sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g== @@ -21807,14 +23297,16 @@ terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.1.3: source-map "^0.6.1" terser "^5.7.2" -terser@4.3.8: - version "4.3.8" - resolved "https://registry.npmjs.org/terser/-/terser-4.3.8.tgz" - integrity sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ== +terser-webpack-plugin@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz#21641326486ecf91d8054161c816e464435bae9f" + integrity sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ== dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + jest-worker "^27.4.1" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + terser "^5.7.2" terser@5.10.0, terser@^5.3.4, terser@^5.7.2: version "5.10.0" @@ -22018,6 +23510,11 @@ toidentifier@1.0.0: resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + token-types@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz" @@ -22173,7 +23670,7 @@ ts-loader@^9.2.6: micromatch "^4.0.0" semver "^7.3.4" -ts-node@9.1.1, ts-node@^9, ts-node@^9.1.1, ts-node@~9.1.1: +ts-node@9.1.1, ts-node@^9, ts-node@~9.1.1: version "9.1.1" resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== @@ -22198,16 +23695,7 @@ ts-type@^2.1.2: tslib "^2.3.1" typedarray-dts "^1.0.0" -tsconfig-paths-webpack-plugin@3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.4.1.tgz" - integrity sha512-HN1aWCPOXLF3dDke1w4z3RfCgmm9yTppg51FMCqZ02p6leKD4JZvvnPZtqhvnQVmoWWaQjbpO93h2WFjRJjQcA== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.7.0" - tsconfig-paths "^3.9.0" - -tsconfig-paths-webpack-plugin@^3.3.0: +tsconfig-paths-webpack-plugin@3.5.2, tsconfig-paths-webpack-plugin@^3.3.0: version "3.5.2" resolved "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz" integrity sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw== @@ -22439,15 +23927,15 @@ typedoc@^0.22.5: minimatch "^3.0.4" shiki "^0.9.12" -typescript@4.4.4, typescript@~4.4.3: +typescript@4.4.4: version "4.4.4" resolved "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz" integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== -typescript@4.5.3: - version "4.5.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz" - integrity sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ== +typescript@4.5.5, typescript@^4.5.3, typescript@~4.5.2: + version "4.5.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" + integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== typescript@^4.4.3: version "4.5.2" @@ -23208,10 +24696,10 @@ webidl-conversions@^6.1.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-dev-middleware@5.2.2, webpack-dev-middleware@^5.2.1: - version "5.2.2" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz" - integrity sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w== +webpack-dev-middleware@5.3.0, webpack-dev-middleware@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz#8fc02dba6e72e1d373eca361623d84610f27be7c" + integrity sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg== dependencies: colorette "^2.0.10" memfs "^3.2.2" @@ -23230,11 +24718,27 @@ webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.3: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.6.0.tgz" - integrity sha512-oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg== +webpack-dev-middleware@^5.2.1: + version "5.2.2" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz" + integrity sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w== dependencies: + colorette "^2.0.10" + memfs "^3.2.2" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@4.7.3: + version "4.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz#4e995b141ff51fa499906eebc7906f6925d0beaa" + integrity sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/serve-index" "^1.9.1" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.2.2" ansi-html-community "^0.0.8" bonjour "^3.5.0" chokidar "^3.5.2" @@ -23252,13 +24756,12 @@ webpack-dev-server@4.6.0: p-retry "^4.5.0" portfinder "^1.0.28" schema-utils "^4.0.0" - selfsigned "^1.10.11" + selfsigned "^2.0.0" serve-index "^1.9.1" sockjs "^0.3.21" spdy "^4.0.2" strip-ansi "^7.0.0" - url "^0.11.0" - webpack-dev-middleware "^5.2.1" + webpack-dev-middleware "^5.3.0" ws "^8.1.0" webpack-dev-server@^4.3.1: @@ -23328,7 +24831,7 @@ webpack-node-externals@^3.0.0: resolved "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz" integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== -webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -23341,10 +24844,15 @@ webpack-sources@^3.0.0, webpack-sources@^3.0.2, webpack-sources@^3.2.2: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz" integrity sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw== -webpack-subresource-integrity@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.0.0.tgz" - integrity sha512-x9514FpLRydO+UAQ8DY4aLtCjxmdLkuQVcDFN1kGzuusREYJ1B0rzk/iIlWiL6dnvrhEGFj2+UsdxDkP8Z4UKg== +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-subresource-integrity@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz#8b7606b033c6ccac14e684267cb7fb1f5c2a132a" + integrity sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q== dependencies: typed-assert "^1.0.8" @@ -23391,10 +24899,10 @@ webpack@4: watchpack "^1.7.4" webpack-sources "^1.4.1" -webpack@5.65.0: - version "5.65.0" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz" - integrity sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw== +webpack@5.67.0: + version "5.67.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.67.0.tgz#cb43ca2aad5f7cc81c4cd36b626e6b819805dbfd" + integrity sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -23410,7 +24918,7 @@ webpack@5.65.0: eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" json-parse-better-errors "^1.0.2" loader-runner "^4.2.0" mime-types "^2.1.27" @@ -23419,7 +24927,7 @@ webpack@5.65.0: tapable "^2.1.1" terser-webpack-plugin "^5.1.3" watchpack "^2.3.1" - webpack-sources "^3.2.2" + webpack-sources "^3.2.3" webpack@^5.37.0, webpack@^5.58.1: version "5.64.1"