chore(nx-dev): switch e2e to playwright (#18629)
This commit is contained in:
parent
9d5a3830be
commit
d4ea8064ca
@ -61,6 +61,7 @@ commands:
|
||||
name: Install Dependencies
|
||||
command: |
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm playwright install --with-deps firefox webkit chrome
|
||||
- save_cache:
|
||||
name: Save pnpm Package Cache
|
||||
key: node-deps-{{ arch }}-v3-{{ checksum "pnpm-lock.yaml" }}
|
||||
|
||||
@ -134,7 +134,7 @@ if you are interested.
|
||||
1. `SAML_CERT=<your-cert-string-from-above>`
|
||||
2. `SAML_ENTRY_POINT=<your-login-url-from-above>`
|
||||
|
||||
# Helm config
|
||||
## Helm config
|
||||
|
||||
If you are using [Helm to deploy NxCloud](https://github.com/nrwl/nx-cloud-helm) you
|
||||
will need to configure the below two values, as well as make the `SAML_CERT` and `SAML_ENTRY_POINT`
|
||||
|
||||
@ -1,137 +1,139 @@
|
||||
# `nx-cloud` - Release notes
|
||||
|
||||
## Nx Cloud package
|
||||
|
||||
{% callout type="check" title="@nrwl/nx-cloud was changed to nx-cloud" %}
|
||||
|
||||
[Read more about the rescope ≫](/recipes/other/rescope)
|
||||
|
||||
{% /callout %}
|
||||
|
||||
## 14.3.0
|
||||
### 14.3.0
|
||||
|
||||
- Fix: Resolve issue where sometimes cache hits would be reported as misses when paired with Nx 13.0-13.5
|
||||
- Fix: Correctly infer NX_BRANCH while running in Gitlab CI
|
||||
|
||||
## 14.2.0
|
||||
### 14.2.0
|
||||
|
||||
- Feat: Add `NX_CLOUD_SILENT_RECORD` environment variable for use with `nx-cloud record`
|
||||
- Feat: Add `NX_CLOUD_AGENT_TIMEOUT_MS` environment variable to configure task timeouts
|
||||
|
||||
## 14.1.2
|
||||
### 14.1.2
|
||||
|
||||
- Fix: Provider nicer failure message when version of Nx is incompatible with `@nx/nx-cloud`
|
||||
- Fix: Use Nx task graph if provided
|
||||
|
||||
## 14.1.1
|
||||
### 14.1.1
|
||||
|
||||
- Fix: Handle **overrides_unparsed** property for nx:run-commands executor
|
||||
|
||||
## 14.1.0
|
||||
### 14.1.0
|
||||
|
||||
- Fix: Gracefully handle errors with corrupted tarballs
|
||||
- Fix: Resolve issue where tasks run with read-only DTE would cause 404s on artifact retrieval
|
||||
- Feat: Allow specifying Nx Cloud installation source through generator
|
||||
|
||||
## 14.0.5
|
||||
### 14.0.5
|
||||
|
||||
- Fix: Workspace name for new Nx Cloud workspaces is pulled from `package.json` instead of `nx.json`
|
||||
- Fix: `@nx/nx-cloud` can be run from directories other than workspace root
|
||||
- Fix: Correctly infer `NX_BRANCH` and `NX_RUN_GROUP` from Jenkins
|
||||
- Fix: Ignore errors related to excess whitespace in tarballs
|
||||
|
||||
## 14.0.3
|
||||
### 14.0.3
|
||||
|
||||
- Fix: Enable caching for all inner commands
|
||||
|
||||
## 14.0.2
|
||||
### 14.0.2
|
||||
|
||||
- Fix: Remove dependency on `@nx/devkit` for init generator
|
||||
|
||||
## 14.0.1
|
||||
### 14.0.1
|
||||
|
||||
- Fix: Correctly infer `NX_BRANCH` and `NX_RUN_GROUP` from Vercel
|
||||
|
||||
## 14.0.0
|
||||
### 14.0.0
|
||||
|
||||
- Feat: Nx 14 Compatibility
|
||||
- Fix: Exit with status code of child process when recording commands with `nx-cloud record`
|
||||
|
||||
## 13.3.1
|
||||
### 13.3.1
|
||||
|
||||
- Feat: Store output for non-Nx commands in Nx Cloud. Check out https://nx.dev/nx-cloud/set-up/record-commands for more information.
|
||||
|
||||
## 13.2.1
|
||||
### 13.2.1
|
||||
|
||||
- Fix: Newer version of chalk was required, so the package didn't work with older versions of Nx.
|
||||
- Feat: Prepare the package to work with Nx 13.10.0
|
||||
|
||||
## 13.0.3
|
||||
### 13.0.3
|
||||
|
||||
Cleanup: Handle issues with the network and the api in a consistent fashion.
|
||||
|
||||
## 13.0.1
|
||||
### 13.0.1
|
||||
|
||||
- Fix: Print detailed errors when an agent is not able to upload file artifacts.
|
||||
|
||||
## 13.0.0
|
||||
### 13.0.0
|
||||
|
||||
- Feat: Support Nx 13.3 new life cycle API
|
||||
|
||||
## 12.5.2
|
||||
### 12.5.2
|
||||
|
||||
- Feat: GitHub Actions handle DTE reruns without requiring `npx nx-cloud start-ci-run`
|
||||
|
||||
## 12.5.1
|
||||
### 12.5.1
|
||||
|
||||
- Fix: DTE main job properly copies files after DTE is finished
|
||||
- Fix: Increased Node version compatibility for DTE Agents
|
||||
|
||||
## 12.5.0
|
||||
### 12.5.0
|
||||
|
||||
- Fix: Correctly print unexpected exceptions
|
||||
- Fix: Gracefully handle the case when tasks-hashes are missing
|
||||
- Fix: Agents should wait for the main job to start a rerun of a run group
|
||||
- Fix: Retry requests if we receive a 503
|
||||
|
||||
## 12.3.13
|
||||
### 12.3.13
|
||||
|
||||
- Fix: DTE could get stuck when trying to execute tasks with different configurations
|
||||
|
||||
# Docker Containers
|
||||
## Docker Containers
|
||||
|
||||
## 2306.01.2.patch4
|
||||
### 2306.01.2.patch4
|
||||
|
||||
- Fixes an issue with new licenses expiring sooner than original end date
|
||||
|
||||
## 2306.01.2.patch3
|
||||
### 2306.01.2.patch3
|
||||
|
||||
- Fixes an issue with multiple admin organizations being created on new installations
|
||||
- Fixes an issue where Enterprise licenses could not be applied on some new orgs
|
||||
|
||||
## 2306.01.2.patch2
|
||||
### 2306.01.2.patch2
|
||||
|
||||
- Fixes an issue with the `single-image` container where the aggregation would block the API from starting up
|
||||
|
||||
## 2306.01.2.patch1
|
||||
### 2306.01.2.patch1
|
||||
|
||||
- Fixes an issue where admin users were not being created on new installations.
|
||||
|
||||
## 2306.01.2
|
||||
### 2306.01.2
|
||||
|
||||
This is one of our biggest NxCloud On-Prem releases. It also marks a change in our release process which will be explained at the end.
|
||||
|
||||
#### Brand new UI
|
||||
##### Brand new UI
|
||||
|
||||
A few months ago we announced a complete re-design of the NxCloud UI! It's faster, easier to use and pleasant to look at! We're now bringing this to On-Prem users as well:
|
||||
|
||||
You can read more about it in our [announcement blog post](https://blog.nrwl.io/nx-cloud-3-0-faster-more-efficient-modernized-36ac5ae33b86).
|
||||
|
||||
#### Pricing updates
|
||||
##### Pricing updates
|
||||
|
||||
While before we provided you with a separate coupon for each workspace, we have now changed to "organization-wide licenses": you receive a single coupon for your whole organization, that gives you unlimited access for the agreed number of workspaces. You are then free to delete, create and re-shuffle your workspaces as often as you want without requiring new coupons for us (as long as you stay within your limit of workspaces).
|
||||
|
||||
You will see some updates in the UI to reflect this, however, **you don't need to do anything once you update your images!** We'll automatically migrate you to this, based on your current number of enabled workspaces!
|
||||
|
||||
#### Proxy updates
|
||||
##### Proxy updates
|
||||
|
||||
One of the features of NxCloud is its integrations with your repository hosting solution. When you open up a Pull Request, you can configure NxCloud to post a comment to it once your CI has finished running, with a summary of all the tasks that succeeded and failed on that code change, and a link to your branch on NxCloud so you can further analyse your run. Your developers save time, and allows them to skip digging through long CI logs.
|
||||
|
||||
@ -141,7 +143,7 @@ Before, if you had a self-hosted instance of Github, Gitlab or Bitbucket, calls
|
||||
|
||||
[We've also made updates to the runner, to support any internal proxies you might have within your intranet.](https://github.com/nrwl/nx-cloud-helm/blob/main/PROXY-GUIDE.md#supporting-self-signed-ssl-certificates)
|
||||
|
||||
#### DTE performance
|
||||
##### DTE performance
|
||||
|
||||
We completely re-wrote our Task Distribution engine, which should result in much fewer errors due to agent timeouts, increased performance and more deterministic task distribution.
|
||||
|
||||
@ -149,18 +151,18 @@ We've also added a new internal task queueing system, which should further impro
|
||||
|
||||
You can read more about the recent DTE improvements in our [NxCloud 3.0 blog post](https://blog.nrwl.io/nx-cloud-3-0-faster-more-efficient-modernized-36ac5ae33b86).
|
||||
|
||||
#### Misc updates
|
||||
##### Misc updates
|
||||
|
||||
- We have fixed issues related to OpenShift deployments. [Special thanks to minijus](https://github.com/nrwl/nx-cloud-helm/pull/32) for his work on the Helm charts and helping us test the changes.
|
||||
|
||||
#### Breaking changes
|
||||
##### Breaking changes
|
||||
|
||||
NxCloud uses MongoDB internally as its data store. While we've always used Mongo 4.2, in the latest release we started targetting Mongo 6.0. It's a much lighter process, with improved performance, and quicker reads and writes.
|
||||
|
||||
While you can still upgrade to this new image even if you are on Mongo 4.2 (nothing will break), **we strongly recommend you upgrade your Database to Mongo 6.0 to make sure nothing breaks in the future.** [We wrote a full guide on how you can approach the upgrade here](https://github.com/nrwl/nx-cloud-helm/blob/main/MONGO-OPERATOR-GUIDE.md#upgrading-to-mongo-6).
|
||||
If you need assistance, please get in touch at [cloud-support@nrwl.io](mailto:cloud-support@nrwl.io).
|
||||
|
||||
##### Migration from Community Edition to Enterprise
|
||||
###### Migration from Community Edition to Enterprise
|
||||
|
||||
On May 16th, 2023 we announced our plans to sunset the Community Edition of NxCloud On-Prem to align with our new pricing plans. If you are on the Community Edition, please follow these steps to migrate:
|
||||
|
||||
@ -168,7 +170,7 @@ On May 16th, 2023 we announced our plans to sunset the Community Edition of NxCl
|
||||
2. Switch to private Enterprise by setting `NX_CLOUD_MODE=private-enterprise` (or `mode: 'private-enterprise'` if using Helm).
|
||||
3. Reach out to us at [cloud-support@nrwl.io](mailto:cloud-support@nrwl.io). You will get a FREE, unlimited-use coupon for the next 3 months so you can trial Nx Enterprise.
|
||||
|
||||
#### New release process
|
||||
##### New release process
|
||||
|
||||
With this update, we are also changing our release process:
|
||||
|
||||
@ -179,39 +181,39 @@ With this update, we are also changing our release process:
|
||||
|
||||
Any questions at all or to report issues with the new release [please get in touch!](mailto:cloud-support@nrwl.io)
|
||||
|
||||
## 13-02-2023T23-45-24
|
||||
### 13-02-2023T23-45-24
|
||||
|
||||
- Feat: Targettable agents for DTE. You can now ask specific agents to pick up specific tasks (via `--targets
|
||||
- Fix: DTE fixes for 404 not found artefacts errors
|
||||
- Fix: issue when using Github integration with self-hosted Github instances
|
||||
|
||||
## 26-01-2023T21-22-48
|
||||
### 26-01-2023T21-22-48
|
||||
|
||||
- Misc: Fixes to the Gitlab integration
|
||||
|
||||
## 05-01-2023T17-53-45
|
||||
### 05-01-2023T17-53-45
|
||||
|
||||
- Misc: This release contains small bug fixes and UI improvements.
|
||||
|
||||
## 14-12-2022T19-43-44
|
||||
### 14-12-2022T19-43-44
|
||||
|
||||
- Feat: IAM Role Auth. We have now deprecated "aws_access_key_id" and "aws_access_key_secret" in favor of service accounts and IAM roles for accessing AWS resources. See the [new guide here](https://github.com/nrwl/nx-cloud-helm/blob/main/aws-guide/AWS-GUIDE.md) for details.
|
||||
|
||||
## 13-10-2022T16-45-30
|
||||
### 13-10-2022T16-45-30
|
||||
|
||||
- Misc: This release mostly contains improvements that apply to the Public SASS version of NxCloud. No significant changes for the On-Prem version.
|
||||
|
||||
## 13-10-2022T16-45-30
|
||||
### 13-10-2022T16-45-30
|
||||
|
||||
- Feat: Private Cloud now runs completely as Kubernetes cluster. See the [Helm example repo](https://github.com/nrwl/nx-cloud-helm) for more details
|
||||
|
||||
## 05-08-2022T15-42-20
|
||||
### 05-08-2022T15-42-20
|
||||
|
||||
- Fix: issue with retrieving hashes during reads
|
||||
- Feat: added route to display container version at `/version`
|
||||
- Misc: forward api errors to stderr so k8s clusters can process them better
|
||||
|
||||
## 02-08-2022T16-11-36
|
||||
### 02-08-2022T16-11-36
|
||||
|
||||
- Note: The version naming scheme for the containers was changed to better track date/time of releases and to support embedding of the version inside the web UI
|
||||
- Feat: view the container version under the `/errors` route
|
||||
@ -219,20 +221,20 @@ Any questions at all or to report issues with the new release [please get in tou
|
||||
- Feat: New system-ui font scheme
|
||||
- Fix: branch screen sorting performance improvements
|
||||
|
||||
## 2.4.11
|
||||
### 2.4.11
|
||||
|
||||
- Fixes an intermittent container start-up issue when running a self-contained Mongo instance
|
||||
- Fixes an issue with the self-hosted file-server where it would fail to create the initial directories
|
||||
|
||||
## 2.4.10
|
||||
### 2.4.10
|
||||
|
||||
- Fix an issue with the admin password not being set correctly
|
||||
|
||||
## 2.4.9
|
||||
### 2.4.9
|
||||
|
||||
- Align all NxCloud images to this version. No new fixes or features included.
|
||||
|
||||
## 2.4.8
|
||||
### 2.4.8
|
||||
|
||||
{% callout type="caution" title="IMPORTANT" %}
|
||||
The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you are running a Community version of the container, you will need to make sure the `NX_CLOUD_MODE=private-community` is explicitly set (otherwise your container will fail to start-up).
|
||||
@ -243,44 +245,44 @@ The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you
|
||||
- Fix: issue with billing page when multiple access tokens were attached to the same org
|
||||
- Fix: multiple Mongo DBs used to be created if a default DB was not provided in the connection string. Now it always defaults to the provided `NX_CLOUD_MONGO_DB_NAME`
|
||||
|
||||
## 2.4.7
|
||||
### 2.4.7
|
||||
|
||||
- Misc: performance improvements to DB indexes
|
||||
- Misc: improvements to hash differ to use regex
|
||||
- Misc: export more collections for debug purposes (workspaces and organizations)
|
||||
|
||||
## 2.4.6
|
||||
### 2.4.6
|
||||
|
||||
- Fix: issue with navigating to organizations/workspaces in the web app
|
||||
|
||||
## 2.4.5
|
||||
### 2.4.5
|
||||
|
||||
- Feat: filters to branch and run list pages
|
||||
- Fix: improved `MD5` cache artifact archiving
|
||||
- Misc: various UI and UX improvements to the NxCloud dashboards
|
||||
|
||||
## 2.4.4
|
||||
### 2.4.4
|
||||
|
||||
- Fix: Missing artefact retrieval error when using read-tokens
|
||||
- Fix: Performance improvements to the branch page and run groups sorting
|
||||
- Fix: better handling of artefact `.tar` archiving
|
||||
|
||||
## 2.4.3
|
||||
### 2.4.3
|
||||
|
||||
- Feat: Billing page messaging improvements
|
||||
- Fix: runs sorting on branch page
|
||||
|
||||
## 2.4.2
|
||||
### 2.4.2
|
||||
|
||||
- Feat: DTE post-run report
|
||||
- Feat: Hash Detail tool flow improvements
|
||||
|
||||
## 2.4.1
|
||||
### 2.4.1
|
||||
|
||||
- Feat: Admins can now easily export debug info for error investigation
|
||||
- Fix: branch screen run group sorting
|
||||
|
||||
## 2.4.0
|
||||
### 2.4.0
|
||||
|
||||
- Feat: [GitLab Auth Support](https://nx.app/docs/private-cloud-gitlab-auth)/private-cloud-gitlab-auth
|
||||
- Feat: Hash diffing tool improvements
|
||||
@ -292,57 +294,57 @@ The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you
|
||||
- Fix: handle DTEs with no tasks
|
||||
- Fix: await process checkout sessions
|
||||
|
||||
## 2.3.1
|
||||
### 2.3.1
|
||||
|
||||
- Feat: Increase file-server default cached artifact limit. If you are not using an external file storage (such as S3), then the cached assets will now be kept by default from 2 weeks to 4 weeks, increasing the chance of cache hits.
|
||||
- Feat: "Download cache usage" data from the "Time saved" workspace page
|
||||
|
||||
## 2.3.0
|
||||
### 2.3.0
|
||||
|
||||
- Feat: GitHub Integration - no token is now necessary in "`nx.json`" for the GitHub integration to work (you still need to provide as an env var for caching to work). To connect your workspace to GitHub without an access token in "`nx.json`" just pass in the "`NX_CLOUD_INTEGRATION_DEFAULT_WORKSPACE_ID=<your-workspace-id>`" env var
|
||||
- Misc: better error handling (report less false positives)
|
||||
- Fix: Scheduled tasks locking
|
||||
|
||||
## 2.2.16
|
||||
### 2.2.16
|
||||
|
||||
- Misc: DB performance improvements (old records clean-up aggregator, indexes etc.)
|
||||
|
||||
## 2.2.15
|
||||
### 2.2.15
|
||||
|
||||
- Feat: Add options to control database load
|
||||
- Fix: Better exception handling in the API
|
||||
|
||||
## 2.2.14
|
||||
### 2.2.14
|
||||
|
||||
- Feat: Optimize event processing to increase the throughput of workspaces with a very high number of agents.
|
||||
- Fix: Gracefully recover when stats aggregation fails
|
||||
|
||||
## 2.2.13
|
||||
### 2.2.13
|
||||
|
||||
- Feat: Hash diffing tool enhancements
|
||||
|
||||
## 2.2.12
|
||||
### 2.2.12
|
||||
|
||||
- Feat: DTE visualisation improvements for larger workspaces
|
||||
- Fix: billing page not displaying subscriptions for Private Community
|
||||
|
||||
## 2.2.11
|
||||
### 2.2.11
|
||||
|
||||
- Feat: Better error handling for scheduled tasks
|
||||
- Fix: branch screen not loading
|
||||
|
||||
## 2.2.10
|
||||
### 2.2.10
|
||||
|
||||
- Feat: Various UI improvements to the NxCloud screens
|
||||
- Feat: Hash detail diff tool
|
||||
- Feat: GitHub app comment revamp
|
||||
- Feat: DTE visualisation
|
||||
|
||||
## 2.2.9
|
||||
### 2.2.9
|
||||
|
||||
- Fix: DTE bug fixes caused by incorrectly batched tasks
|
||||
|
||||
## 2.2.8
|
||||
### 2.2.8
|
||||
|
||||
- Fix: various DTE bug fixes
|
||||
- Feat: Add `NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT` env var for more explicitly optimising DTEs
|
||||
@ -354,20 +356,20 @@ The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you
|
||||
- Feat: billing estimator (on billing page)
|
||||
- Fix: ignore ending slash on `NX_CLOUD_APP_URL` (in case it's added by mistake)
|
||||
|
||||
## 2.2.7
|
||||
### 2.2.7
|
||||
|
||||
- Feat: `VERBOSE=1` env variable option to output extra information during container initialisation
|
||||
- Feat: `MONGO_REPAIR=1` env variable option to trigger a [Mongo Repair](https://docs.mongodb.com/manual/tutorial/recover-data-following-unexpected-shutdown/) if the container data gets corrupted
|
||||
|
||||
## 2.2.3
|
||||
### 2.2.3
|
||||
|
||||
- Fix: Reset the memory limits to best work on an instance with 8GB of RAM.
|
||||
- Fix: Set the default `NX_CLOUD_MODE` to "community".
|
||||
|
||||
## 2.2
|
||||
### 2.2
|
||||
|
||||
- [Nx Cloud 2.2](https://blog.nrwl.io/%EF%B8%8F-nx-cloud-2-2-%EF%B8%8F-b7656ed5ce7c)
|
||||
|
||||
## 2.0
|
||||
### 2.0
|
||||
|
||||
- [Overview of Nx Cloud 2.0](https://blog.nrwl.io/introducing-nx-cloud-2-0-f1e5c2002a65)
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
{
|
||||
"extends": ["plugin:cypress/recommended", "../../.eslintrc.json"],
|
||||
"extends": ["plugin:playwright/recommended", "../../.eslintrc.json"],
|
||||
"ignorePatterns": ["!**/*"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
||||
"files": ["src/**/*.{ts,js,tsx,jsx}"],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset';
|
||||
import { defineConfig } from 'cypress';
|
||||
|
||||
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,
|
||||
/**
|
||||
* TODO(@nx/cypress): In Cypress v12,the testIsolation option is turned on by default.
|
||||
* This can cause tests to start breaking where not indended.
|
||||
* You should consider enabling this once you verify tests do not depend on each other
|
||||
* More Info: https://docs.cypress.io/guides/references/migration-guide#Test-Isolation
|
||||
**/
|
||||
testIsolation: false,
|
||||
},
|
||||
});
|
||||
40
nx-dev/nx-dev-e2e/playwright.config.ts
Normal file
40
nx-dev/nx-dev-e2e/playwright.config.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import { defineConfig } from '@playwright/test';
|
||||
import { nxE2EPreset } from '@nx/playwright/preset';
|
||||
import { workspaceRoot } from '@nx/devkit';
|
||||
|
||||
// For CI, you may want to set BASE_URL to the deployed application.
|
||||
const baseURL = process.env['BASE_URL'] || 'http://localhost:4200';
|
||||
|
||||
const preset = nxE2EPreset(__filename, { testDir: './src' });
|
||||
/**
|
||||
* Read environment variables from file.
|
||||
* https://github.com/motdotla/dotenv
|
||||
*/
|
||||
// require('dotenv').config();
|
||||
|
||||
/**
|
||||
* See https://playwright.dev/docs/test-configuration.
|
||||
*/
|
||||
export default defineConfig({
|
||||
...preset,
|
||||
// CI default is 'dot', which doesn't show error output in CI.
|
||||
// use list so errors are visible in CI logs
|
||||
reporter: process.env.CI ? 'list' : preset.reporter,
|
||||
// how long the entire suite can run, prevent CI from timing out
|
||||
globalTimeout: process.env.CI ? 1_800_000 : undefined,
|
||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
||||
use: {
|
||||
baseURL,
|
||||
// how long each page.goto can take before timing out
|
||||
navigationTimeout: process.env.CI ? 30_000 : undefined,
|
||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||
trace: 'on-first-retry',
|
||||
},
|
||||
/* Run your local dev server before starting the tests */
|
||||
webServer: {
|
||||
command: 'pnpm exec nx run nx-dev:serve:production',
|
||||
url: 'http://localhost:4200',
|
||||
reuseExistingServer: !process.env.CI,
|
||||
cwd: workspaceRoot,
|
||||
},
|
||||
});
|
||||
@ -4,6 +4,7 @@
|
||||
"sourceRoot": "nx-dev/nx-dev-e2e/src",
|
||||
"projectType": "application",
|
||||
"targets": {
|
||||
"lint": {},
|
||||
"e2e": {
|
||||
"dependsOn": [
|
||||
{
|
||||
@ -11,14 +12,12 @@
|
||||
"dependencies": true
|
||||
}
|
||||
],
|
||||
"executor": "@nx/cypress:cypress",
|
||||
"executor": "@nx/playwright:playwright",
|
||||
"outputs": ["{workspaceRoot}/dist/.playwright/nx-dev/nx-dev-e2e"],
|
||||
"options": {
|
||||
"cypressConfig": "nx-dev/nx-dev-e2e/cypress.config.ts",
|
||||
"devServerTarget": "nx-dev:serve:production",
|
||||
"testingType": "e2e"
|
||||
"config": "nx-dev/nx-dev-e2e/playwright.config.ts"
|
||||
}
|
||||
}
|
||||
},
|
||||
"lint": {}
|
||||
},
|
||||
"tags": ["scope:nx-dev", "type:e2e"],
|
||||
"implicitDependencies": ["nx-dev"]
|
||||
|
||||
61
nx-dev/nx-dev-e2e/src/additional-api-references.spec.ts
Normal file
61
nx-dev/nx-dev-e2e/src/additional-api-references.spec.ts
Normal file
@ -0,0 +1,61 @@
|
||||
import { assertTextOnPage } from './helpers';
|
||||
import { Page, test, expect } from '@playwright/test';
|
||||
|
||||
const pages: Array<{ title: string; path: string }> = [
|
||||
{ title: 'create-nx-workspace', path: '/cli/create-nx-workspace' },
|
||||
{ title: 'generate', path: '/cli/generate' },
|
||||
{ title: 'run', path: '/cli/run' },
|
||||
{ title: 'daemon', path: '/cli/daemon' },
|
||||
{ title: 'graph', path: '/cli/dep-graph' },
|
||||
{ title: 'run-many', path: '/cli/run-many' },
|
||||
{ title: 'affected', path: '/cli/affected' },
|
||||
{ title: 'affected:graph', path: '/cli/affected-dep-graph' },
|
||||
{ title: 'print-affected', path: '/cli/print-affected' },
|
||||
{ title: 'format:check', path: '/cli/format-check' },
|
||||
{ title: 'format:write', path: '/cli/format-write' },
|
||||
{ title: 'migrate', path: '/cli/migrate' },
|
||||
{ title: 'report', path: '/cli/report' },
|
||||
{ title: 'list', path: '/cli/list' },
|
||||
{ title: 'workspace-lint', path: '/cli/workspace-lint' },
|
||||
{ title: 'workspace-generator', path: '/cli/workspace-generator' },
|
||||
{ title: 'connect', path: '/cli/connect-to-nx-cloud' },
|
||||
{ title: 'reset', path: '/cli/reset' },
|
||||
{ title: 'Storybook', path: '/storybook/overview-react' },
|
||||
{ title: 'Storybook', path: '/storybook/overview-angular' },
|
||||
{
|
||||
title: 'Nx React Storybook Addon',
|
||||
path: '/storybook/migrate-webpack-final-react',
|
||||
},
|
||||
{
|
||||
title: 'Storybook Migration to webpackFinal',
|
||||
path: '/storybook/migrate-webpack-final-angular',
|
||||
},
|
||||
{
|
||||
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
|
||||
path: '/storybook/upgrade-storybook-v6-react',
|
||||
},
|
||||
{
|
||||
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
|
||||
path: '/storybook/upgrade-storybook-v6-angular',
|
||||
},
|
||||
{
|
||||
title: 'Setting up Storybook Composition with Nx',
|
||||
path: '/storybook/storybook-composition-setup',
|
||||
},
|
||||
{
|
||||
title: '@nx/devkit',
|
||||
path: '/devkit/index',
|
||||
},
|
||||
{
|
||||
title: '@nx/devkit',
|
||||
path: '/devkit/ngcli_adapter',
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* Asserting all the additional API references pages are accounted for and accessible.
|
||||
* Generation of the pages is manual since we want to make sure the change is intended.
|
||||
*/
|
||||
test.describe('nx-dev: Additional API references section', () => {
|
||||
pages.forEach((page) => assertTextOnPage(page.path, page.title));
|
||||
});
|
||||
7
nx-dev/nx-dev-e2e/src/app.spec.ts
Normal file
7
nx-dev/nx-dev-e2e/src/app.spec.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test('should display the primary heading', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
const heading = page.locator('[data-cy="primary-heading"]');
|
||||
await expect(heading).toContainText('Smart, FastExtensibleBuild System');
|
||||
});
|
||||
@ -1,58 +0,0 @@
|
||||
import { assertTextOnPage } from './helpers';
|
||||
|
||||
/**
|
||||
* Asserting all the additional API references pages are accounted for and accessible.
|
||||
* Generation of the pages is manual since we want to make sure the change is intended.
|
||||
*/
|
||||
describe('nx-dev: Additional API references section', () => {
|
||||
(<{ title: string; path: string }[]>[
|
||||
{ title: 'create-nx-workspace', path: '/cli/create-nx-workspace' },
|
||||
{ title: 'generate', path: '/cli/generate' },
|
||||
{ title: 'run', path: '/cli/run' },
|
||||
{ title: 'daemon', path: '/cli/daemon' },
|
||||
{ title: 'graph', path: '/cli/dep-graph' },
|
||||
{ title: 'run-many', path: '/cli/run-many' },
|
||||
{ title: 'affected', path: '/cli/affected' },
|
||||
{ title: 'affected:graph', path: '/cli/affected-dep-graph' },
|
||||
{ title: 'print-affected', path: '/cli/print-affected' },
|
||||
{ title: 'format:check', path: '/cli/format-check' },
|
||||
{ title: 'format:write', path: '/cli/format-write' },
|
||||
{ title: 'migrate', path: '/cli/migrate' },
|
||||
{ title: 'report', path: '/cli/report' },
|
||||
{ title: 'list', path: '/cli/list' },
|
||||
{ title: 'workspace-lint', path: '/cli/workspace-lint' },
|
||||
{ title: 'workspace-generator', path: '/cli/workspace-generator' },
|
||||
{ title: 'connect', path: '/cli/connect-to-nx-cloud' },
|
||||
{ title: 'reset', path: '/cli/reset' },
|
||||
{ title: 'Storybook', path: '/storybook/overview-react' },
|
||||
{ title: 'Storybook', path: '/storybook/overview-angular' },
|
||||
{
|
||||
title: 'Nx React Storybook Addon',
|
||||
path: '/storybook/migrate-webpack-final-react',
|
||||
},
|
||||
{
|
||||
title: 'Storybook Migration to webpackFinal',
|
||||
path: '/storybook/migrate-webpack-final-angular',
|
||||
},
|
||||
{
|
||||
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
|
||||
path: '/storybook/upgrade-storybook-v6-react',
|
||||
},
|
||||
{
|
||||
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
|
||||
path: '/storybook/upgrade-storybook-v6-angular',
|
||||
},
|
||||
{
|
||||
title: 'Setting up Storybook Composition with Nx',
|
||||
path: '/storybook/storybook-composition-setup',
|
||||
},
|
||||
{
|
||||
title: '@nx/devkit',
|
||||
path: '/devkit/index',
|
||||
},
|
||||
{
|
||||
title: '@nx/devkit',
|
||||
path: '/devkit/ngcli_adapter',
|
||||
},
|
||||
]).forEach((page) => assertTextOnPage(page.path, page.title));
|
||||
});
|
||||
@ -1,10 +0,0 @@
|
||||
describe('nx-dev', () => {
|
||||
beforeEach(() => cy.visit('/'));
|
||||
|
||||
it('should display the primary heading', () => {
|
||||
cy.get('[data-cy="primary-heading"]').should(
|
||||
'contain',
|
||||
'Smart, FastExtensibleBuild System'
|
||||
);
|
||||
});
|
||||
});
|
||||
@ -1,18 +0,0 @@
|
||||
/**
|
||||
* Assert a text is present on the visited page.
|
||||
* @param path
|
||||
* @param title
|
||||
* @param selector
|
||||
*/
|
||||
export function assertTextOnPage(
|
||||
path: string,
|
||||
title: string,
|
||||
selector: string = 'h1'
|
||||
): void {
|
||||
describe(path, () =>
|
||||
it(`should display "${title}"`, () => {
|
||||
cy.visit(path);
|
||||
cy.get(selector).should('contain.text', title);
|
||||
})
|
||||
);
|
||||
}
|
||||
@ -1,87 +0,0 @@
|
||||
import { assertTextOnPage } from './helpers';
|
||||
|
||||
/**
|
||||
* Asserting all the additional API references pages are accounted for and accessible.
|
||||
* Generation of the pages is manual since we want to make sure the change is intended.
|
||||
*/
|
||||
describe('nx-dev: Nx Cloud section', () => {
|
||||
(<{ title: string; path: string }[]>[
|
||||
{ title: 'What is Nx Cloud?', path: '/nx-cloud/intro/what-is-nx-cloud' },
|
||||
{
|
||||
title: 'Recording Non-Nx Commands',
|
||||
path: '/nx-cloud/set-up/record-commands',
|
||||
},
|
||||
{
|
||||
title: 'Enable GitHub PR Integration',
|
||||
path: '/nx-cloud/set-up/github',
|
||||
},
|
||||
{
|
||||
title: 'User Management',
|
||||
path: '/nx-cloud/account/users',
|
||||
},
|
||||
{
|
||||
title: 'Connecting Nx Cloud to your existing Google identity provider',
|
||||
path: '/nx-cloud/account/google-auth',
|
||||
},
|
||||
{
|
||||
title: 'Access Tokens',
|
||||
path: '/nx-cloud/account/access-tokens',
|
||||
},
|
||||
{
|
||||
title: 'Security Scenarios',
|
||||
path: '/nx-cloud/account/scenarios',
|
||||
},
|
||||
{
|
||||
title: 'End to End Encryption',
|
||||
path: '/nx-cloud/account/encryption',
|
||||
},
|
||||
{
|
||||
title: 'Running Nx Cloud Enterprise',
|
||||
path: '/nx-cloud/private-cloud/get-started',
|
||||
},
|
||||
{
|
||||
title: 'Auth (Basic)',
|
||||
path: '/nx-cloud/private-cloud/auth-single-admin',
|
||||
},
|
||||
{
|
||||
title: 'GitHub Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-github',
|
||||
},
|
||||
{
|
||||
title: 'GitLab Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-gitlab',
|
||||
},
|
||||
{
|
||||
title: 'Setting up a dedicated NxCloud VM',
|
||||
path: '/nx-cloud/private-cloud/ami-setup',
|
||||
},
|
||||
{
|
||||
title: 'BitBucket Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-bitbucket',
|
||||
},
|
||||
{
|
||||
title: 'SAML Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-saml',
|
||||
},
|
||||
{
|
||||
title: 'Advanced Configuration',
|
||||
path: '/nx-cloud/private-cloud/advanced-config',
|
||||
},
|
||||
{
|
||||
title: 'Configuring the Cloud Runner / Nx CLI',
|
||||
path: '/nx-cloud/reference/config',
|
||||
},
|
||||
{
|
||||
title: 'Environment Variables',
|
||||
path: '/nx-cloud/reference/env-vars',
|
||||
},
|
||||
{
|
||||
title: 'Nx Cloud Server API Reference',
|
||||
path: '/nx-cloud/reference/server-api',
|
||||
},
|
||||
{
|
||||
title: 'nx-cloud - Release notes',
|
||||
path: '/nx-cloud/reference/release-notes',
|
||||
},
|
||||
]).forEach((page) => assertTextOnPage(page.path, page.title));
|
||||
});
|
||||
@ -1,475 +0,0 @@
|
||||
import { assertTextOnPage } from './helpers';
|
||||
|
||||
/**
|
||||
* Asserting all the packages pages are accounted for and accessible.
|
||||
* Generation of the pages is manual since we want to make sure the change is intended.
|
||||
*/
|
||||
describe('nx-dev: Packages Section', () => {
|
||||
(<{ title: string; path: string }[]>[
|
||||
{ title: '@nx/angular', path: '/packages/angular' },
|
||||
{
|
||||
title: '@nx/angular:add-linting',
|
||||
path: '/packages/angular/generators/add-linting',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:application',
|
||||
path: '/packages/angular/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:component',
|
||||
path: '/packages/angular/generators/component',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:component-cypress-spec',
|
||||
path: '/packages/angular/generators/component-cypress-spec',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:component-story',
|
||||
path: '/packages/angular/generators/component-story',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:convert-tslint-to-eslint',
|
||||
path: '/packages/angular/generators/convert-tslint-to-eslint',
|
||||
},
|
||||
{ title: '@nx/angular:init', path: '/packages/angular/generators/init' },
|
||||
{
|
||||
title: '@nx/angular:library',
|
||||
path: '/packages/angular/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:library-secondary-entry-point',
|
||||
path: '/packages/angular/generators/library-secondary-entry-point',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:remote',
|
||||
path: '/packages/angular/generators/remote',
|
||||
},
|
||||
{ title: '@nx/angular:move', path: '/packages/angular/generators/move' },
|
||||
{
|
||||
title: '@nx/angular:convert-to-with-mf',
|
||||
path: '/packages/angular/generators/convert-to-with-mf',
|
||||
},
|
||||
{ title: '@nx/angular:host', path: '/packages/angular/generators/host' },
|
||||
{
|
||||
title: '@nx/angular:ng-add',
|
||||
path: '/packages/angular/generators/ng-add',
|
||||
},
|
||||
{ title: '@nx/angular:ngrx', path: '/packages/angular/generators/ngrx' },
|
||||
{ title: '@nx/angular:scam', path: '/packages/angular/generators/scam' },
|
||||
{
|
||||
title: '@nx/angular:scam-directive',
|
||||
path: '/packages/angular/generators/scam-directive',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:scam-pipe',
|
||||
path: '/packages/angular/generators/scam-pipe',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:setup-mf',
|
||||
path: '/packages/angular/generators/setup-mf',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:setup-tailwind',
|
||||
path: '/packages/angular/generators/setup-tailwind',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:stories',
|
||||
path: '/packages/angular/generators/stories',
|
||||
},
|
||||
{
|
||||
title: '@nx/',
|
||||
path: '/packages/angular/generators/storybook-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:web-worker',
|
||||
path: '/packages/angular/generators/web-worker',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:delegate-build',
|
||||
path: '/packages/angular/executors/delegate-build',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:ng-packagr-lite',
|
||||
path: '/packages/angular/executors/ng-packagr-lite',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:package',
|
||||
path: '/packages/angular/executors/package',
|
||||
},
|
||||
{ title: 'create-nx-plugin', path: '/packages/create-nx-plugin' },
|
||||
{
|
||||
title: 'create-nx-workspace',
|
||||
path: '/packages/create-nx-workspace',
|
||||
},
|
||||
{ title: '@nx/cypress', path: '/packages/cypress' },
|
||||
{ title: '@nx/cypress:init', path: '/packages/cypress/generators/init' },
|
||||
{
|
||||
title: '@nx/cypress:cypress-project',
|
||||
path: '/packages/cypress/generators/cypress-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/cypress:cypress',
|
||||
path: '/packages/cypress/executors/cypress',
|
||||
},
|
||||
{ title: '@nx/detox', path: '/packages/detox' },
|
||||
{ title: '@nx/detox:init', path: '/packages/detox/generators/init' },
|
||||
{
|
||||
title: '@nx/detox:application',
|
||||
path: '/packages/detox/generators/application',
|
||||
},
|
||||
{ title: '@nx/detox:build', path: '/packages/detox/executors/build' },
|
||||
{ title: '@nx/detox:test', path: '/packages/detox/executors/test' },
|
||||
{ title: '@nx/devkit', path: '/packages/devkit' },
|
||||
{ title: '@nx/esbuild', path: '/packages/esbuild' },
|
||||
{
|
||||
title: '@nx/esbuild:esbuild',
|
||||
path: '/packages/esbuild/executors/esbuild',
|
||||
},
|
||||
{ title: '@nx/eslint-plugin', path: '/packages/eslint-plugin' },
|
||||
{ title: '@nx/expo', path: '/packages/expo' },
|
||||
{
|
||||
title: '@nx/expo:init',
|
||||
path: '/packages/expo/generators/init',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:application',
|
||||
path: '/packages/expo/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:library',
|
||||
path: '/packages/expo/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:component',
|
||||
path: '/packages/expo/generators/component',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:start',
|
||||
path: '/packages/expo/executors/start',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:sync-deps',
|
||||
path: '/packages/expo/executors/sync-deps',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:ensure-symlink',
|
||||
path: '/packages/expo/executors/ensure-symlink',
|
||||
},
|
||||
{ title: '@nx/express', path: '/packages/express' },
|
||||
{ title: '@nx/express:init', path: '/packages/express/generators/init' },
|
||||
{
|
||||
title: '@nx/express:application',
|
||||
path: '/packages/express/generators/application',
|
||||
},
|
||||
{ title: '@nx/jest', path: '/packages/jest' },
|
||||
{ title: '@nx/jest:init', path: '/packages/jest/generators/init' },
|
||||
{
|
||||
title: '@nx/jest:configuration',
|
||||
path: '/packages/jest/generators/configuration',
|
||||
},
|
||||
{ title: '@nx/jest', path: '/packages/jest/executors/jest' },
|
||||
{ title: '@nx/js', path: '/packages/js' },
|
||||
{ title: '@nx/js:library', path: '/packages/js/generators/library' },
|
||||
{ title: '@nx/js:init', path: '/packages/js/generators/init' },
|
||||
{
|
||||
title: '@nx/js:convert-to-swc',
|
||||
path: '/packages/js/generators/convert-to-swc',
|
||||
},
|
||||
{ title: '@nx/js:tsc', path: '/packages/js/executors/tsc' },
|
||||
{ title: '@nx/js:swc', path: '/packages/js/executors/swc' },
|
||||
{ title: '@nx/linter', path: '/packages/linter' },
|
||||
{
|
||||
title: '@nx/linter:workspace-rules-project',
|
||||
path: '/packages/linter/generators/workspace-rules-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/linter',
|
||||
path: '/packages/linter/generators/workspace-rule',
|
||||
},
|
||||
{ title: '@nx/linter', path: '/packages/linter/executors/eslint' },
|
||||
{ title: '@nx/nest', path: '/packages/nest' },
|
||||
{
|
||||
title: '@nx/nest:application',
|
||||
path: '/packages/nest/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:convert-tslint-to-eslint',
|
||||
path: '/packages/nest/generators/convert-tslint-to-eslint',
|
||||
},
|
||||
{ title: '@nx/nest:init', path: '/packages/nest/generators/init' },
|
||||
{ title: '@nx/nest:library', path: '/packages/nest/generators/library' },
|
||||
{ title: '@nx/nest:class', path: '/packages/nest/generators/class' },
|
||||
{
|
||||
title: '@nx/nest:controller',
|
||||
path: '/packages/nest/generators/controller',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:decorator',
|
||||
path: '/packages/nest/generators/decorator',
|
||||
},
|
||||
{ title: '@nx/nest:filter', path: '/packages/nest/generators/filter' },
|
||||
{ title: '@nx/nest:gateway', path: '/packages/nest/generators/gateway' },
|
||||
{ title: '@nx/nest:guard', path: '/packages/nest/generators/guard' },
|
||||
{
|
||||
title: '@nx/nest:interceptor',
|
||||
path: '/packages/nest/generators/interceptor',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:interface',
|
||||
path: '/packages/nest/generators/interface',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:middleware',
|
||||
path: '/packages/nest/generators/middleware',
|
||||
},
|
||||
{ title: '@nx/nest:module', path: '/packages/nest/generators/module' },
|
||||
{ title: '@nx/nest:pipe', path: '/packages/nest/generators/pipe' },
|
||||
{
|
||||
title: '@nx/nest:provider',
|
||||
path: '/packages/nest/generators/provider',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:resolver',
|
||||
path: '/packages/nest/generators/resolver',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:resource',
|
||||
path: '/packages/nest/generators/resource',
|
||||
},
|
||||
{ title: '@nx/nest:service', path: '/packages/nest/generators/service' },
|
||||
{ title: '@nx/next', path: '/packages/next' },
|
||||
{ title: '@nx/next:init', path: '/packages/next/generators/init' },
|
||||
{
|
||||
title: '@nx/next:application',
|
||||
path: '/packages/next/generators/application',
|
||||
},
|
||||
{ title: '@nx/next:page', path: '/packages/next/generators/page' },
|
||||
{
|
||||
title: '@nx/next:component',
|
||||
path: '/packages/next/generators/component',
|
||||
},
|
||||
{ title: '@nx/next:library', path: '/packages/next/generators/library' },
|
||||
{ title: '@nx/next:build', path: '/packages/next/executors/build' },
|
||||
{ title: '@nx/next:server', path: '/packages/next/executors/server' },
|
||||
{ title: '@nx/next:export', path: '/packages/next/executors/export' },
|
||||
{ title: '@nx/node', path: '/packages/node' },
|
||||
{ title: '@nx/node:init', path: '/packages/node/generators/init' },
|
||||
{
|
||||
title: '@nx/node:application',
|
||||
path: '/packages/node/generators/application',
|
||||
},
|
||||
{ title: '@nx/node:library', path: '/packages/node/generators/library' },
|
||||
{ title: 'nx', path: '/packages/nx' },
|
||||
{ title: 'nx:noop', path: '/packages/nx/executors/noop' },
|
||||
{
|
||||
title: 'nx:run-commands',
|
||||
path: '/packages/nx/executors/run-commands',
|
||||
},
|
||||
{ title: 'nx:run-script', path: '/packages/nx/executors/run-script' },
|
||||
{ title: 'plugin', path: '/packages/plugin' },
|
||||
{
|
||||
title: '@nx/plugin:plugin',
|
||||
path: '/packages/plugin/generators/plugin',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:e2e-project',
|
||||
path: '/packages/plugin/generators/e2e-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:migration',
|
||||
path: '/packages/plugin/generators/migration',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:generator',
|
||||
path: '/packages/plugin/generators/generator',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:executor',
|
||||
path: '/packages/plugin/generators/executor',
|
||||
},
|
||||
{ title: '@nx/plugin:e2e', path: '/packages/plugin/executors/e2e' },
|
||||
{ title: '@nx/react', path: '/packages/react' },
|
||||
{ title: '@nx/react:init', path: '/packages/react/generators/init' },
|
||||
{
|
||||
title: '@nx/react:application',
|
||||
path: '/packages/react/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:library',
|
||||
path: '/packages/react/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:component',
|
||||
path: '/packages/react/generators/component',
|
||||
},
|
||||
{ title: '@nx/react:redux', path: '/packages/react/generators/redux' },
|
||||
{
|
||||
title: '@nx/react:storybook-configuration',
|
||||
path: '/packages/react/generators/storybook-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:component-story',
|
||||
path: '/packages/react/generators/component-story',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:stories',
|
||||
path: '/packages/react/generators/stories',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:component-cypress-spec',
|
||||
path: '/packages/react/generators/component-cypress-spec',
|
||||
},
|
||||
{ title: '@nx/react:hook', path: '/packages/react/generators/hook' },
|
||||
{ title: '@nx/react:host', path: '/packages/react/generators/host' },
|
||||
{ title: '@nx/react:remote', path: '/packages/react/generators/remote' },
|
||||
{
|
||||
title: '@nx/react:module-federation-dev-server',
|
||||
path: '/packages/react/executors/module-federation-dev-server',
|
||||
},
|
||||
{ title: '@nx/react-native', path: '/packages/react-native' },
|
||||
{
|
||||
title: '@nx/react-native:init',
|
||||
path: '/packages/react-native/generators/init',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:application',
|
||||
path: '/packages/react-native/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:library',
|
||||
path: '/packages/react-native/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:component',
|
||||
path: '/packages/react-native/generators/component',
|
||||
},
|
||||
{
|
||||
title: '@nx/',
|
||||
path: '/packages/react-native/generators/storybook-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:component-story',
|
||||
path: '/packages/react-native/generators/component-story',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:stories',
|
||||
path: '/packages/react-native/generators/stories',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:upgrade-native',
|
||||
path: '/packages/react-native/generators/upgrade-native',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:run-android',
|
||||
path: '/packages/react-native/executors/run-android',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:run-ios',
|
||||
path: '/packages/react-native/executors/run-ios',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:bundle',
|
||||
path: '/packages/react-native/executors/bundle',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:build-android',
|
||||
path: '/packages/react-native/executors/build-android',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:start',
|
||||
path: '/packages/react-native/executors/start',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:sync-deps',
|
||||
path: '/packages/react-native/executors/sync-deps',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:ensure-symlink',
|
||||
path: '/packages/react-native/executors/ensure-symlink',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:storybook',
|
||||
path: '/packages/react-native/executors/storybook',
|
||||
},
|
||||
{ title: '@nx/storybook', path: '/packages/storybook' },
|
||||
{
|
||||
title: '@nx/storybook:init',
|
||||
path: '/packages/storybook/generators/init',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:configuration',
|
||||
path: '/packages/storybook/generators/configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:cypress-project',
|
||||
path: '/packages/storybook/generators/cypress-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:storybook',
|
||||
path: '/packages/storybook/executors/storybook',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:build',
|
||||
path: '/packages/storybook/executors/build',
|
||||
},
|
||||
{ title: '@nx/web', path: '/packages/web' },
|
||||
{ title: '@nx/web:init', path: '/packages/web/generators/init' },
|
||||
{
|
||||
title: '@nx/web:application',
|
||||
path: '/packages/web/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/webpack:webpack',
|
||||
path: '/packages/webpack/executors/webpack',
|
||||
},
|
||||
{ title: '@nx/rollup:rollup', path: '/packages/rollup/executors/rollup' },
|
||||
{
|
||||
title: '@nx/webpack:dev-server',
|
||||
path: '/packages/webpack/executors/dev-server',
|
||||
},
|
||||
{
|
||||
title: '@nx/web:file-server',
|
||||
path: '/packages/web/executors/file-server',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:preset',
|
||||
path: '/packages/workspace/generators/preset',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:move',
|
||||
path: '/packages/workspace/generators/move',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:remove',
|
||||
path: '/packages/workspace/generators/remove',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:new',
|
||||
path: '/packages/workspace/generators/new',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:workspace-generator',
|
||||
path: '/packages/workspace/generators/workspace-generator',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:run-command',
|
||||
path: '/packages/workspace/generators/run-commands',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:fix-configuration',
|
||||
path: '/packages/workspace/generators/fix-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:npm-package',
|
||||
path: '/packages/workspace/generators/npm-package',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:ci-workflow',
|
||||
path: '/packages/workspace/generators/ci-workflow',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:counter',
|
||||
path: '/packages/workspace/executors/counter',
|
||||
},
|
||||
]).forEach((page) => assertTextOnPage(page.path, page.title));
|
||||
});
|
||||
@ -1,18 +0,0 @@
|
||||
import { uniq } from '@nx/e2e/utils';
|
||||
|
||||
describe('nx-dev: Recipes pages', () => {
|
||||
it('should list related recipes based on tags', () => {
|
||||
const { map, uniq } = Cypress._;
|
||||
|
||||
cy.visit('/recipes/other/deno-deploy');
|
||||
|
||||
// All text content has to be different
|
||||
cy.get('[data-document="related"] > article > ul > li').should(($list) => {
|
||||
const values = map($list, 'innerText');
|
||||
const distinct = uniq(values);
|
||||
expect(distinct, 'all strings are different').to.have.length(
|
||||
values.length
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
21
nx-dev/nx-dev-e2e/src/helpers.ts
Normal file
21
nx-dev/nx-dev-e2e/src/helpers.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import { Page, test, expect } from '@playwright/test';
|
||||
/**
|
||||
* Assert a text is present on the visited page.
|
||||
* @param page
|
||||
* @param path
|
||||
* @param title
|
||||
* @param selector
|
||||
*/
|
||||
export function assertTextOnPage(
|
||||
path: string,
|
||||
title: string,
|
||||
selector: string = 'h1'
|
||||
): void {
|
||||
test.describe(path, () =>
|
||||
test(`should display "${title}"`, async ({ page }) => {
|
||||
await page.goto(path);
|
||||
const locator = page.locator(selector);
|
||||
await expect(locator).toContainText(title);
|
||||
})
|
||||
);
|
||||
}
|
||||
90
nx-dev/nx-dev-e2e/src/nx-cloud-documentation.spec.ts
Normal file
90
nx-dev/nx-dev-e2e/src/nx-cloud-documentation.spec.ts
Normal file
@ -0,0 +1,90 @@
|
||||
import { assertTextOnPage } from './helpers';
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
const pages: Array<{ title: string; path: string }> = [
|
||||
{ title: 'What is Nx Cloud?', path: '/nx-cloud/intro/what-is-nx-cloud' },
|
||||
{
|
||||
title: 'Recording Non-Nx Commands',
|
||||
path: '/nx-cloud/set-up/record-commands',
|
||||
},
|
||||
{
|
||||
title: 'Enable GitHub PR Integration',
|
||||
path: '/nx-cloud/set-up/github',
|
||||
},
|
||||
{
|
||||
title: 'User Management',
|
||||
path: '/nx-cloud/account/users',
|
||||
},
|
||||
{
|
||||
title: 'Connecting Nx Cloud to your existing Google identity provider',
|
||||
path: '/nx-cloud/account/google-auth',
|
||||
},
|
||||
{
|
||||
title: 'Access Tokens',
|
||||
path: '/nx-cloud/account/access-tokens',
|
||||
},
|
||||
{
|
||||
title: 'Security Scenarios',
|
||||
path: '/nx-cloud/account/scenarios',
|
||||
},
|
||||
{
|
||||
title: 'End to End Encryption',
|
||||
path: '/nx-cloud/account/encryption',
|
||||
},
|
||||
{
|
||||
title: 'Running Nx Cloud Enterprise',
|
||||
path: '/nx-cloud/private-cloud/get-started',
|
||||
},
|
||||
{
|
||||
title: 'Auth (Basic)',
|
||||
path: '/nx-cloud/private-cloud/auth-single-admin',
|
||||
},
|
||||
{
|
||||
title: 'GitHub Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-github',
|
||||
},
|
||||
{
|
||||
title: 'GitLab Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-gitlab',
|
||||
},
|
||||
{
|
||||
title: 'Setting up a dedicated NxCloud VM',
|
||||
path: '/nx-cloud/private-cloud/ami-setup',
|
||||
},
|
||||
{
|
||||
title: 'BitBucket Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-bitbucket',
|
||||
},
|
||||
{
|
||||
title: 'SAML Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-saml',
|
||||
},
|
||||
{
|
||||
title: 'Advanced Configuration',
|
||||
path: '/nx-cloud/private-cloud/advanced-config',
|
||||
},
|
||||
{
|
||||
title: 'Configuring the Cloud Runner / Nx CLI',
|
||||
path: '/nx-cloud/reference/config',
|
||||
},
|
||||
{
|
||||
title: 'Environment Variables',
|
||||
path: '/nx-cloud/reference/env-vars',
|
||||
},
|
||||
{
|
||||
title: 'Nx Cloud Server API Reference',
|
||||
path: '/nx-cloud/reference/server-api',
|
||||
},
|
||||
{
|
||||
title: 'nx-cloud - Release notes',
|
||||
path: '/nx-cloud/reference/release-notes',
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* Asserting all the additional API references pages are accounted for and accessible.
|
||||
* Generation of the pages is manual since we want to make sure the change is intended.
|
||||
*/
|
||||
test.describe('nx-dev: Nx Cloud section', () => {
|
||||
pages.forEach((page) => assertTextOnPage(page.path, page.title));
|
||||
});
|
||||
477
nx-dev/nx-dev-e2e/src/packages.spec.ts
Normal file
477
nx-dev/nx-dev-e2e/src/packages.spec.ts
Normal file
@ -0,0 +1,477 @@
|
||||
import { assertTextOnPage } from './helpers';
|
||||
import { test } from '@playwright/test';
|
||||
|
||||
const pages: Array<{ title: string; path: string }> = [
|
||||
{ title: '@nx/angular', path: '/packages/angular' },
|
||||
{
|
||||
title: '@nx/angular:add-linting',
|
||||
path: '/packages/angular/generators/add-linting',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:application',
|
||||
path: '/packages/angular/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:component',
|
||||
path: '/packages/angular/generators/component',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:component-cypress-spec',
|
||||
path: '/packages/angular/generators/component-cypress-spec',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:component-story',
|
||||
path: '/packages/angular/generators/component-story',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:convert-tslint-to-eslint',
|
||||
path: '/packages/angular/generators/convert-tslint-to-eslint',
|
||||
},
|
||||
{ title: '@nx/angular:init', path: '/packages/angular/generators/init' },
|
||||
{
|
||||
title: '@nx/angular:library',
|
||||
path: '/packages/angular/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:library-secondary-entry-point',
|
||||
path: '/packages/angular/generators/library-secondary-entry-point',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:remote',
|
||||
path: '/packages/angular/generators/remote',
|
||||
},
|
||||
{ title: '@nx/angular:move', path: '/packages/angular/generators/move' },
|
||||
{
|
||||
title: '@nx/angular:convert-to-with-mf',
|
||||
path: '/packages/angular/generators/convert-to-with-mf',
|
||||
},
|
||||
{ title: '@nx/angular:host', path: '/packages/angular/generators/host' },
|
||||
{
|
||||
title: '@nx/angular:ng-add',
|
||||
path: '/packages/angular/generators/ng-add',
|
||||
},
|
||||
{ title: '@nx/angular:ngrx', path: '/packages/angular/generators/ngrx' },
|
||||
{ title: '@nx/angular:scam', path: '/packages/angular/generators/scam' },
|
||||
{
|
||||
title: '@nx/angular:scam-directive',
|
||||
path: '/packages/angular/generators/scam-directive',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:scam-pipe',
|
||||
path: '/packages/angular/generators/scam-pipe',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:setup-mf',
|
||||
path: '/packages/angular/generators/setup-mf',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:setup-tailwind',
|
||||
path: '/packages/angular/generators/setup-tailwind',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:stories',
|
||||
path: '/packages/angular/generators/stories',
|
||||
},
|
||||
{
|
||||
title: '@nx/',
|
||||
path: '/packages/angular/generators/storybook-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:web-worker',
|
||||
path: '/packages/angular/generators/web-worker',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:delegate-build',
|
||||
path: '/packages/angular/executors/delegate-build',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:ng-packagr-lite',
|
||||
path: '/packages/angular/executors/ng-packagr-lite',
|
||||
},
|
||||
{
|
||||
title: '@nx/angular:package',
|
||||
path: '/packages/angular/executors/package',
|
||||
},
|
||||
{ title: 'create-nx-plugin', path: '/packages/create-nx-plugin' },
|
||||
{
|
||||
title: 'create-nx-workspace',
|
||||
path: '/packages/create-nx-workspace',
|
||||
},
|
||||
{ title: '@nx/cypress', path: '/packages/cypress' },
|
||||
{ title: '@nx/cypress:init', path: '/packages/cypress/generators/init' },
|
||||
{
|
||||
title: '@nx/cypress:cypress-project',
|
||||
path: '/packages/cypress/generators/cypress-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/cypress:cypress',
|
||||
path: '/packages/cypress/executors/cypress',
|
||||
},
|
||||
{ title: '@nx/detox', path: '/packages/detox' },
|
||||
{ title: '@nx/detox:init', path: '/packages/detox/generators/init' },
|
||||
{
|
||||
title: '@nx/detox:application',
|
||||
path: '/packages/detox/generators/application',
|
||||
},
|
||||
{ title: '@nx/detox:build', path: '/packages/detox/executors/build' },
|
||||
{ title: '@nx/detox:test', path: '/packages/detox/executors/test' },
|
||||
{ title: '@nx/devkit', path: '/packages/devkit' },
|
||||
{ title: '@nx/esbuild', path: '/packages/esbuild' },
|
||||
{
|
||||
title: '@nx/esbuild:esbuild',
|
||||
path: '/packages/esbuild/executors/esbuild',
|
||||
},
|
||||
{ title: '@nx/eslint-plugin', path: '/packages/eslint-plugin' },
|
||||
{ title: '@nx/expo', path: '/packages/expo' },
|
||||
{
|
||||
title: '@nx/expo:init',
|
||||
path: '/packages/expo/generators/init',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:application',
|
||||
path: '/packages/expo/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:library',
|
||||
path: '/packages/expo/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:component',
|
||||
path: '/packages/expo/generators/component',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:start',
|
||||
path: '/packages/expo/executors/start',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:sync-deps',
|
||||
path: '/packages/expo/executors/sync-deps',
|
||||
},
|
||||
{
|
||||
title: '@nx/expo:ensure-symlink',
|
||||
path: '/packages/expo/executors/ensure-symlink',
|
||||
},
|
||||
{ title: '@nx/express', path: '/packages/express' },
|
||||
{ title: '@nx/express:init', path: '/packages/express/generators/init' },
|
||||
{
|
||||
title: '@nx/express:application',
|
||||
path: '/packages/express/generators/application',
|
||||
},
|
||||
{ title: '@nx/jest', path: '/packages/jest' },
|
||||
{ title: '@nx/jest:init', path: '/packages/jest/generators/init' },
|
||||
{
|
||||
title: '@nx/jest:configuration',
|
||||
path: '/packages/jest/generators/configuration',
|
||||
},
|
||||
{ title: '@nx/jest', path: '/packages/jest/executors/jest' },
|
||||
{ title: '@nx/js', path: '/packages/js' },
|
||||
{ title: '@nx/js:library', path: '/packages/js/generators/library' },
|
||||
{ title: '@nx/js:init', path: '/packages/js/generators/init' },
|
||||
{
|
||||
title: '@nx/js:convert-to-swc',
|
||||
path: '/packages/js/generators/convert-to-swc',
|
||||
},
|
||||
{ title: '@nx/js:tsc', path: '/packages/js/executors/tsc' },
|
||||
{ title: '@nx/js:swc', path: '/packages/js/executors/swc' },
|
||||
{ title: '@nx/linter', path: '/packages/linter' },
|
||||
{
|
||||
title: '@nx/linter:workspace-rules-project',
|
||||
path: '/packages/linter/generators/workspace-rules-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/linter',
|
||||
path: '/packages/linter/generators/workspace-rule',
|
||||
},
|
||||
{ title: '@nx/linter', path: '/packages/linter/executors/eslint' },
|
||||
{ title: '@nx/nest', path: '/packages/nest' },
|
||||
{
|
||||
title: '@nx/nest:application',
|
||||
path: '/packages/nest/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:convert-tslint-to-eslint',
|
||||
path: '/packages/nest/generators/convert-tslint-to-eslint',
|
||||
},
|
||||
{ title: '@nx/nest:init', path: '/packages/nest/generators/init' },
|
||||
{ title: '@nx/nest:library', path: '/packages/nest/generators/library' },
|
||||
{ title: '@nx/nest:class', path: '/packages/nest/generators/class' },
|
||||
{
|
||||
title: '@nx/nest:controller',
|
||||
path: '/packages/nest/generators/controller',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:decorator',
|
||||
path: '/packages/nest/generators/decorator',
|
||||
},
|
||||
{ title: '@nx/nest:filter', path: '/packages/nest/generators/filter' },
|
||||
{ title: '@nx/nest:gateway', path: '/packages/nest/generators/gateway' },
|
||||
{ title: '@nx/nest:guard', path: '/packages/nest/generators/guard' },
|
||||
{
|
||||
title: '@nx/nest:interceptor',
|
||||
path: '/packages/nest/generators/interceptor',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:interface',
|
||||
path: '/packages/nest/generators/interface',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:middleware',
|
||||
path: '/packages/nest/generators/middleware',
|
||||
},
|
||||
{ title: '@nx/nest:module', path: '/packages/nest/generators/module' },
|
||||
{ title: '@nx/nest:pipe', path: '/packages/nest/generators/pipe' },
|
||||
{
|
||||
title: '@nx/nest:provider',
|
||||
path: '/packages/nest/generators/provider',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:resolver',
|
||||
path: '/packages/nest/generators/resolver',
|
||||
},
|
||||
{
|
||||
title: '@nx/nest:resource',
|
||||
path: '/packages/nest/generators/resource',
|
||||
},
|
||||
{ title: '@nx/nest:service', path: '/packages/nest/generators/service' },
|
||||
{ title: '@nx/next', path: '/packages/next' },
|
||||
{ title: '@nx/next:init', path: '/packages/next/generators/init' },
|
||||
{
|
||||
title: '@nx/next:application',
|
||||
path: '/packages/next/generators/application',
|
||||
},
|
||||
{ title: '@nx/next:page', path: '/packages/next/generators/page' },
|
||||
{
|
||||
title: '@nx/next:component',
|
||||
path: '/packages/next/generators/component',
|
||||
},
|
||||
{ title: '@nx/next:library', path: '/packages/next/generators/library' },
|
||||
{ title: '@nx/next:build', path: '/packages/next/executors/build' },
|
||||
{ title: '@nx/next:server', path: '/packages/next/executors/server' },
|
||||
{ title: '@nx/next:export', path: '/packages/next/executors/export' },
|
||||
{ title: '@nx/node', path: '/packages/node' },
|
||||
{ title: '@nx/node:init', path: '/packages/node/generators/init' },
|
||||
{
|
||||
title: '@nx/node:application',
|
||||
path: '/packages/node/generators/application',
|
||||
},
|
||||
{ title: '@nx/node:library', path: '/packages/node/generators/library' },
|
||||
{ title: 'nx', path: '/packages/nx' },
|
||||
{ title: 'nx:noop', path: '/packages/nx/executors/noop' },
|
||||
{
|
||||
title: 'nx:run-commands',
|
||||
path: '/packages/nx/executors/run-commands',
|
||||
},
|
||||
{ title: 'nx:run-script', path: '/packages/nx/executors/run-script' },
|
||||
{ title: 'plugin', path: '/packages/plugin' },
|
||||
{
|
||||
title: '@nx/plugin:plugin',
|
||||
path: '/packages/plugin/generators/plugin',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:e2e-project',
|
||||
path: '/packages/plugin/generators/e2e-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:migration',
|
||||
path: '/packages/plugin/generators/migration',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:generator',
|
||||
path: '/packages/plugin/generators/generator',
|
||||
},
|
||||
{
|
||||
title: '@nx/plugin:executor',
|
||||
path: '/packages/plugin/generators/executor',
|
||||
},
|
||||
{ title: '@nx/plugin:e2e', path: '/packages/plugin/executors/e2e' },
|
||||
{ title: '@nx/react', path: '/packages/react' },
|
||||
{ title: '@nx/react:init', path: '/packages/react/generators/init' },
|
||||
{
|
||||
title: '@nx/react:application',
|
||||
path: '/packages/react/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:library',
|
||||
path: '/packages/react/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:component',
|
||||
path: '/packages/react/generators/component',
|
||||
},
|
||||
{ title: '@nx/react:redux', path: '/packages/react/generators/redux' },
|
||||
{
|
||||
title: '@nx/react:storybook-configuration',
|
||||
path: '/packages/react/generators/storybook-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:component-story',
|
||||
path: '/packages/react/generators/component-story',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:stories',
|
||||
path: '/packages/react/generators/stories',
|
||||
},
|
||||
{
|
||||
title: '@nx/react:component-cypress-spec',
|
||||
path: '/packages/react/generators/component-cypress-spec',
|
||||
},
|
||||
{ title: '@nx/react:hook', path: '/packages/react/generators/hook' },
|
||||
{ title: '@nx/react:host', path: '/packages/react/generators/host' },
|
||||
{ title: '@nx/react:remote', path: '/packages/react/generators/remote' },
|
||||
{
|
||||
title: '@nx/react:module-federation-dev-server',
|
||||
path: '/packages/react/executors/module-federation-dev-server',
|
||||
},
|
||||
{ title: '@nx/react-native', path: '/packages/react-native' },
|
||||
{
|
||||
title: '@nx/react-native:init',
|
||||
path: '/packages/react-native/generators/init',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:application',
|
||||
path: '/packages/react-native/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:library',
|
||||
path: '/packages/react-native/generators/library',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:component',
|
||||
path: '/packages/react-native/generators/component',
|
||||
},
|
||||
{
|
||||
title: '@nx/',
|
||||
path: '/packages/react-native/generators/storybook-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:component-story',
|
||||
path: '/packages/react-native/generators/component-story',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:stories',
|
||||
path: '/packages/react-native/generators/stories',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:upgrade-native',
|
||||
path: '/packages/react-native/generators/upgrade-native',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:run-android',
|
||||
path: '/packages/react-native/executors/run-android',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:run-ios',
|
||||
path: '/packages/react-native/executors/run-ios',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:bundle',
|
||||
path: '/packages/react-native/executors/bundle',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:build-android',
|
||||
path: '/packages/react-native/executors/build-android',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:start',
|
||||
path: '/packages/react-native/executors/start',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:sync-deps',
|
||||
path: '/packages/react-native/executors/sync-deps',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:ensure-symlink',
|
||||
path: '/packages/react-native/executors/ensure-symlink',
|
||||
},
|
||||
{
|
||||
title: '@nx/react-native:storybook',
|
||||
path: '/packages/react-native/executors/storybook',
|
||||
},
|
||||
{ title: '@nx/storybook', path: '/packages/storybook' },
|
||||
{
|
||||
title: '@nx/storybook:init',
|
||||
path: '/packages/storybook/generators/init',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:configuration',
|
||||
path: '/packages/storybook/generators/configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:cypress-project',
|
||||
path: '/packages/storybook/generators/cypress-project',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:storybook',
|
||||
path: '/packages/storybook/executors/storybook',
|
||||
},
|
||||
{
|
||||
title: '@nx/storybook:build',
|
||||
path: '/packages/storybook/executors/build',
|
||||
},
|
||||
{ title: '@nx/web', path: '/packages/web' },
|
||||
{ title: '@nx/web:init', path: '/packages/web/generators/init' },
|
||||
{
|
||||
title: '@nx/web:application',
|
||||
path: '/packages/web/generators/application',
|
||||
},
|
||||
{
|
||||
title: '@nx/webpack:webpack',
|
||||
path: '/packages/webpack/executors/webpack',
|
||||
},
|
||||
{ title: '@nx/rollup:rollup', path: '/packages/rollup/executors/rollup' },
|
||||
{
|
||||
title: '@nx/webpack:dev-server',
|
||||
path: '/packages/webpack/executors/dev-server',
|
||||
},
|
||||
{
|
||||
title: '@nx/web:file-server',
|
||||
path: '/packages/web/executors/file-server',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:preset',
|
||||
path: '/packages/workspace/generators/preset',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:move',
|
||||
path: '/packages/workspace/generators/move',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:remove',
|
||||
path: '/packages/workspace/generators/remove',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:new',
|
||||
path: '/packages/workspace/generators/new',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:workspace-generator',
|
||||
path: '/packages/workspace/generators/workspace-generator',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:run-command',
|
||||
path: '/packages/workspace/generators/run-commands',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:fix-configuration',
|
||||
path: '/packages/workspace/generators/fix-configuration',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:npm-package',
|
||||
path: '/packages/workspace/generators/npm-package',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:ci-workflow',
|
||||
path: '/packages/workspace/generators/ci-workflow',
|
||||
},
|
||||
{
|
||||
title: '@nx/workspace:counter',
|
||||
path: '/packages/workspace/executors/counter',
|
||||
},
|
||||
];
|
||||
/**
|
||||
* Asserting all the packages pages are accounted for and accessible.
|
||||
* Generation of the pages is manual since we want to make sure the change is intended.
|
||||
*/
|
||||
test.describe('nx-dev: Packages Section', () => {
|
||||
pages.forEach((page) => assertTextOnPage(page.path, page.title));
|
||||
});
|
||||
18
nx-dev/nx-dev-e2e/src/recipes.spec.ts
Normal file
18
nx-dev/nx-dev-e2e/src/recipes.spec.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('nx-dev: Recipes pages', () => {
|
||||
test('should list related recipes based on tags', async ({ page }) => {
|
||||
await page.goto('/recipes/other/deno-deploy');
|
||||
const relatedDocs = page.locator(
|
||||
'[data-document="related"] > article > ul > li'
|
||||
);
|
||||
const relatedDocsText = await relatedDocs.allInnerTexts();
|
||||
expect(relatedDocsText.length, 'has related docs').toBeGreaterThan(0);
|
||||
|
||||
// All text content has to be different
|
||||
const distinct = new Set(relatedDocsText);
|
||||
expect(distinct.size, 'all strings are different').toBe(
|
||||
relatedDocsText.length
|
||||
);
|
||||
});
|
||||
});
|
||||
@ -1,8 +0,0 @@
|
||||
// ***********************************************
|
||||
// For more comprehensive examples of custom
|
||||
// commands please read more here:
|
||||
// https://on.cypress.io/custom-commands
|
||||
// ***********************************************
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-namespace
|
||||
declare namespace Cypress {}
|
||||
@ -1,17 +0,0 @@
|
||||
// ***********************************************************
|
||||
// This example support/index.js is processed and
|
||||
// loaded automatically before your test files.
|
||||
//
|
||||
// This is a great place to put global configuration and
|
||||
// behavior that modifies Cypress.
|
||||
//
|
||||
// You can change the location of this file or turn off
|
||||
// automatically serving support files with the
|
||||
// 'supportFile' configuration option.
|
||||
//
|
||||
// You can read more here:
|
||||
// https://on.cypress.io/configuration
|
||||
// ***********************************************************
|
||||
|
||||
// Import commands.js using ES2015 syntax:
|
||||
import './commands';
|
||||
@ -1,10 +0,0 @@
|
||||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"sourceMap": false,
|
||||
"outDir": "../dist/out-tsc",
|
||||
"allowJs": true,
|
||||
"types": ["cypress", "node"]
|
||||
},
|
||||
"include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"]
|
||||
}
|
||||
@ -22,9 +22,8 @@
|
||||
},
|
||||
"sitemap": {
|
||||
"executor": "nx:run-commands",
|
||||
"outputs": ["{options.outputPath}"],
|
||||
"outputs": ["{workspaceRoot}/dist/nx-dev/nx-dev/public"],
|
||||
"options": {
|
||||
"outputPath": "dist/nx-dev/nx-dev/public",
|
||||
"command": "pnpm next-sitemap --config ./nx-dev/nx-dev/next-sitemap.config.js"
|
||||
}
|
||||
},
|
||||
|
||||
@ -72,6 +72,7 @@
|
||||
"@nx/js": "16.7.0-rc.1",
|
||||
"@nx/linter": "16.7.0-rc.1",
|
||||
"@nx/next": "16.7.0-rc.1",
|
||||
"@nx/playwright": "16.7.0-rc.1",
|
||||
"@nx/react": "16.7.0-rc.1",
|
||||
"@nx/storybook": "16.7.0-rc.1",
|
||||
"@nx/web": "16.7.0-rc.1",
|
||||
@ -166,6 +167,7 @@
|
||||
"eslint-plugin-cypress": "2.14.0",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"eslint-plugin-jsx-a11y": "6.6.1",
|
||||
"eslint-plugin-playwright": "^0.15.3",
|
||||
"eslint-plugin-react": "7.31.11",
|
||||
"eslint-plugin-react-hooks": "4.6.0",
|
||||
"eslint-plugin-storybook": "^0.6.12",
|
||||
|
||||
94
pnpm-lock.yaml
generated
94
pnpm-lock.yaml
generated
@ -1,9 +1,5 @@
|
||||
lockfileVersion: '6.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
overrides:
|
||||
minimist: ^1.2.6
|
||||
underscore: ^1.12.1
|
||||
@ -301,6 +297,9 @@ devDependencies:
|
||||
'@nx/next':
|
||||
specifier: 16.7.0-rc.1
|
||||
version: 16.7.0-rc.1(@babel/core@7.22.9)(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(file-loader@6.2.0)(next@13.3.4)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0)
|
||||
'@nx/playwright':
|
||||
specifier: 16.7.0-rc.1
|
||||
version: 16.7.0-rc.1(@playwright/test@1.36.1)(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)
|
||||
'@nx/react':
|
||||
specifier: 16.7.0-rc.1
|
||||
version: 16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0)
|
||||
@ -577,6 +576,9 @@ devDependencies:
|
||||
eslint-plugin-jsx-a11y:
|
||||
specifier: 6.6.1
|
||||
version: 6.6.1(eslint@8.46.0)
|
||||
eslint-plugin-playwright:
|
||||
specifier: ^0.15.3
|
||||
version: 0.15.3(eslint@8.46.0)
|
||||
eslint-plugin-react:
|
||||
specifier: 7.31.11
|
||||
version: 7.31.11(eslint@8.46.0)
|
||||
@ -3527,7 +3529,6 @@ packages:
|
||||
|
||||
/@emotion/memoize@0.7.4:
|
||||
resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==}
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@ -6110,42 +6111,6 @@ packages:
|
||||
- typescript
|
||||
dev: true
|
||||
|
||||
/@nrwl/js@15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3):
|
||||
resolution: {integrity: sha512-l2Q7oFpzx6ul7G0nKpMkrvnIEaOY+X8fc2g2Db5WqpnnBdfkrtWXZPg/O4DQ1p9O6BXrZ+Q2AK9bfgnliiwyEg==}
|
||||
dependencies:
|
||||
'@babel/core': 7.22.9
|
||||
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9)
|
||||
'@babel/plugin-proposal-decorators': 7.22.7(@babel/core@7.22.9)
|
||||
'@babel/plugin-transform-runtime': 7.22.9(@babel/core@7.22.9)
|
||||
'@babel/preset-env': 7.22.9(@babel/core@7.22.9)
|
||||
'@babel/preset-typescript': 7.22.5(@babel/core@7.22.9)
|
||||
'@babel/runtime': 7.22.6
|
||||
'@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3)
|
||||
'@nrwl/workspace': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(eslint@8.46.0)(prettier@2.7.1)(typescript@5.1.3)
|
||||
'@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3)
|
||||
babel-plugin-const-enum: 1.2.0(@babel/core@7.22.9)
|
||||
babel-plugin-macros: 2.8.0
|
||||
babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.22.9)
|
||||
chalk: 4.1.2
|
||||
fast-glob: 3.2.7
|
||||
fs-extra: 11.1.1
|
||||
ignore: 5.2.0
|
||||
js-tokens: 4.0.0
|
||||
minimatch: 3.0.5
|
||||
source-map-support: 0.5.19
|
||||
tree-kill: 1.2.2
|
||||
tslib: 2.6.1
|
||||
transitivePeerDependencies:
|
||||
- '@babel/traverse'
|
||||
- '@swc-node/register'
|
||||
- '@swc/core'
|
||||
- debug
|
||||
- nx
|
||||
- prettier
|
||||
- supports-color
|
||||
- typescript
|
||||
dev: true
|
||||
|
||||
/@nrwl/js@16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4):
|
||||
resolution: {integrity: sha512-lEHp1o1KRfXWwK8SVRvCVHU6Am58UXb8XqgOvx/wO/0CHUqTg9JopZ0zlF6+58eeRubVZCEVsZDUeQwAFVMq8w==}
|
||||
dependencies:
|
||||
@ -6172,7 +6137,7 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3)
|
||||
'@nrwl/js': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3)
|
||||
'@nrwl/js': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(eslint@8.46.0)(nx@16.7.0-rc.1)(prettier@2.7.1)(typescript@5.1.3)
|
||||
'@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3)
|
||||
eslint: 8.46.0
|
||||
tmp: 0.2.1
|
||||
@ -7005,6 +6970,32 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@nx/playwright@16.7.0-rc.1(@playwright/test@1.36.1)(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4):
|
||||
resolution: {integrity: sha512-k8IV2/GyvWNuWnHNE9e4r57N2oxk7ZlnlZUg7x/xBSxghQh1WLlk+Qes1jnD3QLnZyC7BR61sF1RF8E4+ZkHjg==}
|
||||
peerDependencies:
|
||||
'@playwright/test': ^1.36.0
|
||||
peerDependenciesMeta:
|
||||
'@playwright/test':
|
||||
optional: true
|
||||
dependencies:
|
||||
'@nx/devkit': 16.7.0-rc.1(nx@16.7.0-rc.1)
|
||||
'@nx/linter': 16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)
|
||||
'@playwright/test': 1.36.1
|
||||
tslib: 2.6.1
|
||||
transitivePeerDependencies:
|
||||
- '@babel/traverse'
|
||||
- '@swc-node/register'
|
||||
- '@swc/core'
|
||||
- '@swc/wasm'
|
||||
- '@types/node'
|
||||
- debug
|
||||
- eslint
|
||||
- nx
|
||||
- supports-color
|
||||
- typescript
|
||||
- verdaccio
|
||||
dev: true
|
||||
|
||||
/@nx/react@16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0):
|
||||
resolution: {integrity: sha512-NdHFv1+w/B7+6hGX+ZVyjdy6MVYrPapfb+Va6iarPZLfkzsvSJWR9jAJEHU9PCKOucJ+OS1yZaa67EVwYpy35w==}
|
||||
dependencies:
|
||||
@ -10295,7 +10286,6 @@ packages:
|
||||
|
||||
/@types/linkify-it@3.0.2:
|
||||
resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==}
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@ -10327,7 +10317,6 @@ packages:
|
||||
|
||||
/@types/mdurl@1.0.2:
|
||||
resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@ -15551,6 +15540,18 @@ packages:
|
||||
semver: 6.3.0
|
||||
dev: true
|
||||
|
||||
/eslint-plugin-playwright@0.15.3(eslint@8.46.0):
|
||||
resolution: {integrity: sha512-LQMW5y0DLK5Fnpya7JR1oAYL2/7Y9wDiYw6VZqlKqcRGSgjbVKNqxraphk7ra1U3Bb5EK444xMgUlQPbMg2M1g==}
|
||||
peerDependencies:
|
||||
eslint: '>=7'
|
||||
eslint-plugin-jest: '>=25'
|
||||
peerDependenciesMeta:
|
||||
eslint-plugin-jest:
|
||||
optional: true
|
||||
dependencies:
|
||||
eslint: 8.46.0
|
||||
dev: true
|
||||
|
||||
/eslint-plugin-react-hooks@4.6.0(eslint@8.46.0):
|
||||
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
|
||||
engines: {node: '>=10'}
|
||||
@ -23766,7 +23767,6 @@ packages:
|
||||
|
||||
/prr@1.0.1:
|
||||
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
|
||||
requiresBuild: true
|
||||
optional: true
|
||||
|
||||
/pseudomap@1.0.2:
|
||||
@ -28854,3 +28854,7 @@ packages:
|
||||
name: tiny-invariant
|
||||
version: 1.3.1
|
||||
dev: true
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user