Compare commits

...

9 Commits

Author SHA1 Message Date
Jason Jean 9d2930d8ea chore(misc): publish 15.0.8 2022-11-03 17:19:35 -04:00
Philip Fulcher 7120f22699 chore(graph): upgrade to Cypress 10 (#12980) 2022-11-03 17:08:20 -04:00
Benjamin Cabanes 1f407bccf1 docs(nxdev): extract dynamic loading for lazy component (#12979) 2022-11-03 17:08:20 -04:00
Jason Jean c8a23cf0a5 fix(core): fix migrations for projects with package.json configuration (#12977) 2022-11-03 17:08:20 -04:00
Philip Fulcher e5ff6283b5 cleanup(graph): fix flaky graph tests (#12976) 2022-11-03 17:08:20 -04:00
Isaac Mann 148f4c391c docs(core): update caching and dte guides 2022-11-03 17:08:20 -04:00
Jack Hsu b5de60ea0d docs(misc): fix whitespaces for EmptyList component (#12974) 2022-11-03 17:08:20 -04:00
Abhishek Gupta b8d513cac1 chore(misc): nx plugin submission @mands/nx-playwright (#12458) 2022-11-03 17:08:20 -04:00
Victor Savkin 805b5f643e chore(repo): update to 15.0.2-beta.1 2022-11-03 17:08:20 -04:00
61 changed files with 1137 additions and 374 deletions
+5
View File
@@ -323,5 +323,10 @@
"name": "@koliveira15/nx-sonarqube",
"description": "Nx plugin that analyses projects using SonarQube / SonarCloud.",
"url": "https://github.com/koliveira15/nx-sonarqube"
},
{
"name": "@mands/nx-playwright",
"description": "The Playwright plugin allows your workspace to use the power of Playwright end-to-end testing using a native runner.",
"url": "https://github.com/marksandspencer/nx-plugins/tree/main/packages/nx-playwright"
}
]
+1 -1
View File
@@ -327,7 +327,7 @@
},
"additionalProperties": true,
"required": ["script"],
"examplesFile": "`workspace.json`:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n\n```bash\nnx run frontend:build\n```\n\nThe `build` target is going to run `npm run build-my-project` (or `yarn build-my-project`) in the `packages/frontend` directory.\n\n#### Caching Artifacts\n\nBy default, Nx is going to cache `dist/packages/frontend`, `packages/frontend/dist`, `packages/frontend/build`, `packages/frontend/public`. If your npm script writes files to other places, you can override the list of cached outputs as follows:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"outputs\": [\"packages/frontend/dist\", \"packaged/frontend/docs\"],\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n",
"examplesFile": "`workspace.json`:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n\n```bash\nnx run frontend:build\n```\n\nThe `build` target is going to run `npm run build-my-project` (or `yarn build-my-project`) in the `packages/frontend` directory.\n\n#### Caching Artifacts\n\nBy default, Nx is going to cache `dist/packages/frontend`, `packages/frontend/dist`, `packages/frontend/build`, `packages/frontend/public`. If your npm script writes files to other places, you can override the list of cached outputs as follows:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"outputs\": [\"{projectRoot}/dist\", \"{projectRoot}/docs\"],\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n",
"presets": []
},
"description": "Run an NPM script using Nx.",
+2 -2
View File
@@ -776,7 +776,7 @@
}
},
"required": ["platform", "entryFile", "bundleOutput"],
"examplesFile": "`project.json`:\n\n```json\n{\n \"name\": \"mobile\",\n //...\n \"targets\": {\n //...\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"outputs\": [\"apps/mobile/build\"],\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\"\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\"\n }\n }\n }\n}\n```\n\n```bash\nnx run mobile:bundle-ios\nnx run mobile:bundle-android\n```\n\n## Examples\n\n{% tabs %}\n{% tab label=\"Bundle with sourcemap\" %}\nThe `sourcemapOutput` option allows you to specify the path of the source map relative to app folder:\n\n```json\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\",\n \"sourcemapOutput\": \"../../dist/apps/mobile/ios/main.map\",\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\",\n \"sourcemapOutput\": \"../../dist/apps/mobile/android/main.map\",\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Create a dev/release bundle\" %}\n\nThe `dev` option determines whether to create a dev or release bundle. The default value is `true`, by setting it as `false`, warnings are disabled and the bundle is minified.\n\n```json\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\",\n \"dev\": false\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\",\n \"dev\": false\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Create a minified bundle\" %}\n\nThe `minify` option allows you to create a minified bundle:\n\n```json\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\",\n \"minify\": true\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\",\n \"minify\": true\n }\n }\n```\n\n{% /tab %}\n{% /tabs %}\n\n---\n",
"examplesFile": "`project.json`:\n\n```json\n{\n \"name\": \"mobile\",\n //...\n \"targets\": {\n //...\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"outputs\": [\"{projectRoot}/build\"],\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\"\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\"\n }\n }\n }\n}\n```\n\n```bash\nnx run mobile:bundle-ios\nnx run mobile:bundle-android\n```\n\n## Examples\n\n{% tabs %}\n{% tab label=\"Bundle with sourcemap\" %}\nThe `sourcemapOutput` option allows you to specify the path of the source map relative to app folder:\n\n```json\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\",\n \"sourcemapOutput\": \"../../dist/apps/mobile/ios/main.map\",\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\",\n \"sourcemapOutput\": \"../../dist/apps/mobile/android/main.map\",\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Create a dev/release bundle\" %}\n\nThe `dev` option determines whether to create a dev or release bundle. The default value is `true`, by setting it as `false`, warnings are disabled and the bundle is minified.\n\n```json\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\",\n \"dev\": false\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\",\n \"dev\": false\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Create a minified bundle\" %}\n\nThe `minify` option allows you to create a minified bundle:\n\n```json\n \"bundle-ios\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"ios\",\n \"bundleOutput\": \"dist/apps/mobile/ios/main.jsbundle\",\n \"minify\": true\n }\n },\n \"bundle-android\": {\n \"executor\": \"@nrwl/react-native:bundle\",\n \"options\": {\n \"entryFile\": \"src/main.tsx\",\n \"platform\": \"android\",\n \"bundleOutput\": \"dist/apps/mobile/android/main.jsbundle\",\n \"minify\": true\n }\n }\n```\n\n{% /tab %}\n{% /tabs %}\n\n---\n",
"presets": []
},
"description": "Builds the JavaScript bundle for offline use.",
@@ -811,7 +811,7 @@
}
},
"required": [],
"examplesFile": "`project.json`:\n\n```json\n{\n \"name\": \"mobile\",\n //...\n \"targets\": {\n //...\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"apps/mobile/android/app/build/outputs/bundle\",\n \"apps/mobile/android/app/build/outputs/apk\"\n ],\n \"options\": {}\n }\n }\n}\n```\n\n```bash\nnx run mobile:build-android\n```\n\n## Examples\n\n{% tabs %}\n{% tab label=\"Build with custom gradleTask\" %}\nThe `gradleTask` option accepts any custom gradle task, such as `assembleDebug`, `assembleRelease`, `bundleDebug`, `bundleRelease`:\n\n```json\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"apps/mobile/android/app/build/outputs/bundle\",\n \"apps/mobile/android/app/build/outputs/apk\"\n ],\n \"options\": {\n \"gradleTask\": \"assembleDebug\"\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Create a build with apk format\" %}\n\nThe `apk` option allows you determine the format of android build. If set as true, it will create a build with `.apk` extension under apk folder; if set as false, it will create with `.aab` extension under bundle folder.\n\n```json\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"apps/mobile/android/app/build/outputs/bundle\",\n \"apps/mobile/android/app/build/outputs/apk\"\n ],\n \"options\": {\n \"apk\": true\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Build for debug/release\" %}\n\nIf set `debug` option as `true`, it will create a debug build; if set as `false`, it will create a release build.\n\n```json\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"apps/mobile/android/app/build/outputs/bundle\",\n \"apps/mobile/android/app/build/outputs/apk\"\n ],\n \"options\": {\n \"debug\": true\n }\n }\n```\n\n{% /tab %}\n{% /tabs %}\n\n---\n",
"examplesFile": "`project.json`:\n\n```json\n{\n \"name\": \"mobile\",\n //...\n \"targets\": {\n //...\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"{projectRoot}/build/outputs/bundle\",\n \"{projectRoot}/build/outputs/apk\"\n ],\n \"options\": {}\n }\n }\n}\n```\n\n```bash\nnx run mobile:build-android\n```\n\n## Examples\n\n{% tabs %}\n{% tab label=\"Build with custom gradleTask\" %}\nThe `gradleTask` option accepts any custom gradle task, such as `assembleDebug`, `assembleRelease`, `bundleDebug`, `bundleRelease`:\n\n```json\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"{projectRoot}/build/outputs/bundle\",\n \"{projectRoot}/build/outputs/apk\"\n ],\n \"options\": {\n \"gradleTask\": \"assembleDebug\"\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Create a build with apk format\" %}\n\nThe `apk` option allows you determine the format of android build. If set as true, it will create a build with `.apk` extension under apk folder; if set as false, it will create with `.aab` extension under bundle folder.\n\n```json\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"{projectRoot}/build/outputs/bundle\",\n \"{projectRoot}/build/outputs/apk\"\n ],\n \"options\": {\n \"apk\": true\n }\n }\n```\n\n{% /tab %}\n{% tab label=\"Build for debug/release\" %}\n\nIf set `debug` option as `true`, it will create a debug build; if set as `false`, it will create a release build.\n\n```json\n \"build-android\": {\n \"executor\": \"@nrwl/react-native:build-android\",\n \"outputs\": [\n \"{projectRoot}/build/outputs/bundle\",\n \"{projectRoot}/build/outputs/apk\"\n ],\n \"options\": {\n \"debug\": true\n }\n }\n```\n\n{% /tab %}\n{% /tabs %}\n\n---\n",
"presets": []
},
"description": "Release Build for Android.",
+1 -1
View File
@@ -853,7 +853,7 @@
},
"additionalProperties": true,
"required": ["script"],
"examplesFile": "`workspace.json`:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n\n```bash\nnx run frontend:build\n```\n\nThe `build` target is going to run `npm run build-my-project` (or `yarn build-my-project`) in the `packages/frontend` directory.\n\n#### Caching Artifacts\n\nBy default, Nx is going to cache `dist/packages/frontend`, `packages/frontend/dist`, `packages/frontend/build`, `packages/frontend/public`. If your npm script writes files to other places, you can override the list of cached outputs as follows:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"outputs\": [\"packages/frontend/dist\", \"packaged/frontend/docs\"],\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n",
"examplesFile": "`workspace.json`:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n\n```bash\nnx run frontend:build\n```\n\nThe `build` target is going to run `npm run build-my-project` (or `yarn build-my-project`) in the `packages/frontend` directory.\n\n#### Caching Artifacts\n\nBy default, Nx is going to cache `dist/packages/frontend`, `packages/frontend/dist`, `packages/frontend/build`, `packages/frontend/public`. If your npm script writes files to other places, you can override the list of cached outputs as follows:\n\n```json\n\"frontend\": {\n \"root\": \"packages/frontend\",\n \"targets\": {\n \"build\": {\n \"executor\": \"nx:run-script\",\n \"outputs\": [\"{projectRoot}/dist\", \"{projectRoot}/docs\"],\n \"options\": {\n \"script\": \"build-my-project\"\n }\n }\n }\n}\n```\n",
"presets": []
},
"description": "Run an NPM script using Nx.",
+103 -20
View File
@@ -31,28 +31,41 @@ the result of the test run.
Now, run the following command twice. The second time the operation will be instant:
```{% command="nx test header"%}
> nx run header:test [existing outputs match the cache, left as is]
> header@0.0.0 test
> jest
PASS src/Header.spec.tsx
✓ renders header (14 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.528 s, estimated 2 s
Ran all test suites.
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
> NX Successfully ran target test for project header (4ms)
Nx read the output from the cache instead of running the command for 1 out of 1 tasks.
```shell
nx build header
```
```{% command="nx build header"%}
> nx run header:build [local cache]
> header@0.0.0 build
> rimraf dist && rollup --config
src/index.tsx → dist...
created dist in 858ms
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
> NX Successfully ran target build for project header (13ms)
Nx read the output from the cache instead of running the command for 1 out of 1 tasks.
```
## Replaying from Cache
When Nx determines that the inputs for a task have not changed, it recreates the outputs of that task as if it actually ran on your machine - but much faster. The outputs of a cached task include both the terminal output and the files created in the defined `output` directories for that task.
You can test this out by deleting the `dist` folder that the `header:build` task outputs to and then running `nx build header` again. The cached task will replay instantly and the correct files will be present in the `dist` folder.
```treeview
header/
└── dist/ <-- this folder gets recreated
```
If your task creates output artifacts in a different location, you can [change the output folder(s)](/reference/project-configuration#outputs) that are cached. You can also [customize which inputs](/more-concepts/customizing-inputs) will invalidate the cache if they are changed.
## Advanced Caching
For a more in-depth understanding of the caching implementation and to fine-tune the caching for your repo, read [How Caching Works](/concepts/how-caching-works).
@@ -75,6 +88,76 @@ You can connect your workspace to Nx Cloud by running:
npx nx connect-to-nx-cloud
```
```{% command="npx nx connect-to-nx-cloud"%}
✔ Enable distributed caching to make your CI faster · Yes
> NX Generating @nrwl/nx-cloud:init
UPDATE nx.json
> NX Distributed caching via Nx Cloud has been enabled
In addition to the caching, Nx Cloud provides config-free distributed execution,
UI for viewing complex runs and GitHub integration. Learn more at https://nx.app
Your workspace is currently unclaimed. Run details from unclaimed workspaces can be viewed on cloud.nx.app by anyone
with the link. Claim your workspace at the following link to restrict access.
https://cloud.nx.app/orgs/workspace-setup?accessToken=YOURACCESSTOKEN
```
To see the remote cache in action, run:
```shell
nx build header && nx reset && nx build header
```
```{% command="nx build header && nx reset && nx build header"%}
> nx run header:build
> header@0.0.0 build
> rimraf dist && rollup --config
src/index.tsx → dist...
created dist in 786ms
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
> NX Successfully ran target build for project header (2s)
See logs and investigate cache misses at https://cloud.nx.app/runs/k0HDHACpL8
> NX Resetting the Nx workspace cache and stopping the Nx Daemon.
This might take a few minutes.
> NX Daemon Server - Stopped
> NX Successfully reset the Nx workspace.
> nx run header:build [remote cache]
> header@0.0.0 build
> rimraf dist && rollup --config
src/index.tsx → dist...
created dist in 786ms
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
> NX Successfully ran target build for project header (664ms)
Nx read the output from the cache instead of running the command for 1 out of 1 tasks.
Nx Cloud made it possible to reuse header: https://nx.app/runs/P0X6ZGTkqZ
```
## See Also:
- [Nx Cloud Documentation](/nx-cloud/intro/what-is-nx-cloud)
@@ -1,8 +1,18 @@
# Distribute Task Execution (DTE)
Nx supports running commands across multiple machines. You can either set it up by hand (by using batching or binning) or use Nx Cloud.
Nx speeds up your average CI time with [caching](/core-features/cache-task-results) and the [affected command](/concepts/affected). But neither of these features help with the worst case scenario. When something at the core of your repo has been modified and every task needs to be run in CI, the only way to improve the performance is by adding more agent jobs and efficiently parallelizing the tasks.
[Read the comparison of the two approaches.](https://blog.nrwl.io/distributing-ci-binning-and-distributed-task-execution-632fe31a8953?source=friends_link&sk=5120b7ff982730854ed22becfe7a640a)
The most obvious way to parallelize tasks is to split tasks up by type: running all tests on one job, all builds on another and all lint tasks on a third. This strategy is called binning. This can be made difficult if some test tasks have build tasks as prerequisites, but assuming you figure out some way to handle that, a typical set up can look like the diagram below. Here the test tasks are delayed until all necessary build artifacts are ready, but the build and lint tasks can start right away.
![CI using binning](../images/dte/binning.svg)
The problem with the binning approach is you'll end up with some idle time on one or more jobs. Nx's distributed task execution reduces that idle time to the minimum possible by assigning each individual task to agent jobs based on the task's average run time. Nx also guarantees that tasks are executed in the correct order and uses distributed caching to make sure that build artifacts from previous tasks are present on every agent job that needs them.
When you set up Nx's distributed task execution, your task graph will look more like this:
![CI using DTE](../images/dte/3agents.svg)
And not only will CI finish faster, but the debugging experience is the same as if you ran all of your CI on a single job. That's because Nx uses distributed caching to recreate all of the logs and build artifacts on the main job.
## Set up
@@ -20,10 +30,10 @@ The `--ci` flag can be `github`, `circleci` or `azure`. For more details on sett
## CI Execution Flow
There are two main parts to the CI set up:
Distributed task execution can work on any CI provider. You are responsible for launching jobs in your CI system. Nx Cloud then coordinates the way those jobs work together. There are two different kinds of jobs that you'll need to create in your CI system.
1. The main job that controls what is going to be executed
2. The agent jobs that actually execute the tasks
1. One main job that controls what is going to be executed
2. Multiple agent jobs that actually execute the tasks
The main job execution flow looks like this:
+477 -1
View File
@@ -23,4 +23,480 @@ focus of the visualization down to the most useful part of the graph at the mome
Once the graph is displayed, you can click on an individual dependency link to find out what specific file(s) created
that dependency.
![Project Graph screenshot](../images/project-graph.png)
Try playing around with a [fully interactive graph on a sample repo](https://nrwl-nx-examples-dep-graph.netlify.app/?focus=cart) or look at the more limited example below:
{% graph height="450px" %}
```json
{
"hash": "58420bb4002bb9b6914bdeb7808c77a591a089fc82aaee11e656d73b2735e3fa",
"projects": [
{
"name": "shared-product-state",
"type": "lib",
"data": {
"tags": ["scope:shared", "type:state"],
"root": "libs/shared/product/state",
"files": [
{
"file": "libs/shared/product/state/.babelrc",
"hash": "0cae4a9a81270d6cf3315436f594bf2fbd4fb3e2"
},
{
"file": "libs/shared/product/state/.eslintrc.json",
"hash": "eee5f453593a2b8e7f865305029b7edc3449cca6"
},
{
"file": "libs/shared/product/state/jest.config.ts",
"hash": "9184d1913ec49fa254d1ebdcffd99d31d07b5353"
},
{
"file": "libs/shared/product/state/project.json",
"hash": "4c6c7ea6d808bb99a3784b4fd92b3b290ec94397"
},
{
"file": "libs/shared/product/state/README.md",
"hash": "63538ffc745d3f82d93bcfbd61608057bf9cafaf"
},
{
"file": "libs/shared/product/state/src/index.ts",
"hash": "0f1e1c9a63ae70e3c2cadd493263853511567dfd",
"deps": ["npm:@ngrx/store"]
},
{
"file": "libs/shared/product/state/src/lib/+state/products.actions.ts",
"hash": "4c0efeeec1adfcecd34b20bda87fce5f24a64675",
"deps": ["npm:@ngrx/store"]
},
{
"file": "libs/shared/product/state/src/lib/+state/products.reducer.spec.ts",
"hash": "b2821f72394868ca503eb637f2891564851583eb",
"deps": ["npm:@ngrx/store", "shared-product-data"]
},
{
"file": "libs/shared/product/state/src/lib/+state/products.reducer.ts",
"hash": "9168586d19b76b0dd462dafbb5b6998c4da5ba53",
"deps": ["shared-product-data", "shared-product-types"]
},
{
"file": "libs/shared/product/state/src/lib/+state/products.selectors.spec.ts",
"hash": "d22772ca82cb0f57a96d11fa3cb8f5a0e238c6d8",
"deps": ["shared-product-data"]
},
{
"file": "libs/shared/product/state/src/lib/+state/products.selectors.ts",
"hash": "da9e68bf4631ddb35e19659c3db04a0953a62a61"
},
{
"file": "libs/shared/product/state/src/lib/shared-product-state.module.spec.ts",
"hash": "2aab0223be6028d16f8cddc8ac033b362eae21e2",
"deps": ["npm:@angular/core"]
},
{
"file": "libs/shared/product/state/src/lib/shared-product-state.module.ts",
"hash": "45820bfa99997f35e6576d526fa228b7a5638cca",
"deps": [
"npm:@angular/common",
"npm:@angular/core",
"npm:@ngrx/store"
]
},
{
"file": "libs/shared/product/state/src/react.ts",
"hash": "fa1cb4754b3dd584ba8ca23fe462c906f59945d6"
},
{
"file": "libs/shared/product/state/src/test-setup.ts",
"hash": "1100b3e8a6ed08f4b5c27a96471846d57023c320",
"deps": ["npm:jest-preset-angular"]
},
{
"file": "libs/shared/product/state/tsconfig.json",
"hash": "a9a0b978b3edf84247a550ba82d8eea50dc8da68"
},
{
"file": "libs/shared/product/state/tsconfig.lib.json",
"hash": "3b1fbbb954624d075826446e0060d243813ebcf1"
},
{
"file": "libs/shared/product/state/tsconfig.spec.json",
"hash": "8603a008c3b77e77e142939e83e05e4a1043fbc6"
}
]
}
},
{
"name": "shared-product-types",
"type": "lib",
"data": {
"tags": ["type:types", "scope:shared"],
"root": "libs/shared/product/types",
"files": [
{
"file": "libs/shared/product/types/.babelrc",
"hash": "0cae4a9a81270d6cf3315436f594bf2fbd4fb3e2"
},
{
"file": "libs/shared/product/types/.eslintrc.json",
"hash": "deb72aabdf74e23f16519b8cbeb5d63e769cd470"
},
{
"file": "libs/shared/product/types/project.json",
"hash": "92202a2aaf4c482dd8e463ddefc6d0eb6f5640f2"
},
{
"file": "libs/shared/product/types/README.md",
"hash": "a3308045207635951262c7c81e93c4afafb484c4"
},
{
"file": "libs/shared/product/types/src/index.ts",
"hash": "6b3cdd251890a858bace2be04ff2ef2920d68b76"
},
{
"file": "libs/shared/product/types/src/lib/shared-product-types.ts",
"hash": "4f99c082564a63944be3e035c4ef47cc060b3af9"
},
{
"file": "libs/shared/product/types/tsconfig.json",
"hash": "e7879c9efcfa2e1c35b5373b03b4b7ea276795ac"
},
{
"file": "libs/shared/product/types/tsconfig.lib.json",
"hash": "a174cb09c30e46285517c7308247d602414aa63f"
}
]
}
},
{
"name": "shared-product-data",
"type": "lib",
"data": {
"tags": ["type:data", "scope:shared"],
"root": "libs/shared/product/data",
"files": [
{
"file": "libs/shared/product/data/.babelrc",
"hash": "0cae4a9a81270d6cf3315436f594bf2fbd4fb3e2"
},
{
"file": "libs/shared/product/data/.eslintrc.json",
"hash": "0576ff84e48f121399441a189bc1cd2a35fbca47"
},
{
"file": "libs/shared/product/data/project.json",
"hash": "8c12bcd46a2d49861cd71b6b9502bf5a408c380d"
},
{
"file": "libs/shared/product/data/README.md",
"hash": "a433a7f8582e93329c762709f617d5d146b763f1"
},
{
"file": "libs/shared/product/data/src/index.ts",
"hash": "0818cd09cdd02861b3319fd08cfcd2abf29539b4"
},
{
"file": "libs/shared/product/data/src/lib/product-data.mock.ts",
"hash": "dedcafc80a6cf40d3f644c8f88679b0182fd1c00"
},
{
"file": "libs/shared/product/data/src/lib/shared-product-data.ts",
"hash": "37d51e532586fe98ac35c9236e8fd538718cf14f",
"deps": ["shared-product-types"]
},
{
"file": "libs/shared/product/data/src/testing.ts",
"hash": "d80ae5191bdb9c730883065e07d95876d1a701c9"
},
{
"file": "libs/shared/product/data/tsconfig.json",
"hash": "e7879c9efcfa2e1c35b5373b03b4b7ea276795ac"
},
{
"file": "libs/shared/product/data/tsconfig.lib.json",
"hash": "a174cb09c30e46285517c7308247d602414aa63f"
}
]
}
},
{
"name": "cart-cart-page",
"type": "lib",
"data": {
"tags": ["scope:cart", "type:feature"],
"root": "libs/cart/cart-page",
"files": [
{
"file": "libs/cart/cart-page/.babelrc",
"hash": "2563bbc7a3a07754d9cce33fed581595cefca651"
},
{
"file": "libs/cart/cart-page/.eslintrc.json",
"hash": "0790d98fc5188ef5b9707e0a47792b30e87f807f"
},
{
"file": "libs/cart/cart-page/jest.config.ts",
"hash": "cfd45fc556295c42c6b09f864a82309d649e452f"
},
{
"file": "libs/cart/cart-page/project.json",
"hash": "9965bbb55c9fdbde736ea98d368bba6758183d72"
},
{
"file": "libs/cart/cart-page/README.md",
"hash": "e849e84b78b7b1c409567b4dadebf54b1ef45ca6"
},
{
"file": "libs/cart/cart-page/src/index.ts",
"hash": "ad4674d7e1cfad04953cff1084cb229d81bcfa94"
},
{
"file": "libs/cart/cart-page/src/lib/cart-cart-page/cart-cart-page.spec.tsx",
"hash": "496df785798bd335433efac1ce9b63f4837d8862",
"deps": ["npm:@testing-library/react"]
},
{
"file": "libs/cart/cart-page/src/lib/cart-cart-page/cart-cart-page.tsx",
"hash": "384ca9a17a3379dfacf6a6c4fb672d0b6f223997",
"deps": [
"npm:react",
"npm:@emotion/styled",
"shared-product-ui",
"shared-cart-state",
"shared-product-state"
]
},
{
"file": "libs/cart/cart-page/src/test-setup.ts",
"hash": "d8508d703266e7390b30189d3cf7fec7a70b198c",
"deps": ["npm:document-register-element"]
},
{
"file": "libs/cart/cart-page/tsconfig.json",
"hash": "cd38e3e04409f21cefb92c2531b7f539fc2db14d"
},
{
"file": "libs/cart/cart-page/tsconfig.lib.json",
"hash": "8dcf07ce29e8bca717ce2672fb9f2ac5c9ab0556"
},
{
"file": "libs/cart/cart-page/tsconfig.spec.json",
"hash": "e1535ba9d07c38511f465f5427c9c5a39ab3b174"
}
]
}
},
{
"name": "shared-styles",
"type": "lib",
"data": {
"tags": ["scope:shared", "type:styles"],
"root": "libs/shared/styles",
"files": [
{
"file": "libs/shared/styles/project.json",
"hash": "47566a51c14545b7fa381bbfddd4e36217c80c69"
},
{
"file": "libs/shared/styles/README.md",
"hash": "726adf41353f106db057050b4b8d0e8784c6eed5"
},
{
"file": "libs/shared/styles/src/index.scss",
"hash": "4242c2389d84fc3062a84cddb0f6b94427304803"
},
{
"file": "libs/shared/styles/src/lib/global.scss",
"hash": "55caa35d877ea8028f97134fa985a0b7e772f963"
}
]
}
},
{
"name": "cart-e2e",
"type": "e2e",
"data": {
"tags": ["scope:cart", "type:e2e"],
"root": "apps/cart-e2e",
"files": [
{
"file": "apps/cart-e2e/.eslintrc.json",
"hash": "082395fbd03ae178157f9ebd4d374d208fd254f8"
},
{
"file": "apps/cart-e2e/cypress.config.ts",
"hash": "f292e4c8c9a6268418b17d7ff125bef64c961a4c",
"deps": ["npm:cypress", "npm:@nrwl/cypress"]
},
{
"file": "apps/cart-e2e/project.json",
"hash": "02852d8c5cc3c57e82bdfe47858d97b36a3a1cb6"
},
{
"file": "apps/cart-e2e/src/e2e/app.cy.ts",
"hash": "2971885c601f09176516333d80a59f6e61ceaf9f",
"deps": ["shared-e2e-utils"]
},
{
"file": "apps/cart-e2e/src/fixtures/example.json",
"hash": "294cbed6ce9e0b948b787452e8676aee486cb3be"
},
{
"file": "apps/cart-e2e/src/support/app.po.ts",
"hash": "c29f04f1c8d7c8722fbf705b3d951333c4fb95fc"
},
{
"file": "apps/cart-e2e/src/support/commands.ts",
"hash": "ca4d256f3eb15dfabad1f5760c9b2d0ceb4c24b9"
},
{
"file": "apps/cart-e2e/src/support/e2e.ts",
"hash": "3d469a6b6cf31eb66117d73e278bcf74f398f1db"
},
{
"file": "apps/cart-e2e/tsconfig.json",
"hash": "cc509a730e12498509bb7475f6f54b1a18021191"
}
]
}
},
{
"name": "cart",
"type": "app",
"data": {
"tags": ["type:app", "scope:cart"],
"root": "apps/cart",
"files": [
{
"file": "apps/cart/.babelrc",
"hash": "61641ec8ac3659e204441c80bb06defe323e3110"
},
{
"file": "apps/cart/.eslintrc.json",
"hash": "4e6e0b82073fa77dc1c5b2f926d5d9d5d3cf2585"
},
{
"file": "apps/cart/browserlist",
"hash": "37371cb04b9f1986d952499cdf9613c9d5d8ca8c"
},
{
"file": "apps/cart/jest.config.ts",
"hash": "af92cac53c45ca46b882c00a5f87d486a2755986"
},
{
"file": "apps/cart/project.json",
"hash": "d950429fa06f12953744ce20e4585247c98486c6"
},
{
"file": "apps/cart/src/_redirects",
"hash": "50d93f23ab427b2911555db1a5c9a023293f470a"
},
{
"file": "apps/cart/src/app/app.spec.tsx",
"hash": "be06392eb51b8d8fd62a0c3dc8c4fa3c8ee76aca",
"deps": ["npm:react-router-dom", "npm:@testing-library/react"]
},
{
"file": "apps/cart/src/app/app.tsx",
"hash": "4206822dc52f06828ef3192e385bad60262d8a40",
"deps": ["npm:react-router-dom", "shared-header", "cart-cart-page"]
},
{
"file": "apps/cart/src/assets/.gitkeep",
"hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"
},
{
"file": "apps/cart/src/environments/environment.prod.ts",
"hash": "c9669790be176ac85a5d8c11278875c2f52dc507"
},
{
"file": "apps/cart/src/environments/environment.ts",
"hash": "7ed83767fff25adfed19d52b2821a432f8ed18b1"
},
{
"file": "apps/cart/src/favicon.ico",
"hash": "a11777cc471a4344702741ab1c8a588998b1311a"
},
{
"file": "apps/cart/src/index.html",
"hash": "1a7a74ec69f2b7a86ee7918f412e25edff23ebfb"
},
{
"file": "apps/cart/src/main.tsx",
"hash": "7991369e387a2b974b678a86c6eb006fd9757d8e",
"deps": ["npm:react-dom", "npm:react-router-dom"]
},
{
"file": "apps/cart/src/polyfills.ts",
"hash": "83926853099fe077c00663db9909f25c9a3b769d"
},
{
"file": "apps/cart/src/test-setup.ts",
"hash": "d8508d703266e7390b30189d3cf7fec7a70b198c",
"deps": ["npm:document-register-element"]
},
{
"file": "apps/cart/tsconfig.app.json",
"hash": "ce67a8f6f0c3345266081568fbe122381c7b82a2"
},
{
"file": "apps/cart/tsconfig.json",
"hash": "e7d37b3ecd2df29a7bf98d03d015f73dbaf0e723"
},
{
"file": "apps/cart/tsconfig.spec.json",
"hash": "99a0ce08de0901250105669917e582aba6e8697e"
}
]
}
}
],
"dependencies": {
"shared-product-state": [
{
"source": "shared-product-state",
"target": "shared-product-data",
"type": "static"
},
{
"source": "shared-product-state",
"target": "shared-product-types",
"type": "static"
}
],
"shared-product-types": [],
"shared-product-data": [
{
"source": "shared-product-data",
"target": "shared-product-types",
"type": "static"
}
],
"shared-e2e-utils": [],
"cart-cart-page": [
{
"source": "cart-cart-page",
"target": "shared-product-state",
"type": "static"
}
],
"shared-styles": [],
"cart-e2e": [
{ "source": "cart-e2e", "target": "cart", "type": "implicit" }
],
"cart": [
{ "source": "cart", "target": "shared-styles", "type": "implicit" },
{ "source": "cart", "target": "cart-cart-page", "type": "static" }
]
},
"workspaceLayout": {
"appsDir": "apps",
"libsDir": "libs"
},
"affectedProjectIds": [],
"focus": null,
"groupByFolder": false,
"exclude": []
}
```
{% /graph %}
+1 -1
View File
@@ -85,7 +85,7 @@ the name of the target.
## Run Tasks Affected by a PR
You can also run a command for all the projects affected in your PR like this:
You can also run a command for all the projects affected by your PR like this:
```shell
npx nx affected --target=test
@@ -50,7 +50,7 @@ builds scenario:
"build": {
"executor": "@nrwl/angular:ng-packagr-lite",
"outputs": [
"dist/libs/my-lib"
"{workspaceRoot}/dist/libs/my-lib"
],
"options": {
...
@@ -255,7 +255,7 @@ depends on must also be `build-base`:
"build-base": {
"executor": "@nrwl/angular:ng-packagr-lite",
"outputs": [
"dist/libs/my-lib"
"{workspaceRoot}/dist/libs/my-lib"
],
"options": {
...
@@ -444,7 +444,7 @@ Next, you need to configure your project to build the theme when you build the l
...
"build-angular": {
"executor": "@nrwl/angular:package",
"outputs": ["dist/libs/lib1"],
"outputs": ["{workspaceRoot}/dist/libs/lib1"],
"options": {
"project": "libs/lib1/ng-package.json",
"tailwindConfig": "libs/lib1/tailwind.config.js"
@@ -461,7 +461,7 @@ Next, you need to configure your project to build the theme when you build the l
},
"build-lib": {
"executor": "nx:run-commands",
"outputs": ["dist/libs/lib1"],
"outputs": ["{workspaceRoot}/dist/libs/lib1"],
"configurations": {
"production": {
"commands": [
@@ -480,7 +480,7 @@ Next, you need to configure your project to build the theme when you build the l
},
"build": {
"executor": "nx:run-commands",
"outputs": ["dist/libs/lib1"],
"outputs": ["{workspaceRoot}/dist/libs/lib1"],
"configurations": {
"production": {
"commands": [
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 66 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 90 KiB

+1 -1
View File
@@ -60,7 +60,7 @@ Lets look at the test target relying on its dependencies.
{
"test": {
"executor": "@nrwl/jest:jest",
"outputs": ["coverage/apps/app1"],
"outputs": ["{workspaceRoot}/coverage/apps/app1"],
"dependsOn": ["^test"],
"options": {
"jestConfig": "apps/app1/jest.config.js",
+1 -1
View File
@@ -39,7 +39,7 @@ Here's the `project.json` file for your `products-data-client` project:
},
"test": {
"executor": "@nrwl/jest:jest",
"outputs": ["coverage/libs/products-data-client"],
"outputs": ["{workspaceRoot}/coverage/libs/products-data-client"],
"options": {
"jestConfig": "libs/products-data-client/jest.config.ts",
"passWithNoTests": true
@@ -128,7 +128,7 @@ Outputs are defined for every target in your workspace:
},
"test": {
"executor": "@nrwl/jest:jest",
"outputs": ["coverage/libs/products-data-client"],
"outputs": ["{workspaceRoot}/coverage/libs/products-data-client"],
"options": {
"jestConfig": "libs/products-data-client/jest.config.ts",
"passWithNoTests": true
+1 -1
View File
@@ -31,7 +31,7 @@ Here's the `project.json` file for your `common-ui` project:
},
"test": {
"executor": "@nrwl/jest:jest",
"outputs": ["coverage/libs/common-ui"],
"outputs": ["{workspaceRoot}/coverage/libs/common-ui"],
"options": {
"jestConfig": "libs/common-ui/jest.config.ts",
"passWithNoTests": true
@@ -84,7 +84,7 @@ Outputs are defined for every target in your workspace:
},
"test": {
"executor": "@nrwl/jest:jest",
"outputs": ["coverage/libs/products"],
"outputs": ["{workspaceRoot}/coverage/libs/products"],
"options": {
"jestConfig": "libs/products/jest.config.ts",
"passWithNoTests": true
@@ -6,7 +6,7 @@ The `configurations` property provides extra sets of values that will be merged
{
"build": {
"executor": "@nrwl/js:tsc",
"outputs": ["dist/libs/mylib"],
"outputs": ["{workspaceRoot}/dist/libs/mylib"],
"dependsOn": ["^build"],
"options": {
"tsConfig": "libs/mylib/tsconfig.lib.json",
+1 -1
View File
@@ -175,7 +175,7 @@ Another target default you can configure is `outputs`:
{
"targetDefaults": {
"build": {
"outputs": ["./custom-dist"]
"outputs": ["{projectRoot}/custom-dist"]
}
}
}
+14 -15
View File
@@ -56,22 +56,18 @@ You can add Nx-specific configuration as follows:
{
"name": "mylib",
"scripts": {
"test: "jest",
"test": "jest",
"build": "tsc -p tsconfig.lib.json" // the actual command here is arbitrary
},
"nx": {
"namedInputs": {
"default": [
"{projectRoot}/**/*"
],
"production": [
"!{projectRoot}/**/*.spec.tsx"
]
"default": ["{projectRoot}/**/*"],
"production": ["!{projectRoot}/**/*.spec.tsx"]
},
"targets": {
"build": {
"inputs": ["production", "^production"],
"outputs": ["dist/libs/mylib"],
"outputs": ["{workspaceRoot}/dist/libs/mylib"],
"dependsOn": ["^build"]
},
"test": {
@@ -107,7 +103,7 @@ You can add Nx-specific configuration as follows:
"build": {
"executor": "@nrwl/js:tsc",
"inputs": ["production", "^production"],
"outputs": ["dist/libs/mylib"],
"outputs": ["{workspaceRoot}/dist/libs/mylib"],
"dependsOn": ["^build"],
"options": {}
}
@@ -192,7 +188,7 @@ sources (non-test sources) of its dependencies. In other words, it treats test s
### outputs
Targets may define outputs to tell Nx where the target is going to create file artifacts that Nx should cache. `"outputs": ["dist/libs/mylib"]` tells Nx where the `build` target is going to create file artifacts.
Targets may define outputs to tell Nx where the target is going to create file artifacts that Nx should cache. `"outputs": ["{workspaceRoot}/dist/libs/mylib"]` tells Nx where the `build` target is going to create file artifacts.
This configuration is usually not needed. Nx comes with reasonable defaults (imported in `nx.json`) which implement the configuration above.
@@ -203,7 +199,10 @@ Usually, a target writes to a specific directory or a file. The following instru
```json
{
"build": {
"outputs": ["dist/libs/mylib", "build/libs/mylib/main.js"]
"outputs": [
"{workspaceRoot}/dist/libs/mylib",
"{workspaceRoot}/build/libs/mylib/main.js"
]
}
}
```
@@ -215,10 +214,10 @@ Sometimes, multiple targets might write to the same directory. When possible it
```json
{
"build-js": {
"outputs": ["dist/libs/mylib/js"]
"outputs": ["{workspaceRoot}/dist/libs/mylib/js"]
},
"build-css": {
"outputs": ["dist/libs/mylib/css"]
"outputs": ["{workspaceRoot}/dist/libs/mylib/css"]
}
}
```
@@ -228,10 +227,10 @@ But if the above is not possible, globs can be specified as outputs to only cach
```json
{
"build-js": {
"outputs": ["dist/libs/mylib/**/*.js"]
"outputs": ["{workspaceRoot}/dist/libs/mylib/**/*.js"]
},
"build-css": {
"outputs": ["dist/libs/mylib/**/*.css"]
"outputs": ["{workspaceRoot}/dist/libs/mylib/**/*.css"]
}
}
```
@@ -0,0 +1,21 @@
import { defineConfig } from 'cypress';
import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset';
import setupNodeEvents from './src/plugins/index';
const cypressJsonConfig = {
fileServerFolder: '.',
fixturesFolder: './src/fixtures',
video: true,
videosFolder: '../../dist/cypress/graph/client-e2e/videos',
screenshotsFolder: '../../dist/cypress/graph/client-e2e/screenshots',
chromeWebSecurity: false,
specPattern: './src/release-static-integration/**/*.cy.{js,jsx,ts,tsx}',
supportFile: 'src/support/e2e.ts',
};
export default defineConfig({
e2e: {
...nxE2EPreset(__dirname),
...cypressJsonConfig,
setupNodeEvents,
},
});
@@ -1,12 +0,0 @@
{
"fileServerFolder": ".",
"fixturesFolder": "./src/fixtures",
"integrationFolder": "./src/release-static-integration",
"modifyObstructiveCode": false,
"pluginsFile": "./src/plugins/index",
"supportFile": "./src/support/index.ts",
"video": true,
"videosFolder": "../../dist/cypress/graph/client-e2e/videos",
"screenshotsFolder": "../../dist/cypress/graph/client-e2e/screenshots",
"chromeWebSecurity": false
}
@@ -0,0 +1,21 @@
import { defineConfig } from 'cypress';
import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset';
import setupNodeEvents from './src/plugins/index';
const cypressJsonConfig = {
fileServerFolder: '.',
fixturesFolder: './src/fixtures',
video: true,
videosFolder: '../../dist/cypress/graph/client-e2e/videos',
screenshotsFolder: '../../dist/cypress/graph/client-e2e/screenshots',
chromeWebSecurity: false,
specPattern: './src/release-integration/**/*.cy.{js,jsx,ts,tsx}',
supportFile: 'src/support/e2e.ts',
};
export default defineConfig({
e2e: {
...nxE2EPreset(__dirname),
...cypressJsonConfig,
setupNodeEvents,
},
});
-12
View File
@@ -1,12 +0,0 @@
{
"fileServerFolder": ".",
"fixturesFolder": "./src/fixtures",
"integrationFolder": "./src/release-integration",
"modifyObstructiveCode": false,
"pluginsFile": "./src/plugins/index",
"supportFile": "./src/support/index.ts",
"video": true,
"videosFolder": "../../dist/cypress/graph/client-e2e/videos",
"screenshotsFolder": "../../dist/cypress/graph/client-e2e/screenshots",
"chromeWebSecurity": false
}
@@ -0,0 +1,21 @@
import { defineConfig } from 'cypress';
import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset';
import setupNodeEvents from './src/plugins/index';
const cypressJsonConfig = {
fileServerFolder: '.',
fixturesFolder: './src/fixtures',
video: true,
videosFolder: '../../dist/cypress/graph/client-e2e/videos',
screenshotsFolder: '../../dist/cypress/graph/client-e2e/screenshots',
chromeWebSecurity: false,
specPattern: './src/watch-mode-integration/**/*.cy.{js,jsx,ts,tsx}',
supportFile: 'src/support/e2e.ts',
};
export default defineConfig({
e2e: {
...nxE2EPreset(__dirname),
...cypressJsonConfig,
setupNodeEvents,
},
});
-12
View File
@@ -1,12 +0,0 @@
{
"fileServerFolder": ".",
"fixturesFolder": "./src/fixtures",
"integrationFolder": "./src/watch-mode-integration",
"modifyObstructiveCode": false,
"pluginsFile": "./src/plugins/index",
"supportFile": "./src/support/index.ts",
"video": true,
"videosFolder": "../../dist/cypress/graph/client-e2e/videos",
"screenshotsFolder": "../../dist/cypress/graph/client-e2e/screenshots",
"chromeWebSecurity": false
}
+21
View File
@@ -0,0 +1,21 @@
import { defineConfig } from 'cypress';
import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset';
import setupNodeEvents from './src/plugins/index';
const cypressJsonConfig = {
fileServerFolder: '.',
fixturesFolder: './src/fixtures',
video: true,
videosFolder: '../../dist/cypress/graph/client-e2e/videos',
screenshotsFolder: '../../dist/cypress/graph/client-e2e/screenshots',
chromeWebSecurity: false,
specPattern: 'src/e2e/**/*.cy.{js,jsx,ts,tsx}',
supportFile: 'src/support/e2e.ts',
};
export default defineConfig({
e2e: {
...nxE2EPreset(__dirname),
...cypressJsonConfig,
setupNodeEvents,
},
});
-12
View File
@@ -1,12 +0,0 @@
{
"fileServerFolder": ".",
"fixturesFolder": "./src/fixtures",
"integrationFolder": "./src/integration",
"modifyObstructiveCode": false,
"pluginsFile": "./src/plugins/index",
"supportFile": "./src/support/index.ts",
"video": true,
"videosFolder": "../../dist/cypress/graph/client-e2e/videos",
"screenshotsFolder": "../../dist/cypress/graph/client-e2e/screenshots",
"chromeWebSecurity": false
}
+6 -5
View File
@@ -6,26 +6,27 @@
"e2e-base": {
"executor": "@nrwl/cypress:cypress",
"options": {
"tsConfig": "graph/client-e2e/tsconfig.e2e.json"
"tsConfig": "graph/client-e2e/tsconfig.e2e.json",
"testingType": "e2e"
},
"configurations": {
"dev": {
"cypressConfig": "graph/client-e2e/cypress.json",
"cypressConfig": "graph/client-e2e/cypress.config.ts",
"devServerTarget": "graph-client:serve",
"baseUrl": "http://localhost:4201"
},
"watch": {
"cypressConfig": "graph/client-e2e/cypress-watch-mode.json",
"cypressConfig": "graph/client-e2e/cypress-watch-mode.config.ts",
"devServerTarget": "graph-client:serve:watch",
"baseUrl": "http://localhost:4204"
},
"release": {
"cypressConfig": "graph/client-e2e/cypress-release.json",
"cypressConfig": "graph/client-e2e/cypress-release.config.ts",
"devServerTarget": "graph-client:serve:release",
"baseUrl": "http://localhost:4203"
},
"release-static": {
"cypressConfig": "graph/client-e2e/cypress-release-static.json",
"cypressConfig": "graph/client-e2e/cypress-release-static.config.ts",
"devServerTarget": "graph-client:serve:release-static",
"baseUrl": "http://localhost:4205"
}
+6 -1
View File
@@ -1,7 +1,12 @@
{
"extends": "../../tsconfig.base.json",
"files": [],
"include": [],
"include": [
"cypress.config.ts",
"cypress-watch-mode.config.ts",
"cypress-release.config.ts",
"cypress-release-static.config.ts"
],
"references": [
{
"path": "./tsconfig.e2e.json"
@@ -1,7 +1,7 @@
import { interpret, InterpreterStatus } from 'xstate';
import { depGraphMachine } from './dep-graph.machine';
// TODO: figure out what happened to make the interprett return type get so weird
// TODO: figure out what happened to make the interpret return type get so weird
let depGraphService = interpret(depGraphMachine, {
devTools: !!window.useXstateInspect,
});
-33
View File
@@ -18,45 +18,12 @@ export const routes = [
loader: async ({ request, params }) => {
const { search } = new URL(request.url);
const { appConfig } = getEnvironmentConfig();
const selectedProjectId = appConfig.defaultProjectGraph;
const projectInfo = appConfig.projectGraphs.find(
(graph) => graph.id === selectedProjectId
);
const projectGraphService = getProjectGraphDataService();
const depGraphService = getDepGraphService();
const fetchProjectGraph = async () => {
const project: DepGraphClientResponse =
await projectGraphService.getProjectGraph(projectInfo.url);
const workspaceLayout = project?.layout;
depGraphService.send({
type: 'initGraph',
projects: project.projects,
dependencies: project.dependencies,
affectedProjects: project.affected,
workspaceLayout: workspaceLayout,
});
};
await fetchProjectGraph();
return redirect(`/projects${search}`);
},
},
{
path: 'projects',
element: <ProjectsSidebar />,
children: [
{
path: 'select/all',
loader: () => {
const depGraphService = getDepGraphService();
depGraphService.send('selectAll');
},
},
],
},
{
loader: ({ request, params }) => {
+1
View File
@@ -80,6 +80,7 @@ export function Shell(): JSX.Element {
await projectGraphService.getProjectGraph(projectInfo.url);
const workspaceLayout = project?.layout;
depGraphService.send({
type: 'initGraph',
projects: project.projects,
+1 -1
View File
@@ -1,6 +1,6 @@
{
"packages": ["build/packages/*"],
"version": "15.0.7",
"version": "15.0.8",
"granularPathspec": false,
"command": {
"publish": {
@@ -165,8 +165,8 @@ function EmptyList({
rel="noreferrer"
target="_blank"
>
<span className="absolute inset-0" aria-hidden="true"></span>No
{type}available for this package yet!
<span className="absolute inset-0" aria-hidden="true"></span>No{' '}
{type} available for this package yet!
</Link>
</p>
<div className="prose prose-slate dark:prose-invert prose-sm">
+19
View File
@@ -0,0 +1,19 @@
import { defineConfig } from 'cypress';
import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset';
const cypressJsonConfig = {
fileServerFolder: '.',
fixturesFolder: './src/fixtures',
video: true,
videosFolder: '../../dist/cypress/apps/nx-dev-e2e/videos',
screenshotsFolder: '../../dist/cypress/apps/nx-dev-e2e/screenshots',
chromeWebSecurity: false,
specPattern: 'src/e2e/**/*.cy.{js,jsx,ts,tsx}',
supportFile: 'src/support/e2e.ts',
};
export default defineConfig({
e2e: {
...nxE2EPreset(__dirname),
...cypressJsonConfig,
},
});
-12
View File
@@ -1,12 +0,0 @@
{
"fileServerFolder": ".",
"fixturesFolder": "./src/fixtures",
"integrationFolder": "./src/integration",
"modifyObstructiveCode": false,
"supportFile": "./src/support/index.ts",
"pluginsFile": false,
"video": true,
"videosFolder": "../../dist/cypress/apps/nx-dev-e2e/videos",
"screenshotsFolder": "../../dist/cypress/apps/nx-dev-e2e/screenshots",
"chromeWebSecurity": false
}
+3 -2
View File
@@ -12,8 +12,9 @@
],
"executor": "@nrwl/cypress:cypress",
"options": {
"cypressConfig": "nx-dev/nx-dev-e2e/cypress.json",
"devServerTarget": "nx-dev:serve:production"
"cypressConfig": "nx-dev/nx-dev-e2e/cypress.config.ts",
"devServerTarget": "nx-dev:serve:production",
"testingType": "e2e"
}
},
"lint": {
+1 -1
View File
@@ -6,5 +6,5 @@
"allowJs": true,
"types": ["cypress", "node"]
},
"include": ["src/**/*.ts", "src/**/*.js"]
"include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"]
}
@@ -1,6 +1,27 @@
import dynamic from 'next/dynamic';
import { JSXElementConstructor, ReactElement } from 'react';
import { useTheme } from '@nrwl/nx-dev/ui-theme';
import dynamic from 'next/dynamic';
import { ReactElement } from 'react';
/**
* dynamic() can't be used inside of React rendering as it needs to be marked
* in the top level of the module for preloading to work, similar to React.lazy.
*/
const NxGraphViz = dynamic(
() => import('@nrwl/graph/ui-graph').then((module) => module.NxGraphViz),
{
ssr: false,
loading: () => (
<div className="flex h-[450px] w-full items-center justify-center">
<div
className="spinner-border inline-block h-8 w-8 animate-spin rounded-full border-4 border-slate-100 border-r-slate-400 dark:border-slate-700 dark:border-r-slate-500"
role="status"
>
<span className="sr-only">Loading...</span>
</div>
</div>
),
}
);
export function Graph({
height,
@@ -11,11 +32,7 @@ export function Graph({
}): JSX.Element {
const [theme] = useTheme();
if (
!children ||
!children.hasOwnProperty('props') ||
(children.type as JSXElementConstructor<any>).name !== 'Fence'
)
if (!children || !children.hasOwnProperty('props'))
return (
<div className="no-prose my-6 block rounded-md bg-red-50 p-4 text-red-700 ring-1 ring-red-100 dark:bg-red-900/30 dark:text-red-600 dark:ring-red-900">
<p className="mb-4">
@@ -37,26 +54,6 @@ export function Graph({
);
}
const NxGraphViz = dynamic(
() => import('@nrwl/graph/ui-graph').then((module) => module.NxGraphViz),
{
ssr: false,
loading: () => (
<div
style={{ height }}
className="flex w-full items-center justify-center"
>
<div
className="spinner-border inline-block h-8 w-8 animate-spin rounded-full border-4 border-slate-100 border-r-slate-400 dark:border-slate-700 dark:border-r-slate-500"
role="status"
>
<span className="sr-only">Loading...</span>
</div>
</div>
),
}
);
return (
<div className="my-6 w-full place-content-center overflow-hidden rounded-md ring-1 ring-slate-100 dark:ring-slate-700">
<NxGraphViz
+13 -14
View File
@@ -53,17 +53,17 @@
"@ngrx/effects": "~14.0.0",
"@ngrx/router-store": "~14.0.0",
"@ngrx/store": "~14.0.0",
"@nrwl/cypress": "15.0.7-rc.0",
"@nrwl/devkit": "15.0.7-rc.0",
"@nrwl/eslint-plugin-nx": "15.0.7-rc.0",
"@nrwl/jest": "15.0.7-rc.0",
"@nrwl/js": "15.0.7-rc.0",
"@nrwl/linter": "15.0.7-rc.0",
"@nrwl/next": "15.0.7-rc.0",
"@nrwl/nx-cloud": "15.0.1",
"@nrwl/react": "15.0.7-rc.0",
"@nrwl/storybook": "15.0.7-rc.0",
"@nrwl/web": "15.0.7-rc.0",
"@nrwl/cypress": "15.0.8-beta.1",
"@nrwl/devkit": "15.0.8-beta.1",
"@nrwl/eslint-plugin-nx": "15.0.8-beta.1",
"@nrwl/jest": "15.0.8-beta.1",
"@nrwl/js": "15.0.8-beta.1",
"@nrwl/linter": "15.0.8-beta.1",
"@nrwl/next": "15.0.8-beta.1",
"@nrwl/nx-cloud": "15.0.2-beta.1",
"@nrwl/react": "15.0.8-beta.1",
"@nrwl/storybook": "15.0.8-beta.1",
"@nrwl/web": "15.0.8-beta.1",
"@parcel/watcher": "2.0.4",
"@phenomnomnominal/tsquery": "4.1.1",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
@@ -128,7 +128,7 @@
"copy-webpack-plugin": "^10.2.4",
"core-js": "^3.6.5",
"css-minimizer-webpack-plugin": "^3.4.1",
"cypress": "^9.1.0",
"cypress": "^10.7.0",
"cytoscape": "^3.18.2",
"cytoscape-dagre": "^2.4.0",
"cytoscape-popper": "^2.0.0",
@@ -186,7 +186,7 @@
"next-sitemap": "^3.1.10",
"ng-packagr": "~14.2.0",
"node-fetch": "^2.6.7",
"nx": "15.0.7-rc.0",
"nx": "15.0.8-beta.1",
"open": "^8.4.0",
"parse-markdown-links": "^1.0.4",
"parse5": "4.0.0",
@@ -306,4 +306,3 @@
"underscore": "^1.12.1"
}
}
+1 -1
View File
@@ -30,7 +30,7 @@ By default, Nx is going to cache `dist/packages/frontend`, `packages/frontend/di
"targets": {
"build": {
"executor": "nx:run-script",
"outputs": ["packages/frontend/dist", "packaged/frontend/docs"],
"outputs": ["{projectRoot}/dist", "{projectRoot}/docs"],
"options": {
"script": "build-my-project"
}
@@ -7,6 +7,7 @@ import {
updateWorkspaceConfiguration,
WorkspaceConfiguration,
} from '../../generators/utils/project-configuration';
import { readJson, writeJson } from '../../generators/utils/json';
import migrateToInputs from './migrate-to-inputs';
describe('15.0.0 migration (migrate-to-inputs)', () => {
@@ -211,6 +212,45 @@ describe('15.0.0 migration (migrate-to-inputs)', () => {
expect(lib.namedInputs).toBeUndefined();
});
it('should add project specific implicit dependencies to projects with package.json', async () => {
updateWorkspaceConfiguration(tree, {
version: 2,
implicitDependencies: {
'tools/scripts/build-app.js': ['app1', 'app2'],
},
});
addProjectConfiguration(tree, 'app1', {
root: 'app1',
});
addProjectConfiguration(tree, 'app2', {
root: 'app2',
});
tree.delete('app2/project.json');
writeJson(tree, 'app2/package.json', { name: 'app2' });
addProjectConfiguration(tree, 'lib1', {
root: 'lib1',
});
await migrateToInputs(tree);
const updated = readWorkspaceConfiguration(tree);
expect(updated.implicitDependencies).toBeUndefined();
expect(updated.namedInputs.projectSpecificFiles).toEqual([]);
expect(updated.namedInputs.default).toContain('projectSpecificFiles');
const app1 = readProjectConfiguration(tree, 'app1');
expect(app1.namedInputs.projectSpecificFiles).toContain(
'{workspaceRoot}/tools/scripts/build-app.js'
);
const app2 = readJson(tree, 'app2/package.json');
expect(app2.nx.namedInputs.projectSpecificFiles).toContain(
'{workspaceRoot}/tools/scripts/build-app.js'
);
const lib = readProjectConfiguration(tree, 'lib1');
expect(lib.namedInputs).toBeUndefined();
});
it('should do nothing if there are no implicitDependencies', async () => {
const workspace: WorkspaceConfiguration = {
version: 2,
@@ -7,6 +7,9 @@ import {
updateWorkspaceConfiguration,
} from '../../generators/utils/project-configuration';
import { joinPathFragments } from '../../utils/path';
import { join } from 'path';
import { updateJson } from '../../generators/utils/json';
import { PackageJson } from '../../utils/package-json';
const skippedFiles = [
'package.json', // Not to be added to filesets
@@ -79,7 +82,23 @@ export default async function (tree: Tree) {
project.namedInputs.projectSpecificFiles = Array.from(
projectSpecificFileset
);
updateProjectConfiguration(tree, dependent, project);
if (tree.exists(join(project.root, 'project.json'))) {
updateProjectConfiguration(tree, dependent, project);
} else if (tree.exists(join(project.root, 'package.json'))) {
updateJson<PackageJson>(
tree,
join(project.root, 'package.json'),
(json) => {
json.nx ??= {};
json.nx.namedInputs ??= {};
json.nx.namedInputs.projectSpecificFiles ??=
project.namedInputs.projectSpecificFiles;
return json;
}
);
}
}
} else {
workspaceConfiguration.namedInputs.sharedGlobals.push(
@@ -6,9 +6,9 @@ import {
readWorkspaceConfiguration,
updateWorkspaceConfiguration,
} from '../../generators/utils/project-configuration';
import { writeJson } from '../../generators/utils/json';
import { readJson, writeJson } from '../../generators/utils/json';
import prefixOutputs from './prefix-outputs';
import { validateOutputs } from 'nx/src/tasks-runner/utils';
import { validateOutputs } from '../../tasks-runner/utils';
describe('15.0.0 migration (prefix-outputs)', () => {
let tree: Tree;
@@ -82,6 +82,29 @@ describe('15.0.0 migration (prefix-outputs)', () => {
`);
});
it('should migrate package.json projects', async () => {
writeJson(tree, 'proj/package.json', {
name: 'proj',
scripts: {
build: 'echo',
},
nx: {
targets: {
build: {
outputs: ['dist/proj'],
},
},
},
});
tree.delete('workspace.json');
await prefixOutputs(tree);
expect(readJson(tree, 'proj/package.json').nx.targets.build).toEqual({
outputs: ['dist/proj'],
});
});
it('should not error for package.json projects', async () => {
writeJson(tree, 'proj/package.json', {
name: 'proj',
@@ -7,11 +7,13 @@ import {
updateWorkspaceConfiguration,
} from '../../generators/utils/project-configuration';
import { joinPathFragments } from '../../utils/path';
import { relative } from 'path';
import { join, relative } from 'path';
import {
transformLegacyOutputs,
validateOutputs,
} from 'nx/src/tasks-runner/utils';
import { updateJson } from '../../generators/utils/json';
import { PackageJson } from '../../utils/package-json';
export default async function (tree: Tree) {
// If the workspace doesn't have a nx.json, don't make any changes
@@ -37,7 +39,20 @@ export default async function (tree: Tree) {
target.outputs = transformLegacyOutputs(project.root, e);
}
}
updateProjectConfiguration(tree, projectName, project);
if (tree.exists(join(project.root, 'project.json'))) {
updateProjectConfiguration(tree, projectName, project);
} else if (tree.exists(join(project.root, 'package.json'))) {
updateJson<PackageJson>(
tree,
join(project.root, 'package.json'),
(json) => {
json.nx ??= {};
json.nx.targets ??= project.targets;
return json;
}
);
}
}
if (workspaceConfiguration.targetDefaults) {
@@ -9,8 +9,8 @@
"build-android": {
"executor": "@nrwl/react-native:build-android",
"outputs": [
"apps/mobile/android/app/build/outputs/bundle",
"apps/mobile/android/app/build/outputs/apk"
"{projectRoot}/build/outputs/bundle",
"{projectRoot}/build/outputs/apk"
],
"options": {}
}
@@ -32,8 +32,8 @@ The `gradleTask` option accepts any custom gradle task, such as `assembleDebug`,
"build-android": {
"executor": "@nrwl/react-native:build-android",
"outputs": [
"apps/mobile/android/app/build/outputs/bundle",
"apps/mobile/android/app/build/outputs/apk"
"{projectRoot}/build/outputs/bundle",
"{projectRoot}/build/outputs/apk"
],
"options": {
"gradleTask": "assembleDebug"
@@ -50,8 +50,8 @@ The `apk` option allows you determine the format of android build. If set as tru
"build-android": {
"executor": "@nrwl/react-native:build-android",
"outputs": [
"apps/mobile/android/app/build/outputs/bundle",
"apps/mobile/android/app/build/outputs/apk"
"{projectRoot}/build/outputs/bundle",
"{projectRoot}/build/outputs/apk"
],
"options": {
"apk": true
@@ -68,8 +68,8 @@ If set `debug` option as `true`, it will create a debug build; if set as `false`
"build-android": {
"executor": "@nrwl/react-native:build-android",
"outputs": [
"apps/mobile/android/app/build/outputs/bundle",
"apps/mobile/android/app/build/outputs/apk"
"{projectRoot}/build/outputs/bundle",
"{projectRoot}/build/outputs/apk"
],
"options": {
"debug": true
@@ -8,7 +8,7 @@
//...
"bundle-ios": {
"executor": "@nrwl/react-native:bundle",
"outputs": ["apps/mobile/build"],
"outputs": ["{projectRoot}/build"],
"options": {
"entryFile": "src/main.tsx",
"platform": "ios",
@@ -30,7 +30,7 @@ By default, Nx is going to cache `dist/packages/frontend`, `packages/frontend/di
"targets": {
"build": {
"executor": "nx:run-script",
"outputs": ["packages/frontend/dist", "packaged/frontend/docs"],
"outputs": ["{projectRoot}/dist", "{projectRoot}/docs"],
"options": {
"script": "build-my-project"
}
+137 -153
View File
@@ -3573,24 +3573,24 @@
dependencies:
nx "15.0.3"
"@nrwl/cli@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.0.7-rc.0.tgz#6446daf7882326830e71f96d2ebd85ec379b47c2"
integrity sha512-Zog8uKMUmAMTffdoALQP4YfQ/kIZN6Be5I4Qw7NbTGSkh9VyexpGE+cH1JZNfcoLq7N/zSy7qKFb7BQw31PlFw==
"@nrwl/cli@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.0.8-beta.1.tgz#56770502c8f13034db85458033052eddb8dbf595"
integrity sha512-qpnA5zq0kUQ+VJL/DZFpfOex8GjRXI1EKwc50wFlY3H20qwPIdntVocBEhyRkUE53hIoK8io7H8KPlUnWZeehg==
dependencies:
nx "15.0.7-rc.0"
nx "15.0.8-beta.1"
"@nrwl/cypress@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-15.0.7-rc.0.tgz#f1b21a184831cae19d9f6226f05b660a4c17aaa7"
integrity sha512-G2FHfOkZ2i00Ip9EvyXgzcYNOUc/HBUuwt249bD9fC8IbOQN9tDZ93ae+X+4OfQ6JF58hWt1GXEO6rRogqBd/g==
"@nrwl/cypress@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-15.0.8-beta.1.tgz#e9b8c69b52b7dea35fc63c98c99877c78278ded6"
integrity sha512-O5QkKvDle8p9y6xmuEY1ducUbZGkcUlerjkAC7P3YH1bUy/2QtQWPwNF38fp752+Ho6mTRhWdl5D80YEkYHgbg==
dependencies:
"@babel/core" "^7.0.1"
"@babel/preset-env" "^7.0.0"
"@cypress/webpack-preprocessor" "^5.12.0"
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/linter" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/linter" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
"@phenomnomnominal/tsquery" "4.1.1"
babel-loader "^8.0.2"
chalk "4.1.0"
@@ -3603,10 +3603,10 @@
webpack "^4 || ^5"
webpack-node-externals "^3.0.0"
"@nrwl/devkit@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-15.0.7-rc.0.tgz#bcfa40ebf168242ea66c05fa37ca1981272689e2"
integrity sha512-hHeVb2tEfCmyZFwSnzBH+0q7Ud4948/N3vukPGgcpNZkscaJFuy+GhlKCKjzMkgZuCeAVo6ZX/bQMZWZb+gODg==
"@nrwl/devkit@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-15.0.8-beta.1.tgz#89a2dc3ad5031b29b9973a1c01c5179f1978afca"
integrity sha512-sj0lB/k7M1wotDfZycCn2AzKZmQr1HAzpVioWPUOvUGHn2hfoChQc/PaiQyCMX6DsNKcHWeGnfrmF2Ogm7NvMw==
dependencies:
"@phenomnomnominal/tsquery" "4.1.1"
ejs "^3.1.7"
@@ -3625,26 +3625,26 @@
semver "7.3.4"
tslib "^2.3.0"
"@nrwl/eslint-plugin-nx@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-15.0.7-rc.0.tgz#f5d528d133fc41416fe00aacdbf57ec5a516ec12"
integrity sha512-VBFDaBNCc9kpkY0v4eGZbWpFgH5fapUaflsQ0vL76FwX+SWSRU7uRS3jTRF4jHnWf4bE2BCVzMSq/4m6G5L9Vw==
"@nrwl/eslint-plugin-nx@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-15.0.8-beta.1.tgz#f8aa4bc18ea1d7c5b21a258b0778eb9f00a3b13d"
integrity sha512-3MWFRnN3ztJG6aO4Z8WXM5Xg8xLxdt/2XplvPAuoNDvSy0YeRQkQaF0J2bRHDrq4cICtdmSyNcR/kritqKeMGA==
dependencies:
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
"@typescript-eslint/utils" "^5.36.1"
chalk "4.1.0"
confusing-browser-globals "^1.0.9"
semver "7.3.4"
"@nrwl/jest@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-15.0.7-rc.0.tgz#aaa8c80b02f28ec39d47fe3aeae8f0044ee644b0"
integrity sha512-quBjib5zKn3aT06HGbuSCev06O8f++Z/lOM6AXmGFN1c227WDn4RpzmcFmK7IsfgnSQdtEEfpvdD11E0IzTdVQ==
"@nrwl/jest@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-15.0.8-beta.1.tgz#18bbe9d1f45a341dbc64f63559c690cf20f91bac"
integrity sha512-jJ+E5VUjZEJRS0tJkIB/vweWGBZNKWNiJSdC2tebTIWk8KXE4ejFGsjVa7bZR/IRnQxdkkQg37so8odZ+Wcgtg==
dependencies:
"@jest/reporters" "28.1.1"
"@jest/test-result" "28.1.1"
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@phenomnomnominal/tsquery" "4.1.1"
chalk "4.1.0"
dotenv "~10.0.0"
@@ -3655,15 +3655,15 @@
resolve.exports "1.1.0"
tslib "^2.3.0"
"@nrwl/js@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-15.0.7-rc.0.tgz#b1e4e12534fdc777f36c896564cecd5c38678e26"
integrity sha512-/vpUQApSmUIUSTJD2U+3K1ItCkfqCjLxPnHoEc7GRBPm98DfmJ6MngBR4zwoSQzuMy9z+5/xEwYpd6PmFKLy3w==
"@nrwl/js@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-15.0.8-beta.1.tgz#56532325b2dba735be60b8aecd0a8db7a3756e13"
integrity sha512-1m9116bh3BbrquBu52ak61m2YZ4ZKYtV1H1a8i1BBjwl5ACmdLW1m3MwViQQayIrpWiHNu88HMV3wXUaviFVOA==
dependencies:
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/jest" "15.0.7-rc.0"
"@nrwl/linter" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/jest" "15.0.8-beta.1"
"@nrwl/linter" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
"@parcel/watcher" "2.0.4"
chalk "4.1.0"
fast-glob "3.2.7"
@@ -3674,31 +3674,31 @@
source-map-support "0.5.19"
tree-kill "1.2.2"
"@nrwl/linter@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-15.0.7-rc.0.tgz#3845411bc550152687755154f9b7809678ca30a4"
integrity sha512-HIaoPuYBp2xltuVLgyUHV927xaad7HH8nXTJLMOuA4vBYD+L9LC16o68tMarPPVg12aFKGFwhDBHQQFHUfoheg==
"@nrwl/linter@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-15.0.8-beta.1.tgz#6407e258ecfdc211092dc4751815c254a3c3d9e6"
integrity sha512-3N/F8GFUXgS7dLS5qkmQgylZbk8qTYmGCiIhDezccRErZETNHOwgjG3LWukjDvWf/3JqQECAX92LPLTWtAG7QA==
dependencies:
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/jest" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/jest" "15.0.8-beta.1"
"@phenomnomnominal/tsquery" "4.1.1"
nx "15.0.7-rc.0"
nx "15.0.8-beta.1"
tmp "~0.2.1"
tslib "^2.3.0"
"@nrwl/next@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-15.0.7-rc.0.tgz#2eaf2d9a790fc2c4f070165b1441f3e59a83c991"
integrity sha512-RlYzwFqwZ9aVBtjrQQLKKCocAsL3sq+1UQz9nszvRjQhIdLBzCU7iCOhoOsaqXwnI1sO00x9GhoX9qgMCdvMJg==
"@nrwl/next@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-15.0.8-beta.1.tgz#0aeb392409b00af4c597d799a2438bf4a9a3d472"
integrity sha512-D79cTYC3ISHmzAHZRNYuSe1KgnpD6jyHfAKpxfBRxzuzVFKohz8tEoghVs2HGr6rEiRRWK8xEiItIT7zFFiMiw==
dependencies:
"@babel/plugin-proposal-decorators" "^7.14.5"
"@nrwl/cypress" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/jest" "15.0.7-rc.0"
"@nrwl/linter" "15.0.7-rc.0"
"@nrwl/react" "15.0.7-rc.0"
"@nrwl/webpack" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/cypress" "15.0.8-beta.1"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/jest" "15.0.8-beta.1"
"@nrwl/linter" "15.0.8-beta.1"
"@nrwl/react" "15.0.8-beta.1"
"@nrwl/webpack" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
"@svgr/webpack" "^6.1.2"
chalk "4.1.0"
dotenv "~10.0.0"
@@ -3710,10 +3710,10 @@
url-loader "^4.1.1"
webpack-merge "^5.8.0"
"@nrwl/nx-cloud@15.0.1":
version "15.0.1"
resolved "https://registry.yarnpkg.com/@nrwl/nx-cloud/-/nx-cloud-15.0.1.tgz#5bbc63c8d46396595ed651b559f55d51f9ee06c7"
integrity sha512-EvUxiXF/t8czg6ORWRZ3bTPfUHH45Z3VMubmnBEWmcB3IOXQu25Du7KmUCEAqjqb1spuWrsWRzSxkIrpz8Xl9g==
"@nrwl/nx-cloud@15.0.2-beta.1":
version "15.0.2-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/nx-cloud/-/nx-cloud-15.0.2-beta.1.tgz#8f6e0f0bd2f7ba3f99e3dc015a54300bad26abb9"
integrity sha512-kiDjQD/a/VcWs7xyfsVG9FfWFqI1blFuOPGPSW2Cf0VM6xuVeXQK7QHc4zZxbLnqF6EjV/5Zv10YmPdMqytThQ==
dependencies:
axios "^0.21.2"
chalk "4.1.0"
@@ -3724,22 +3724,22 @@
tar "6.1.11"
yargs-parser ">=21.0.1"
"@nrwl/react@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-15.0.7-rc.0.tgz#c45b70c4c15787bdc333a62af490dc04200829cf"
integrity sha512-cHpIfsgtDYLFCNuheQu1Oq8mXdHVIks9BDB3thf+BKk9qErSLEqI4H4Z8WclIfWTXMmMDMGCzd+IGE7TMp91mQ==
"@nrwl/react@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-15.0.8-beta.1.tgz#53cfb62c7fae5b697a04e40ddacd218fa576570b"
integrity sha512-EJOKZV04gYKjDNL/tivBAMiTpALfxfEeIc0XrqhTzsszFWbbI1s4KBinS7hBONSKVslllk7jv2tln5cR1RQXvg==
dependencies:
"@babel/core" "^7.15.0"
"@babel/preset-react" "^7.14.5"
"@nrwl/cypress" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/jest" "15.0.7-rc.0"
"@nrwl/js" "15.0.7-rc.0"
"@nrwl/linter" "15.0.7-rc.0"
"@nrwl/storybook" "15.0.7-rc.0"
"@nrwl/web" "15.0.7-rc.0"
"@nrwl/webpack" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/cypress" "15.0.8-beta.1"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/jest" "15.0.8-beta.1"
"@nrwl/js" "15.0.8-beta.1"
"@nrwl/linter" "15.0.8-beta.1"
"@nrwl/storybook" "15.0.8-beta.1"
"@nrwl/web" "15.0.8-beta.1"
"@nrwl/webpack" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
"@phenomnomnominal/tsquery" "4.1.1"
"@pmmmwh/react-refresh-webpack-plugin" "^0.5.7"
"@svgr/webpack" "^6.1.2"
@@ -3750,19 +3750,19 @@
semver "7.3.4"
style-loader "^3.3.0"
stylus "^0.55.0"
stylus-loader "^6.2.0"
stylus-loader "^7.1.0"
url-loader "^4.1.1"
webpack "^5.58.1"
webpack-merge "^5.8.0"
"@nrwl/rollup@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/rollup/-/rollup-15.0.7-rc.0.tgz#668befa75b0320aacca44a1b8cecde8aaee367dc"
integrity sha512-zOSeHfCa+Ln39JtbzbDRY0M+JNSFSUOC0Vw+ap9mzk+t5+hpc52/FYzzxw5yhIuhLBSjVskL0di5yVyCXq7M3w==
"@nrwl/rollup@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/rollup/-/rollup-15.0.8-beta.1.tgz#3f63b18ca8e3c2432705391d97d92ffa67568206"
integrity sha512-b1DGtXhlTD/5AuO99GIiAzb/roiOYTkWBUMYoPeHMNJkB007g7KjCp++TEwNmYCVDdNtRrx6R8YOPb12e7hBhw==
dependencies:
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/js" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/js" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
"@rollup/plugin-babel" "^5.3.0"
"@rollup/plugin-commonjs" "^20.0.0"
"@rollup/plugin-image" "^2.1.0"
@@ -3782,15 +3782,15 @@
rxjs "^6.5.4"
tslib "^2.3.0"
"@nrwl/storybook@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-15.0.7-rc.0.tgz#9bc57c5ff75f0f14557ff7e0229b024d8ea22c2e"
integrity sha512-WO2hHmjcGEC/mPIZatxENyrzkl+psKmHbFlwUHHYlkRpql+YxqmuH6oS6vCErHCbEOjTla/KlMimUSljXCOxag==
"@nrwl/storybook@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-15.0.8-beta.1.tgz#945b29ade691617fa685e055504b0c845ebd355e"
integrity sha512-haPjsZjd3DF4yPQySe3Ib3FyGCR/Pla1/6O3kaitftkvkS+qr/3jTrZsve0ymfcXYLfobuD2DN//a6nA/jq4GQ==
dependencies:
"@nrwl/cypress" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/linter" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/cypress" "15.0.8-beta.1"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/linter" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
dotenv "~10.0.0"
semver "7.3.4"
@@ -3801,17 +3801,17 @@
dependencies:
nx "15.0.3"
"@nrwl/tao@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.0.7-rc.0.tgz#639fba8bef1865cb48436cdffee664e4825895f2"
integrity sha512-jQqb9+96Z4xNPR+FIhYFTs0vMtFlT2IaE4a+QSeXmNyY87O2pBQcPrW5eTkAYXMoQelzkF3kRC/xnI3djpHdcA==
"@nrwl/tao@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.0.8-beta.1.tgz#de824499c1b80d323b974fed3d63994193acdb6f"
integrity sha512-BJcczg0vo6aojp1hzInUNjAisZuRf0Lx2ueIg1fbK7fk1xU6BbbPOAZ385PnqJdT2sSAZjui7D166HktTVt/zg==
dependencies:
nx "15.0.7-rc.0"
nx "15.0.8-beta.1"
"@nrwl/web@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-15.0.7-rc.0.tgz#5d05ef52e600c578237df8839b0451d5023a96b8"
integrity sha512-XgMdgZE6OblItpKHbXKflACSmFdg7nobYnly+R0cETAMyQDbiqHgMZfP65UphvC0ShhWBRVdfVM5qZUxhuVO8A==
"@nrwl/web@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-15.0.8-beta.1.tgz#3041824e155df35e8e4235cf720916878b26c94c"
integrity sha512-UOLiipcaypWCDV7jd2c4mAWy2V5AncvFJon6VD14ntHtVJ+uJNMjmvJvvHr0wEizo8gHpiHeCIdcyAMinZDigw==
dependencies:
"@babel/core" "^7.15.0"
"@babel/plugin-proposal-class-properties" "^7.14.5"
@@ -3820,14 +3820,14 @@
"@babel/preset-env" "^7.15.0"
"@babel/preset-typescript" "^7.15.0"
"@babel/runtime" "^7.14.8"
"@nrwl/cypress" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/jest" "15.0.7-rc.0"
"@nrwl/js" "15.0.7-rc.0"
"@nrwl/linter" "15.0.7-rc.0"
"@nrwl/rollup" "15.0.7-rc.0"
"@nrwl/webpack" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/cypress" "15.0.8-beta.1"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/jest" "15.0.8-beta.1"
"@nrwl/js" "15.0.8-beta.1"
"@nrwl/linter" "15.0.8-beta.1"
"@nrwl/rollup" "15.0.8-beta.1"
"@nrwl/webpack" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
babel-plugin-const-enum "^1.0.1"
babel-plugin-macros "^2.8.0"
babel-plugin-transform-typescript-metadata "^0.3.1"
@@ -3837,14 +3837,14 @@
ignore "^5.0.4"
tslib "^2.3.0"
"@nrwl/webpack@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-15.0.7-rc.0.tgz#3359b573b97469fff3888dc7b44c9411e393ffda"
integrity sha512-flED0FKfvi6Hp2RpUjfF0Nk/TzFm8CFMOZcxCLaezFcHY2BRPOYh6+bKTjWd+aO6PG/RcrKh0+pIMeXEf4jHHA==
"@nrwl/webpack@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-15.0.8-beta.1.tgz#dfa08a055ee35ca94205937386a57a6acf05df67"
integrity sha512-CvAHs5BgFvJUMgE8ZITe3mek4GWxPO581/Jn98dF0XOtW7xrB7FsK0XQcAPjKZJGrPZDDdsAIpPMxHq2B2gtRg==
dependencies:
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/js" "15.0.7-rc.0"
"@nrwl/workspace" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/js" "15.0.8-beta.1"
"@nrwl/workspace" "15.0.8-beta.1"
autoprefixer "^10.4.9"
babel-loader "^8.2.2"
browserslist "^4.16.6"
@@ -3860,7 +3860,7 @@
fs-extra "^10.1.0"
ignore "^5.0.4"
less "3.12.2"
less-loader "^10.1.0"
less-loader "^11.1.0"
license-webpack-plugin "^4.0.2"
loader-utils "1.2.3"
mini-css-extract-plugin "~2.4.7"
@@ -3876,7 +3876,7 @@
source-map-loader "^3.0.0"
style-loader "^3.3.0"
stylus "^0.55.0"
stylus-loader "^6.2.0"
stylus-loader "^7.1.0"
terser-webpack-plugin "^5.3.3"
ts-loader "^9.3.1"
ts-node "10.9.1"
@@ -3890,14 +3890,14 @@
webpack-sources "^3.2.3"
webpack-subresource-integrity "^5.1.0"
"@nrwl/workspace@15.0.7-rc.0":
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-15.0.7-rc.0.tgz#f54e53a9eb500238f810801390a0711e8d7db852"
integrity sha512-TpezR5tr7xEHkcVCQSCHhiif+iM4AOZzgfdVNvoHGHFg9U7Iev2Wir7/3/S3wwdi45mqzacticNEDgdC6RQI/A==
"@nrwl/workspace@15.0.8-beta.1":
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-15.0.8-beta.1.tgz#47e35fc8201f9750072a907b872b40e4655870d4"
integrity sha512-wAAYEa5M/6qrmdo0W/YOi1VY/ZgDFkveQ6uy0wB9ZNjdHHTLmwE5a7NXD5H4plPMRMGEsSYLse6i8oHtyLR1SQ==
dependencies:
"@nrwl/devkit" "15.0.7-rc.0"
"@nrwl/jest" "15.0.7-rc.0"
"@nrwl/linter" "15.0.7-rc.0"
"@nrwl/devkit" "15.0.8-beta.1"
"@nrwl/jest" "15.0.8-beta.1"
"@nrwl/linter" "15.0.8-beta.1"
"@parcel/watcher" "2.0.4"
chalk "4.1.0"
chokidar "^3.5.1"
@@ -3912,7 +3912,7 @@
ignore "^5.0.4"
minimatch "3.0.5"
npm-run-path "^4.0.1"
nx "15.0.7-rc.0"
nx "15.0.8-beta.1"
open "^8.4.0"
rxjs "^6.5.4"
semver "7.3.4"
@@ -9734,10 +9734,10 @@ cyclist@^1.0.1:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==
cypress@^9.1.0:
version "9.7.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.7.0.tgz#bf55b2afd481f7a113ef5604aa8b693564b5e744"
integrity sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q==
cypress@^10.7.0:
version "10.11.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.11.0.tgz#e9fbdd7638bae3d8fb7619fd75a6330d11ebb4e8"
integrity sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==
dependencies:
"@cypress/request" "^2.88.10"
"@cypress/xvfb" "^1.2.4"
@@ -9758,7 +9758,7 @@ cypress@^9.1.0:
dayjs "^1.10.4"
debug "^4.3.2"
enquirer "^2.3.6"
eventemitter2 "^6.4.3"
eventemitter2 "6.4.7"
execa "4.1.0"
executable "^4.1.1"
extract-zip "2.0.1"
@@ -11340,10 +11340,10 @@ eventemitter-asyncresource@^1.0.0:
resolved "https://registry.yarnpkg.com/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz#734ff2e44bf448e627f7748f905d6bdd57bdb65b"
integrity sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==
eventemitter2@^6.4.3:
version "6.4.9"
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125"
integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==
eventemitter2@6.4.7:
version "6.4.7"
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d"
integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==
eventemitter3@^4.0.0, eventemitter3@^4.0.4:
version "4.0.7"
@@ -15210,20 +15210,13 @@ less-loader@11.0.0:
dependencies:
klona "^2.0.4"
less-loader@11.1.0:
less-loader@11.1.0, less-loader@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-11.1.0.tgz#a452384259bdf8e4f6d5fdcc39543609e6313f82"
integrity sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==
dependencies:
klona "^2.0.4"
less-loader@^10.1.0:
version "10.2.0"
resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-10.2.0.tgz#97286d8797dc3dc05b1d16b0ecec5f968bdd4e32"
integrity sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==
dependencies:
klona "^2.0.4"
less@3.12.2:
version "3.12.2"
resolved "https://registry.yarnpkg.com/less/-/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4"
@@ -16898,13 +16891,13 @@ nx@15.0.3, "nx@>=14.8.1 < 16":
yargs "^17.4.0"
yargs-parser "21.0.1"
nx@15.0.7-rc.0:
version "15.0.7-rc.0"
resolved "https://registry.yarnpkg.com/nx/-/nx-15.0.7-rc.0.tgz#40a653c12c3ba1a31002d7ae60af947ca3dd468e"
integrity sha512-JnHeHvh65gP6/gRP+TujtuWeRtskTjVHTD/zEujZjviapH1Y55F1soC4Kp1Ma7VwyklAemuaUgWH0rq8WFX2Jg==
nx@15.0.8-beta.1:
version "15.0.8-beta.1"
resolved "https://registry.yarnpkg.com/nx/-/nx-15.0.8-beta.1.tgz#03af5ef4b8e737c563c24b236cb10e3c3b55e5ca"
integrity sha512-9o+EfIzOiYXLEGg7g7u8ZHwc3kPGd84RSnN9Z8eYk3CuZNM4bOUxE1PkqAV2hUHXPfZ1Gnk3CveTURTFwPRFHg==
dependencies:
"@nrwl/cli" "15.0.7-rc.0"
"@nrwl/tao" "15.0.7-rc.0"
"@nrwl/cli" "15.0.8-beta.1"
"@nrwl/tao" "15.0.8-beta.1"
"@parcel/watcher" "2.0.4"
"@yarnpkg/lockfile" "^1.1.0"
"@yarnpkg/parsers" "^3.0.0-rc.18"
@@ -21101,7 +21094,7 @@ stylus-loader@7.0.0:
klona "^2.0.5"
normalize-path "^3.0.0"
stylus-loader@7.1.0:
stylus-loader@7.1.0, stylus-loader@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-7.1.0.tgz#19e09a98b19075c246e6e3f65e38b8cb89d2d6fb"
integrity sha512-gNUEjjozR+oZ8cuC/Fx4LVXqZOgDKvpW9t2hpXHcxjfPYqSjQftaGwZUK+wL9B0QJ26uS6p1EmoWHmvld1dF7g==
@@ -21110,15 +21103,6 @@ stylus-loader@7.1.0:
klona "^2.0.5"
normalize-path "^3.0.0"
stylus-loader@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-6.2.0.tgz#0ba499e744e7fb9d9b3977784c8639728a7ced8c"
integrity sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==
dependencies:
fast-glob "^3.2.7"
klona "^2.0.4"
normalize-path "^3.0.0"
stylus@0.59.0, stylus@^0.59.0:
version "0.59.0"
resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.59.0.tgz#a344d5932787142a141946536d6e24e6a6be7aa6"