Nx Cloud docs (#10690)
* docs(nxdev): consume nx cloud documentation & dedicated menu * docs(nxdev): nx-cloud docs visually indicated nx-cloud docs in nx.dev * docs(nxdev): formatting visually indicated nx-cloud docs in nx.dev * docs(nxdev): fix config * docs(nxdev): fix header link * docs(nxdev): consolidate dte set up guides Co-authored-by: ben <3447705+bcabanes@users.noreply.github.com>
This commit is contained in:
parent
0fd3281d3c
commit
9721844b05
@ -701,18 +701,8 @@
|
||||
"itemList": [
|
||||
{
|
||||
"name": "What is Nx Cloud?",
|
||||
"id": "nx-cloud",
|
||||
"id": "what-is-nx-cloud",
|
||||
"file": "nx-cloud/intro/nx-cloud"
|
||||
},
|
||||
{
|
||||
"name": "Distributed Caching",
|
||||
"id": "distributed-caching",
|
||||
"file": "nx-cloud/intro/distributed-caching"
|
||||
},
|
||||
{
|
||||
"name": "Distributed Task Execution",
|
||||
"id": "distributed-task-execution",
|
||||
"file": "nx-cloud/intro/distributed-task-execution"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
# Distributed Caching
|
||||
|
||||
## Only Build, Test, Lint Once
|
||||
|
||||
...across your entire organization.
|
||||
|
||||
When running Nx without Nx Cloud, a [computation cache is created on your local machine](https://nx.dev/using-nx/caching) to make the developer experience faster. This allows you to not waste time re-building, re-testing, re-linting, or any number of other actions you might take on code that hasn’t changed. Since the cache is stored locally, you are the only member of your team that can take advantage of these instant commands.
|
||||
|
||||
Nx Cloud allows this cache to be shared across your entire organization, meaning that any cacheable operation completed on your workspace only needs to be run once.
|
||||
|
||||
The time savings that this can provide your team are drastic. [This blog post](https://blog.nrwl.io/how-to-never-build-or-test-the-same-code-twice-2dc58e413279) explains how such a simple concept can have a massive impact on productive time for you and your team.
|
||||
|
||||
## Caching Priority
|
||||
|
||||
Whenever you run a cacheable command with Nx, Nx attempts to fulfill that command using the first successful strategy in the following list:
|
||||
|
||||
1. Check the local cache. If the command is cached there, replay the cached output.
|
||||
2. Check the Nx Cloud distributed cache. If the command is cached there, store the cache locally and replay the cached output.
|
||||
3. Run the command locally. Store the output in local cache. If you have a read-write access token, store the output in the Nx Cloud distributed cache.
|
||||
|
||||
This algorithm optimizes for speed locally and minimizes unnecessary use of the distributed cache.
|
||||
|
||||
## When is a Distributed Cache Helpful?
|
||||
|
||||
Generally speaking, the bigger the organization, the more helpful a distributed cache becomes. However, distributed cache is still useful even in the following scenarios with two developers and a CI/CD machine.
|
||||
|
||||
### Scenario 1: Help Me Fix This Bug
|
||||
|
||||
Perry works on a feature, but he can't figure out why it isn't working the way he expects. Neelam checks out that branch to help. Neelam doesn't need to re-run all the tests that Perry already ran.
|
||||
|
||||
### Scenario 2: Why Is This Breaking in CI?
|
||||
|
||||
Tony pushes a branch up to CI, but CI doesn't pass. He asks Sofija to help. Sofija checks out that branch to troubleshoot. Sofija can reuse the output from CI instead of waiting for builds to run on her machine.
|
||||
|
||||
### Scenario 3: CI Should Know It Already Did That
|
||||
|
||||
Maya and Trey push up changes to two different apps that both depend on an unchanged shared buildable library. CI reuses the build output of the shared buildable library when building the apps in the two different PRs.
|
||||
@ -1,38 +0,0 @@
|
||||
# Distributed Task Execution
|
||||
|
||||
> Before reading this guide, check out the [mental model guide](/using-nx/mental-model). It will help you understand how computation caching fits into the rest of Nx.
|
||||
|
||||
## Overview
|
||||
|
||||
Nx supports running commands across multiple machines. You can either set it up by hand (
|
||||
see [here](/ci/distributed-builds)) or use Nx Cloud.
|
||||
|
||||
[Read the comparison of the two approaches.](https://blog.nrwl.io/distributing-ci-binning-and-distributed-task-execution-632fe31a8953?source=friends_link&sk=5120b7ff982730854ed22becfe7a640a)
|
||||
|
||||
When using the distributed task execution, Nx is able to run any task graph on many agents instead of locally.
|
||||
|
||||
For instance, `nx affected --build` won't run the build locally (which can take hours for large workspaces). Instead,
|
||||
it will send the Task Graph to Nx Cloud. Nx Cloud Agents will then pick up the tasks they can run and execute them.
|
||||
|
||||
Note that this happens transparently. If an agent builds `app1`, it will fetch the outputs for `lib` if it doesn't have them
|
||||
already.
|
||||
|
||||
As agents complete tasks, the main job where you invoked `nx affected --build` will start receiving created files and
|
||||
terminal outputs.
|
||||
|
||||
After `nx affected --build` completes, the machine will have the build files and all the terminal outputs as if it ran
|
||||
it locally.
|
||||
|
||||

|
||||
|
||||
## Set Up
|
||||
|
||||
To set up your workspace for distributed task execution [follow this guide](/nx-cloud/set-up/set-up-dte).
|
||||
|
||||
## Example
|
||||
|
||||
[This is an example repo](https://github.com/vsavkin/interstellar) showing how easy it is to set up distributed task execution, showing the performance gains, and comparing to sharding/binning.
|
||||
|
||||
These are the savings you get by enabling Distributed Task Execution in your CI config:
|
||||
|
||||

|
||||
@ -1,21 +1,21 @@
|
||||
# Nx Cloud
|
||||
# What is Nx Cloud?
|
||||
|
||||
## Save Time With Distributed Task Execution & Cache
|
||||
## Save Time With Distributed Task Execution & Distributed Cache
|
||||
|
||||
Nx partitions a command into smaller tasks and runs them in parallel, in the correct order. Nx Cloud takes it one step further and [runs any command across multiple machines](/nx-cloud/intro/distributed-task-execution), while giving you a consolidated view of the command as if it ran locally.
|
||||
Nx partitions a command into smaller tasks and runs them in parallel, in the correct order. Nx Cloud takes it one step further and [runs any command across multiple machines](/using-nx/dte), while giving you a consolidated view of the command as if it ran locally.
|
||||
|
||||
Nx caches the output of any previously run command such as testing and building, so it can replay the cached results instead of rerunning it. Nx Cloud allows you to [share the computation cache](/nx-cloud/intro/distributed-caching) across everyone in your team and CI.
|
||||
Nx caches the output of any previously run command such as testing and building, so it can replay the cached results instead of rerunning it. Nx Cloud allows you to [share the computation cache](/using-nx/caching#distributed-computation-caching) across everyone in your team and CI.
|
||||
|
||||
No configuration needed.
|
||||
And it takes five minutes to set up.
|
||||
|
||||
## Clean User Interface
|
||||
|
||||
Most developers will benefit from Nx Cloud without ever changing any of their workflow. Commands will just execute faster. For those developers that are tasked with making the most of Nx Cloud or those that want to get more insight into the different commands executed in the repository, Nx Cloud has a clean, informative user interface.
|
||||
|
||||
The top level organization page displays recent runs and a helpful dashboard of information about commands run in the repository.
|
||||
The [top level organization page](https://nx.app/orgs/5e38af6de037b5000598b2d6/workspaces/5edaf12087863a0005781f17) displays recent runs and a helpful dashboard of information about commands run in the repository.
|
||||
|
||||
<iframe src="https://nx.app/orgs/5e38af6de037b5000598b2d6/workspaces/5edaf12087863a0005781f17">
|
||||
<iframe src="https://nx.app/orgs/5e38af6de037b5000598b2d6/workspaces/5edaf12087863a0005781f17?hideHeader=true"></iframe>
|
||||
|
||||
Each branch in the repository has its own dedicated page where you can view agent utilization and a waterfall task execution graph for the most recent runs against that branch.
|
||||
Each branch in the repository has its own [dedicated page](https://nx.app/branch?workspaceId=5edaf12087863a0005781f17&branchName=master) where you can view agent utilization and a waterfall task execution graph for the most recent runs against that branch.
|
||||
|
||||
<iframe src="https://nx.app/branch?workspaceId=5edaf12087863a0005781f17&branchName=master">
|
||||
<iframe src="https://nx.app/branch?workspaceId=5edaf12087863a0005781f17&branchName=master&hideHeader=true"></iframe>
|
||||
|
||||
@ -36,7 +36,7 @@ And then generate a new client secret, and save it somewhere secure (we'll use i
|
||||
|
||||
## Connect your private cloud instance to your OAuth App
|
||||
|
||||
[When setting up your private cloud](https://nx.app/docs/get-started-with-private-cloud-community), you can pass these two environment variables to it:
|
||||
[When setting up your private cloud](/nx-cloud/private-cloud/get-started), you can pass these two environment variables to it:
|
||||
|
||||
```bash
|
||||
GITHUB_AUTH_CLIENT_ID=...
|
||||
@ -53,4 +53,4 @@ If you are running an on-premise version of GitHub (Enterprise Server), you will
|
||||
|
||||
This will point all auth endpoints to your GitHub server (rather the public one).
|
||||
|
||||
Note: the above environment variable, also helps with setting up the GitHub app integration, so you can have NxCloud build stats directly on your pull request. See full set-up instructions [here](https://nx.app/docs/private-cloud-github-integration).
|
||||
Note: the above environment variable, also helps with setting up the GitHub app integration, so you can have NxCloud build stats directly on your pull request. See full set-up instructions [here](/nx-cloud/private-cloud/github).
|
||||
|
||||
@ -32,7 +32,7 @@ Once you create, keep a note of the Client ID and the Secret:
|
||||
|
||||
## Connect your private cloud instance to your new app
|
||||
|
||||
[When setting up your private cloud](https://nx.app/docs/get-started-with-private-cloud-community), you can pass these two environment variables to it:
|
||||
[When setting up your private cloud](/nx-cloud/private-cloud/get-started), you can pass these two environment variables to it:
|
||||
|
||||
```bash
|
||||
GITLAB_APP_ID=...
|
||||
|
||||
@ -3,20 +3,20 @@
|
||||
There are a few methods of authenticating users in Nx Private Cloud:
|
||||
|
||||
- single-admin user
|
||||
- [GitHub OAuth2](https://nx.app/docs/private-cloud-github-auth)
|
||||
- [GitLab OAuth2](https://nx.app/docs/private-cloud-gitlab-auth)
|
||||
- [GitHub OAuth2](/nx-cloud/private-cloud/auth-github)
|
||||
- [GitLab OAuth2](/nx-cloud/private-cloud/auth-gitlab)
|
||||
|
||||
## Why do users need access
|
||||
|
||||
While just adding an NxCloud access token to your monorepo give you distributed caching, the NxCloud web app gives you analytics about tasks running in your workspace, allows devs to easily inspect terminal output, and works seamlessly with our GitHub integration for your Pull Requests. Here is a [video walkthrough of this](https://youtu.be/GT7XIwG1i5A?t=409).
|
||||
|
||||
By default, when you connect your token to a workspace on your NxCloud web app, all links and runs are private to only members of your organisation. This means that you'll either need to explicitly add members, or make your organisation public (which means anyone with access to your Private NxCloud instance will be able to see your runs). [More details here.](https://nx.app/docs/manage-access#accessing-nx-cloud)
|
||||
By default, when you connect your token to a workspace on your NxCloud web app, all links and runs are private to only members of your organisation. This means that you'll either need to explicitly add members, or make your organisation public (which means anyone with access to your Private NxCloud instance will be able to see your runs). [More details here.](/nx-cloud/account/users#managing-members)
|
||||
|
||||
## Setting up a single admin user
|
||||
|
||||
If you just want to try out private cloud and set-up full membership management later, then the simplest option is to just set-up a single admin user. This option might also work for you if you are okay with [making your organisation public](https://nx.app/docs/manage-access#accessing-nx-cloud) to anyone that has access to your private cloud NxCloud instance.
|
||||
If you just want to try out private cloud and set-up full membership management later, then the simplest option is to just set-up a single admin user. This option might also work for you if you are okay with [making your organisation public](/nx-cloud/account/users#public-organizations) to anyone that has access to your private cloud NxCloud instance.
|
||||
|
||||
[While setting up your container](https://nx.app/docs/get-started-with-private-cloud-community) you can pass it the `ADMIN_PASSWORD` environment variable. This will set-up a default admin user for you, which you can use to manage your workspace on the NxCloud web app.
|
||||
[While setting up your container](/nx-cloud/private-cloud/get-started) you can pass it the `ADMIN_PASSWORD` environment variable. This will set-up a default admin user for you, which you can use to manage your workspace on the NxCloud web app.
|
||||
|
||||
Note: Even if you can make your organisation public, we still recommend setting up GitHub authentication and inviting more than 1 admin to your workspace, to reduce the chance of losing access to it.
|
||||
|
||||
@ -24,8 +24,8 @@ Note: Even if you can make your organisation public, we still recommend setting
|
||||
|
||||
For instructions on how to set-up third-party auth providers please refer to these guides:
|
||||
|
||||
- [GitHub Auth](https://nx.app/docs/private-cloud-github-auth)
|
||||
- [GitLab Auth](https://nx.app/docs/private-cloud-gitlab-auth)
|
||||
- [GitHub Auth](/nx-cloud/private-cloud/auth-github)
|
||||
- [GitLab Auth](/nx-cloud/private-cloud/auth-gitlab)
|
||||
|
||||
## Inviting users
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
Nx Private Cloud is a docker image that can be deployed to your cloud. This version keeps all data on your cloud, except for billing and utilization data that's sent to the Nx Cloud API to enable an integrated billing experience.
|
||||
|
||||
For companies who need complete control of data, with no external API calls, the [Nx Enterprise](https://nx.app/docs/get-started-with-private-cloud-enterprise) is for you.
|
||||
For companies who need complete control of data, with no external API calls, the [Nx Enterprise](/nx-cloud/private-cloud/get-started) is for you.
|
||||
|
||||
**Nx Cloud consists of 3 parts:**
|
||||
|
||||
@ -16,7 +16,7 @@ When running everything together, you won't be able to run more than one instanc
|
||||
|
||||
The instructions will go through running everything together first, and then, at the end, will talk about running the database and the file server separately.
|
||||
|
||||
The instructions will use Docker commands, but you can also deploy Nx Cloud to a Kubernetes cluster (see [here](https://nx.app/docs/kubernetes) for more information).
|
||||
The instructions will use Docker commands, but you can also deploy Nx Cloud to a Kubernetes cluster (see [here](/nx-cloud/private-cloud/deploy-kubernetes) for more information).
|
||||
|
||||
## Running Nx Private Cloud
|
||||
|
||||
@ -83,7 +83,7 @@ Depending on how your infrastructure is set up, you can either run Nx Private Cl
|
||||
- `443:8081` maps the internal port 8081 to 443, so it can be accessed in the browser without specifying the port. 80:8081 works the same way when you use HTTP instead of HTTPS.
|
||||
- `CERT_KEY` and `CERT` contain the values of private key and cert. The file extensions of the cert and key files can be different, but as long as they are in the PEM format (which is the case if you use, for instance, OpenSSL), the command will work.
|
||||
- `NX_CLOUD_APP_URL` is the URL the cloud can be accessed by (e.g., `https://nxcloud.privateurl.com`). **Important: Unless you are experimenting, it won't be localhost. It has to be the URL that your CI and your developer machine can reach. Also note, there is no trailing slash in the URL.**
|
||||
- `ADMIN_PASSWORD` contains the password of the admin user. The admin user is created the first time you run cloud, you can remove this env variable after that. Instead of an admin password, you can also follow [the instructions here](https://nx.app/docs/private-cloud-github-auth) to set-up GitHub auth.
|
||||
- `ADMIN_PASSWORD` contains the password of the admin user. The admin user is created the first time you run cloud, you can remove this env variable after that. Instead of an admin password, you can also follow [the instructions here](/nx-cloud/private-cloud/auth-github) to set-up GitHub auth.
|
||||
- `-v /data/private-cloud:/data` sets up the volume where the data is stored. `/data/private-cloud` refers to a folder on your machine, `/data` is the shareable folder from the Docker image.
|
||||
|
||||
### Step 3: Run the Container
|
||||
@ -112,11 +112,11 @@ As stated above, Nx Private Cloud will store all your artifacts and the informat
|
||||
|
||||
### Optional step 6: Set-up GitHub auth
|
||||
|
||||
Follow the [instructions here](https://nx.app/docs/private-cloud-github-auth) to set-up GitHub OAuth authentication so you can invite other members in your team to the workspace.
|
||||
Follow the [instructions here](/nx-cloud/private-cloud/auth-github) to set-up GitHub OAuth authentication so you can invite other members in your team to the workspace.
|
||||
|
||||
### Optional step 7: Set-up GitHub Pull Request integration
|
||||
|
||||
You can [optionally configure private cloud](https://nx.app/docs/private-cloud-github-integration) to post build stats directly on your GitHub pull requests.
|
||||
You can [optionally configure private cloud](/nx-cloud/private-cloud/github) to post build stats directly on your GitHub pull requests.
|
||||
|
||||
### Optional step 8: Setting Up Proxy
|
||||
|
||||
@ -138,7 +138,7 @@ By default, Nx Cloud requires Mongo 4.2+. If you are using an older version of M
|
||||
|
||||
### Using MongoDB Kubernetes Operator
|
||||
|
||||
The MongoDB team maintains the open source [MongoDB Kubernetes Operator](https://github.com/mongodb/mongodb-kubernetes-operator). You can use it to set up your own deployment of MongoDB. See [the Nx Cloud and Kubernetes page](https://nx.app/docs/kubernetes) for more information.
|
||||
The MongoDB team maintains the open source [MongoDB Kubernetes Operator](https://github.com/mongodb/mongodb-kubernetes-operator). You can use it to set up your own deployment of MongoDB. See [the Nx Cloud and Kubernetes page](/nx-cloud/private-cloud/deploy-kubernetes) for more information.
|
||||
|
||||
### Using CosmosDB
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Private Cloud GitHub Integration
|
||||
# Private Cloud GitHub PR Integration
|
||||
|
||||
## Set Up a Webhook
|
||||
|
||||
@ -7,12 +7,12 @@
|
||||
- Content type: `application/json`
|
||||
- Add a "Secret" (can be anything). Remember it, as we'll need to pass it to our Docker container.
|
||||
|
||||

|
||||

|
||||
|
||||
- Enable "Check Suites", "Check runs" and "Pull Requests" as the events that trigger the webhook.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## Generate Access token
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
- Make sure you select "repo" as a scope
|
||||
- After you generate the token, make sure to copy and store it. We'll add it to Private Cloud in a bit.
|
||||
|
||||

|
||||

|
||||
|
||||
## Optional - Configure Self-Hosted GitHub Instances
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
## 13.3.1
|
||||
|
||||
- Feat: Store output for non-Nx commands in Nx Cloud. Check out https://nx.app/docs/record-non-nx-commands for more information.
|
||||
- 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
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Nx API Spec
|
||||
# Nx Cloud Server API Reference
|
||||
|
||||
## OpenAPI 3.0.3
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Github Integration
|
||||
# Enable Github PR Integration
|
||||
|
||||
## Get Started
|
||||
|
||||
@ -6,7 +6,7 @@ The [Nx Cloud Github App](https://github.com/marketplace/official-nx-cloud-app)
|
||||
|
||||
## Nx Public Cloud CI Setup
|
||||
|
||||
Before you install the app, please make sure you have a **valid Nx Cloud `accessToken` in your `nx.json` file**. Nx Cloud reports will not generate properly on your PRs without one. You should already have one if you’re using Nx Cloud, but if you don’t, you can learn how to add one [here](https://nx.app/docs/manage-access).
|
||||
Before you install the app, please make sure you have a **valid Nx Cloud `accessToken` in your `nx.json` file**. Nx Cloud reports will not generate properly on your PRs without one. You should already have one if you’re using Nx Cloud, but if you don’t, you can learn how to add one [here](/nx-cloud/account/users).
|
||||
|
||||
You can find and install the app from [the GitHub marketplace](https://github.com/marketplace/official-nx-cloud-app).
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Set up Distributed Task Execution
|
||||
# Set Up Distributed Task Execution
|
||||
|
||||
To enable distributed task execution, the following has to be true:
|
||||
|
||||
@ -34,7 +34,7 @@ Setting `NX_CLOUD_DISTRIBUTED_EXECUTION_STOP_AGENTS_ON_FAILURE` to false will te
|
||||
|
||||
## Distributed Task Execution and Sharding
|
||||
|
||||
The Nx Cloud distributed task execution model is akin to what is used at Google or Facebook. It scales better and provided more flexiblity than sharding tasks across agents. [Read more about Distributed Task Execution and how it compares to binning/sharding.](https://blog.nrwl.io/distributing-ci-binning-and-distributed-task-execution-632fe31a8953?source=friends_link&sk=5120b7ff982730854ed22becfe7a640a)
|
||||
The Nx Cloud distributed task execution model is akin to what is used at Google or Facebook. It scales better and provided more flexibility than sharding tasks across agents. [Read more about Distributed Task Execution and how it compares to binning/sharding.](https://blog.nrwl.io/distributing-ci-binning-and-distributed-task-execution-632fe31a8953?source=friends_link&sk=5120b7ff982730854ed22becfe7a640a)
|
||||
|
||||
## CI/CD Examples
|
||||
|
||||
@ -44,258 +44,10 @@ Every organization manages their CI/CD pipelines differently, so the examples do
|
||||
|
||||
Read the guides for more information on how to configure them in CI.
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
An example of a GitHub Actions setup for an Nx workspace connected to Nx Cloud.
|
||||
|
||||
```yml
|
||||
name: CI
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
NX_CLOUD_DISTRIBUTED_EXECUTION: true
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
name: Checkout [main]
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Derive appropriate SHAs for base and head for `nx affected` commands
|
||||
uses: nrwl/nx-set-shas@v2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14'
|
||||
- run: npm install
|
||||
- run: npx nx-cloud start-ci-run
|
||||
- run: npx nx affected --target=build --parallel --max-parallel=3
|
||||
- run: npx nx affected --target=test --parallel --max-parallel=2
|
||||
- run: npx nx-cloud stop-all-agents
|
||||
pr:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
fetch-depth: 0
|
||||
- name: Derive appropriate SHAs for base and head for `nx affected` commands
|
||||
uses: nrwl/nx-set-shas@v2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14'
|
||||
- run: npm install
|
||||
- run: npx nx-cloud start-ci-run
|
||||
- run: npx nx affected --target=build --parallel --max-parallel=3
|
||||
- run: npx nx affected --target=test --parallel --max-parallel=2
|
||||
- run: npx nx-cloud stop-all-agents
|
||||
agents:
|
||||
runs-on: ubuntu-latest
|
||||
name: Agent 1
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
matrix:
|
||||
agent: [1, 2, 3]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14'
|
||||
- run: npm install
|
||||
- name: Start Nx Agent ${{ matrix.agent }}
|
||||
run: npx nx-cloud start-agent
|
||||
```
|
||||
|
||||
The `pr` and `main` jobs implement the CI workflow. The 3 agent jobs execute the tasks created by `pr` and `main`. Setting timeout-minutes is needed only if you have very slow tasks.
|
||||
|
||||
Note that if you use an older version of `@nrwl/nx-cloud`, you need to add the following two env variables.
|
||||
|
||||
```yml
|
||||
env:
|
||||
NX_BRANCH: ${{ github.head_ref }}
|
||||
NX_RUN_GROUP: ${{ github.run_id }}
|
||||
```
|
||||
|
||||
You can find more information about using GitHub Actions on the [`nx-tag-successful-ci-run`](https://github.com/nrwl/nx-tag-successful-ci-run) and [`nx-set-shas`](https://github.com/nrwl/nx-set-shas) repos.
|
||||
|
||||
### Circle CI
|
||||
|
||||
An example of a Circle CI setup for an Nx workspace connected to Nx Cloud.
|
||||
|
||||
```yml
|
||||
version: 2.1
|
||||
orbs:
|
||||
nx: nrwl/nx@1.0.0
|
||||
jobs:
|
||||
agent:
|
||||
steps:
|
||||
- checkout
|
||||
- run: npm install
|
||||
- run:
|
||||
command: npx nx-cloud start-agent
|
||||
no_output_timeout: 60m
|
||||
main:
|
||||
environment:
|
||||
NX_CLOUD_DISTRIBUTED_EXECUTION: 'true'
|
||||
steps:
|
||||
- checkout
|
||||
- run: npm install
|
||||
- nx/set-shas
|
||||
- run: npx nx affected --base=$NX_BASE --target=build --parallel --max-parallel=3
|
||||
- run: npx nx affected --base=$NX_BASE --target=test --parallel --max-parallel=2
|
||||
- run: npx nx-cloud stop-all-agents
|
||||
pr:
|
||||
environment:
|
||||
NX_CLOUD_DISTRIBUTED_EXECUTION: 'true'
|
||||
steps:
|
||||
- checkout
|
||||
- run: npm install
|
||||
- nx/set-shas
|
||||
- run: npx nx affected --base=$NX_BASE --target=build --parallel --max-parallel=3
|
||||
- run: npx nx affected --base=$NX_BASE --target=test --parallel --max-parallel=2
|
||||
- run: npx nx-cloud stop-all-agents
|
||||
workflows:
|
||||
build:
|
||||
jobs:
|
||||
- agent:
|
||||
name: 'agent1'
|
||||
- agent:
|
||||
name: 'agent2'
|
||||
- agent:
|
||||
name: 'agent3'
|
||||
- main:
|
||||
filters:
|
||||
branches:
|
||||
only: main
|
||||
- pr:
|
||||
filters:
|
||||
branches:
|
||||
ignore: main
|
||||
```
|
||||
|
||||
The `pr` and `main` jobs implement the CI workflow. The 3 agent jobs execute the tasks created by `pr` and `main`. Setting `no_output_timeout` is needed only if you have very slow tasks.
|
||||
|
||||
## Azure Pipelines
|
||||
|
||||
Unlike GitHub actions and CircleCI, we don't have the accordance to help you track the last successful run on `main`. In the example below, the base is set to `HEAD~1`, but a more robust solution would be to tag a SHA in the main job once it succeeds, and then use this tag as a base. See the [`nx-tag-successful-ci-run`](https://github.com/nrwl/nx-tag-successful-ci-run) and [`nx-set-shas`](https://github.com/nrwl/nx-set-shas) repos for more information.
|
||||
|
||||
We also have to set `NX_BRANCH` explicitly.
|
||||
|
||||
```yml
|
||||
trigger:
|
||||
- main
|
||||
pr:
|
||||
- main
|
||||
|
||||
variables:
|
||||
NX_CLOUD_DISTRIBUTED_EXECUTION: 'true'
|
||||
${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
|
||||
NX_BRANCH: 'main'
|
||||
${{ if ne(variables['Build.SourceBranchName'], 'main') }}:
|
||||
NX_BRANCH: $(System.PullRequest.PullRequestNumber)
|
||||
|
||||
jobs:
|
||||
- job: agent
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
strategy:
|
||||
parallel: 4
|
||||
steps:
|
||||
- script: npm i
|
||||
- script: pnpx nx-cloud start-agent
|
||||
|
||||
- job: main
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
condition: ne(variables['Build.Reason'], 'PullRequest'))
|
||||
steps:
|
||||
- script: npm i
|
||||
- script: npx nx-cloud start-ci-run
|
||||
- script: npx nx affected --base=HEAD~1 --target=build --parallel --max-parallel=3
|
||||
- script: npx nx affected --base=HEAD~1 --target=test --parallel --max-parallel=2
|
||||
- script: npx nx-cloud stop-all-agents
|
||||
|
||||
- job: pr
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
condition: eq(variables['Build.Reason'], 'PullRequest'))
|
||||
steps:
|
||||
- script: npm i
|
||||
- script: npx nx-cloud start-ci-run
|
||||
- script: npx nx affected --target=build --parallel --max-parallel=3
|
||||
- script: npx nx affected --target=test --parallel --max-parallel=2
|
||||
- script: npx nx-cloud stop-all-agents
|
||||
```
|
||||
|
||||
## Jenkins
|
||||
|
||||
Unlike GitHub actions and CircleCI, we don't have the accordance to help you track the last successful run on `main`. In the example below, the base is set to `HEAD~1`, but a more robust solution would be to tag a SHA in the main job once it succeeds, and then use this tag as a base.
|
||||
|
||||
We also have to set `NX_BRANCH` explicitly.
|
||||
|
||||
```yml
|
||||
pipeline {
|
||||
agent none
|
||||
environment {
|
||||
NX_CLOUD_DISTRIBUTED_EXECUTION = 'true'
|
||||
NX_BRANCH = env.BRANCH_NAME.replace('PR-', '')
|
||||
NX_RUN_GROUP = env.BUILD_ID // has to be unique
|
||||
}
|
||||
stages {
|
||||
stage('Pipeline') {
|
||||
parallel {
|
||||
stage('Agent') {
|
||||
matrix {
|
||||
agent any
|
||||
axes {
|
||||
axis {
|
||||
name 'Number'
|
||||
values '1', '2', '3'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
sh "npm install"
|
||||
sh "npx nx-cloud start"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Main') {
|
||||
when {
|
||||
branch 'main'
|
||||
}
|
||||
agent any
|
||||
steps {
|
||||
sh "npm install"
|
||||
sh "npx nx-cloud start-ci-run"
|
||||
sh "npx nx affected --base=HEAD~1 --target=build --parallel --max-parallel=3"
|
||||
sh "npx nx affected --base=HEAD~1 --target=test --parallel --max-parallel=2"
|
||||
sh "npx nx-cloud stop-all-agents"
|
||||
}
|
||||
}
|
||||
stage('PR') {
|
||||
when {
|
||||
not { branch 'main' }
|
||||
}
|
||||
agent any
|
||||
steps {
|
||||
sh "npm install"
|
||||
sh "npx nx-cloud start-ci-run"
|
||||
sh "npx nx affected --target=build --parallel --max-parallel=3"
|
||||
sh "npx nx affected --target=test --parallel --max-parallel=2"
|
||||
sh "npx nx-cloud stop-all-agents"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- [Azure Pipelines](/ci/monorepo-ci-azure#distributed-ci-with-nx-cloud)
|
||||
- [Circle CI](/ci/monorepo-ci-circle-ci#distributed-ci-with-nx-cloud)
|
||||
- [GitHub Actions](/ci/monorepo-ci-github-actions#distributed-ci-with-nx-cloud)
|
||||
- [Jenkins](/ci/monorepo-ci-jenkins#distributed-ci-with-nx-cloud)
|
||||
|
||||
## Additional Notes
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@ But regardless of how smart Nx is, there will be some large changes affecting th
|
||||
|
||||
There are several ways to distribute your CI across multiple machines.
|
||||
|
||||
The easiest way is to use Nx Cloud. Learn more about [configuring your CI](https://nx.app/docs/configuring-ci) environment using Nx Cloud with [Distributed Caching](https://nx.app/docs/distributed-caching) and [Distributed Task Execution](https://nx.app/docs/distributed-execution) in the Nx Cloud docs.
|
||||
The easiest way is to use Nx Cloud. Learn more about [configuring your CI](/nx-cloud/set-up/set-up-dte#cicd-examples) environment using Nx Cloud with [Distributed Caching](/nx-cloud/set-up/set-up-caching) and [Distributed Task Execution](/nx-cloud/set-up/set-up-dte) in the Nx Cloud docs.
|
||||
|
||||
But you can also set up distribution manually using the `print-affected` and `run-many` commands.
|
||||
|
||||
|
||||
@ -54,6 +54,8 @@ jobs:
|
||||
|
||||
The `main` job implements the CI workflow.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Distributed CI with Nx Cloud
|
||||
|
||||
A computation cache is created on your local machine to make the developer experience faster. This allows you to not waste time re-building, re-testing, re-linting, or any number of other actions you might take on code that hasn't changed. Because the cache is stored locally, you are the only member of your team that can take advantage of these instant commands. You can manage and share this cache manually.
|
||||
@ -111,4 +113,6 @@ jobs:
|
||||
|
||||
You can also use our [ci-workflow generator](https://nx.dev/packages/workspace/generators/ci-workflow) to generate the pipeline file.
|
||||
|
||||
Learn more about [configuring your CI](https://nx.app/docs/configuring-ci) environment using Nx Cloud with [Distributed Caching](https://nx.app/docs/distributed-caching) and [Distributed Task Execution](https://nx.app/docs/distributed-execution) in the Nx Cloud docs.
|
||||
Learn more about configuring your CI environment using Nx Cloud with [Distributed Caching](/nx-cloud/set-up/set-up-caching) and [Distributed Task Execution](/nx-cloud/set-up/set-up-dte) in the Nx Cloud docs.
|
||||
|
||||
</div>
|
||||
|
||||
@ -50,10 +50,14 @@ pipelines:
|
||||
|
||||
The `pull-requests` and `main` jobs implement the CI workflow.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Distributed CI with Nx Cloud
|
||||
|
||||
A computation cache is created on your local machine to make the developer experience faster. This allows you to not waste time re-building, re-testing, re-linting, or any number of other actions you might take on code that hasn't changed. Because the cache is stored locally, you are the only member of your team that can take advantage of these instant commands. You can manage and share this cache manually.
|
||||
|
||||
Nx Cloud allows this cache to be shared across your entire organization, meaning that any cacheable operation completed on your workspace only needs to be run once. Nx Cloud also allows you to distribute your CI across multiple machines to make sure the CI is fast even for very large repos.
|
||||
|
||||
Learn more about [configuring your CI](https://nx.app/docs/configuring-ci) environment using Nx Cloud with [Distributed Caching](https://nx.app/docs/distributed-caching) and [Distributed Task Execution](https://nx.app/docs/distributed-execution) in the Nx Cloud docs.
|
||||
Learn more about configuring your CI environment using Nx Cloud with [Distributed Caching](/nx-cloud/set-up/set-up-caching) and [Distributed Task Execution](/nx-cloud/set-up/set-up-dte) in the Nx Cloud docs.
|
||||
|
||||
</div>
|
||||
|
||||
@ -51,6 +51,8 @@ To use the [Nx Orb](https://github.com/nrwl/nx-orb) with a private repository on
|
||||
|
||||
> Note: It should be a user token, not project token.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Distributed CI with Nx Cloud
|
||||
|
||||
A computation cache is created on your local machine to make the developer experience faster. This allows you to not waste time re-building, re-testing, re-linting, or any number of other actions you might take on code that hasn't changed. Because the cache is stored locally, you are the only member of your team that can take advantage of these instant commands. You can manage and share this cache manually.
|
||||
@ -107,4 +109,6 @@ workflows:
|
||||
|
||||
You can also use our [ci-workflow generator](https://nx.dev/packages/workspace/generators/ci-workflow) to generate the configuration file.
|
||||
|
||||
Learn more about [configuring your CI](https://nx.app/docs/configuring-ci) environment using Nx Cloud with [Distributed Caching](https://nx.app/docs/distributed-caching) and [Distributed Task Execution](https://nx.app/docs/distributed-execution) in the Nx Cloud docs.
|
||||
Learn more about configuring your CI environment using Nx Cloud with [Distributed Caching](/nx-cloud/set-up/set-up-caching) and [Distributed Task Execution](/nx-cloud/set-up/set-up-dte) in the Nx Cloud docs.
|
||||
|
||||
</div>
|
||||
|
||||
@ -14,7 +14,7 @@ But they come with their own technical challenges. The more code you add into yo
|
||||
|
||||
## Setting GitHub Actions
|
||||
|
||||
The `GitHub` can track the last successful run on `main` branch and use this as a reference point for the `BASE`. The `Nx Set SHAs` provides conventient implementation of this functionality which you can drop into you existing CI config.
|
||||
The `GitHub` can track the last successful run on `main` branch and use this as a reference point for the `BASE`. The `Nx Set SHAs` provides convenient implementation of this functionality which you can drop into you existing CI config.
|
||||
To understand why knowing the last successful build is important for the affected command, check out the [in-depth explanation at Actions's docs](https://github.com/marketplace/actions/nx-set-shas#background).
|
||||
|
||||
Below is an example of a GitHub setup for an Nx workspace only building and testing what is affected. For more details on how the orb is used, head over to the [official docs](https://github.com/marketplace/actions/nx-set-shas).
|
||||
@ -46,6 +46,8 @@ jobs:
|
||||
|
||||
The `pr` and `main` jobs implement the CI workflow. Setting `timeout-minutes` is needed only if you have very slow tasks.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Distributed CI with Nx Cloud
|
||||
|
||||
A computation cache is created on your local machine to make the developer experience faster. This allows you to not waste time re-building, re-testing, re-linting, or any number of other actions you might take on code that hasn't changed. Because the cache is stored locally, you are the only member of your team that can take advantage of these instant commands. You can manage and share this cache manually.
|
||||
@ -84,4 +86,6 @@ jobs:
|
||||
|
||||
You can also use our [ci-workflow generator](https://nx.dev/packages/workspace/generators/ci-workflow) to generate the workflow file.
|
||||
|
||||
Learn more about [configuring your CI](https://nx.app/docs/configuring-ci) environment using Nx Cloud with [Distributed Caching](https://nx.app/docs/distributed-caching) and [Distributed Task Execution](https://nx.app/docs/distributed-execution) in the Nx Cloud docs.
|
||||
Learn more about configuring your CI environment using Nx Cloud with [Distributed Caching](/nx-cloud/set-up/set-up-caching) and [Distributed Task Execution](/nx-cloud/set-up/set-up-dte) in the Nx Cloud docs.
|
||||
|
||||
</div>
|
||||
|
||||
@ -76,10 +76,14 @@ build:
|
||||
The `build` and `test` jobs implement the CI workflow using `.distributed` as template to keep
|
||||
CI configuration file more readable.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Distributed CI with Nx Cloud
|
||||
|
||||
A computation cache is created on your local machine to make the developer experience faster. This allows you to not waste time re-building, re-testing, re-linting, or any number of other actions you might take on code that hasn't changed. Because the cache is stored locally, you are the only member of your team that can take advantage of these instant commands. You can manage and share this cache manually.
|
||||
|
||||
Nx Cloud allows this cache to be shared across your entire organization, meaning that any cacheable operation completed on your workspace only needs to be run once. Nx Cloud also allows you to distribute your CI across multiple machines to make sure the CI is fast even for very large repos.
|
||||
|
||||
Learn more about [configuring your CI](https://nx.app/docs/configuring-ci) environment using Nx Cloud with [Distributed Caching](https://nx.app/docs/distributed-caching) and [Distributed Task Execution](https://nx.app/docs/distributed-execution) in the Nx Cloud docs.
|
||||
Learn more about configuring your CI environment using Nx Cloud with [Distributed Caching](/nx-cloud/set-up/set-up-caching) and [Distributed Task Execution](/nx-cloud/set-up/set-up-dte) in the Nx Cloud docs.
|
||||
|
||||
</div>
|
||||
|
||||
@ -65,6 +65,8 @@ pipeline {
|
||||
|
||||
The `pr` and `main` jobs implement the CI workflow.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Distributed CI with Nx Cloud
|
||||
|
||||
A computation cache is created on your local machine to make the developer experience faster. This allows you to not waste time re-building, re-testing, re-linting, or any number of other actions you might take on code that hasn't changed. Because the cache is stored locally, you are the only member of your team that can take advantage of these instant commands. You can manage and share this cache manually.
|
||||
@ -121,4 +123,6 @@ pipeline {
|
||||
}
|
||||
```
|
||||
|
||||
Learn more about [configuring your CI](https://nx.app/docs/configuring-ci) environment using Nx Cloud with [Distributed Caching](https://nx.app/docs/distributed-caching) and [Distributed Task Execution](https://nx.app/docs/distributed-execution) in the Nx Cloud docs.
|
||||
Learn more about configuring your CI environment using Nx Cloud with [Distributed Caching](/nx-cloud/set-up/set-up-caching) and [Distributed Task Execution](/nx-cloud/set-up/set-up-dte) in the Nx Cloud docs.
|
||||
|
||||
</div>
|
||||
|
||||
11
docs/shared/nx-cloud-logo-horizontal-white.svg
Normal file
11
docs/shared/nx-cloud-logo-horizontal-white.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<svg width="800" height="160" viewBox="0 0 800 160" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M282.048 51.2V140.8H268.352L218.944 80.128V140.8H202.432V51.2H216.128L265.536 111.872V51.2H282.048Z" fill="white"/>
|
||||
<path d="M348.041 140.8L330.505 117.12L312.841 140.8H295.177L321.801 106.112L296.329 72.448H314.121L330.889 94.848L347.657 72.448H364.937L339.337 105.856L366.089 140.8H348.041Z" fill="white"/>
|
||||
<path d="M456.279 142.08C447.234 142.08 439.042 140.117 431.703 136.192C424.45 132.181 418.732 126.677 414.551 119.68C410.455 112.683 408.407 104.789 408.407 96.0001C408.407 87.2107 410.498 79.3174 414.679 72.32C418.86 65.3227 424.578 59.8614 431.831 55.936C439.17 51.9254 447.362 49.92 456.407 49.92C463.746 49.92 470.444 51.2 476.503 53.76C482.562 56.32 487.682 60.032 491.863 64.896L481.111 75.008C474.626 68.0107 466.647 64.512 457.175 64.512C451.031 64.512 445.527 65.8774 440.663 68.608C435.799 71.2534 432.002 74.9654 429.271 79.744C426.54 84.5227 425.175 89.9414 425.175 96.0001C425.175 102.059 426.54 107.477 429.271 112.256C432.002 117.035 435.799 120.789 440.663 123.52C445.527 126.165 451.031 127.488 457.175 127.488C466.647 127.488 474.626 123.947 481.111 116.864L491.863 127.104C487.682 131.968 482.519 135.68 476.375 138.24C470.316 140.8 463.618 142.08 456.279 142.08Z" fill="white"/>
|
||||
<path d="M506.271 45.824H522.271V140.8H506.271V45.824Z" fill="white"/>
|
||||
<path d="M573.991 141.696C567.079 141.696 560.85 140.203 555.303 137.216C549.756 134.229 545.404 130.091 542.247 124.8C539.175 119.424 537.639 113.365 537.639 106.624C537.639 99.8827 539.175 93.8667 542.247 88.576C545.404 83.2854 549.756 79.1467 555.303 76.16C560.85 73.1734 567.079 71.68 573.991 71.68C580.988 71.68 587.26 73.1734 592.807 76.16C598.354 79.1467 602.663 83.2854 605.735 88.576C608.892 93.8667 610.471 99.8827 610.471 106.624C610.471 113.365 608.892 119.424 605.735 124.8C602.663 130.091 598.354 134.229 592.807 137.216C587.26 140.203 580.988 141.696 573.991 141.696ZM573.991 128C579.879 128 584.743 126.037 588.583 122.112C592.423 118.187 594.343 113.024 594.343 106.624C594.343 100.224 592.423 95.0614 588.583 91.136C584.743 87.2107 579.879 85.248 573.991 85.248C568.103 85.248 563.239 87.2107 559.399 91.136C555.644 95.0614 553.767 100.224 553.767 106.624C553.767 113.024 555.644 118.187 559.399 122.112C563.239 126.037 568.103 128 573.991 128Z" fill="white"/>
|
||||
<path d="M691.947 72.448V140.8H676.715V132.096C674.155 135.168 670.955 137.557 667.115 139.264C663.275 140.885 659.136 141.696 654.699 141.696C645.568 141.696 638.358 139.179 633.067 134.144C627.862 129.024 625.259 121.472 625.259 111.488V72.448H641.259V109.312C641.259 115.456 642.624 120.064 645.355 123.136C648.171 126.123 652.139 127.616 657.259 127.616C662.976 127.616 667.499 125.867 670.827 122.368C674.24 118.784 675.947 113.664 675.947 107.008V72.448H691.947Z" fill="white"/>
|
||||
<path d="M779.84 45.824V140.8H764.48V131.968C761.835 135.211 758.549 137.643 754.624 139.264C750.784 140.885 746.517 141.696 741.824 141.696C735.253 141.696 729.323 140.245 724.032 137.344C718.827 134.443 714.731 130.347 711.744 125.056C708.757 119.68 707.264 113.536 707.264 106.624C707.264 99.7121 708.757 93.6107 711.744 88.32C714.731 83.0294 718.827 78.9334 724.032 76.032C729.323 73.1307 735.253 71.68 741.824 71.68C746.347 71.68 750.485 72.448 754.24 73.984C757.995 75.52 761.195 77.824 763.84 80.896V45.824H779.84ZM743.744 128C747.584 128 751.04 127.147 754.112 125.44C757.184 123.648 759.616 121.131 761.408 117.888C763.2 114.645 764.096 110.891 764.096 106.624C764.096 102.357 763.2 98.6027 761.408 95.36C759.616 92.1174 757.184 89.6427 754.112 87.936C751.04 86.144 747.584 85.248 743.744 85.248C739.904 85.248 736.448 86.144 733.376 87.936C730.304 89.6427 727.872 92.1174 726.08 95.36C724.288 98.6027 723.392 102.357 723.392 106.624C723.392 110.891 724.288 114.645 726.08 117.888C727.872 121.131 730.304 123.648 733.376 125.44C736.448 127.147 739.904 128 743.744 128Z" fill="white"/>
|
||||
<path d="M144 32V48C126.336 48 112 62.336 112 80C112 97.664 97.664 112 80 112C62.336 112 48 126.336 48 144H32C23.168 144 16 136.832 16 128V32C16 23.168 23.168 16 32 16H128C136.832 16 144 23.168 144 32Z" fill="#0E2039"/>
|
||||
<path d="M144 48V128C144 136.832 136.832 144 128 144H48C48 126.336 62.336 112 80 112C97.664 112 112 97.664 112 80C112 62.336 126.336 48 144 48Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
@ -199,6 +199,8 @@ The cache is stored in `node_modules/.cache/nx` by default. To change the cache
|
||||
|
||||
By default, Nx uses a local computation cache. Nx stores the cached values only for a week, after which they are deleted. To clear the cache run `nx reset`, and Nx creates a new one the next time it tries to access it.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Distributed Computation Caching
|
||||
|
||||
The computation cache provided by Nx can be distributed across multiple machines. Nx Cloud is a product that allows you to share the results of running build/test with everyone else working in the same workspace. Learn more at [https://nx.app](https://nx.app).
|
||||
@ -215,6 +217,34 @@ You can also distribute the cache manually using your own storage mechanisms. Be
|
||||
- By default, Nx also caches some computations necessary for calculating the project graph in the cache directory as well.
|
||||
- If you are using a shared volume where mutations to the cache are reflected immediately in other consumers, you should set `NX_PROJECT_GRAPH_CACHE_DIRECTORY` to a separate directory to separate it from the computation cache.
|
||||
|
||||
## Caching Priority
|
||||
|
||||
Whenever you run a cacheable command with Nx, Nx attempts to fulfill that command using the first successful strategy in the following list:
|
||||
|
||||
1. Check the local cache. If the command is cached there, replay the cached output.
|
||||
2. Check the Nx Cloud distributed cache. If the command is cached there, store the cache locally and replay the cached output.
|
||||
3. Run the command locally. Store the output in local cache. If you have a read-write access token, store the output in the Nx Cloud distributed cache.
|
||||
|
||||
This algorithm optimizes for speed locally and minimizes unnecessary use of the distributed cache.
|
||||
|
||||
## When is a Distributed Cache Helpful?
|
||||
|
||||
Generally speaking, the bigger the organization, the more helpful a distributed cache becomes. However, distributed cache is still useful even in the following scenarios with two developers and a CI/CD machine.
|
||||
|
||||
### Scenario 1: Help Me Fix This Bug
|
||||
|
||||
Perry works on a feature, but he can't figure out why it isn't working the way he expects. Neelam checks out that branch to help. Neelam doesn't need to re-run all the tests that Perry already ran.
|
||||
|
||||
### Scenario 2: Why Is This Breaking in CI?
|
||||
|
||||
Tony pushes a branch up to CI, but CI doesn't pass. He asks Sofija to help. Sofija checks out that branch to troubleshoot. Sofija can reuse the output from CI instead of waiting for builds to run on her machine.
|
||||
|
||||
### Scenario 3: CI Should Know It Already Did That
|
||||
|
||||
Maya and Trey push up changes to two different apps that both depend on an unchanged shared buildable library. CI reuses the build output of the shared buildable library when building the apps in the two different PRs.
|
||||
|
||||
</div>
|
||||
|
||||
## Example
|
||||
|
||||
- [This is an example repo](https://github.com/vsavkin/large-monorepo) benchmarking Nx's computation caching. It also explains why Nx's computation caching tends to be a lot faster than the caching of other build systems.
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
> Before reading this guide, check out the [mental model guide](/using-nx/mental-model). It will help you understand how computation caching fits into the rest of Nx.
|
||||
|
||||
<div class="nx-cloud-section">
|
||||
|
||||
## Overview
|
||||
|
||||
Nx supports running commands across multiple machines. You can either set it up by hand (
|
||||
@ -32,3 +34,5 @@ it locally.
|
||||
These are the savings you get by enabling Distributed Task Execution in your CI config:
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { DocumentMetadata } from '@nrwl/nx-dev/models-document';
|
||||
import { Menu, MenuSection } from '@nrwl/nx-dev/models-menu';
|
||||
import { Menu, MenuItem, MenuSection } from '@nrwl/nx-dev/models-menu';
|
||||
import {
|
||||
createMenuItems,
|
||||
getBasicSection,
|
||||
@ -12,7 +12,8 @@ export class MenuApi {
|
||||
|
||||
constructor(
|
||||
private readonly documents: DocumentMetadata,
|
||||
private readonly packageDocuments: DocumentMetadata[] = []
|
||||
private readonly packageDocuments: DocumentMetadata[] = [],
|
||||
private readonly extractorFunctions: ((x: MenuItem[]) => MenuSection)[] = []
|
||||
) {}
|
||||
|
||||
getMenu(): Menu {
|
||||
@ -21,17 +22,23 @@ export class MenuApi {
|
||||
if (menu) return menu;
|
||||
|
||||
const items = createMenuItems(this.documents);
|
||||
if (items) {
|
||||
menu = {
|
||||
sections: [getBasicSection(items), getDeepDiveSection(items)],
|
||||
};
|
||||
if (!!this.packageDocuments.length)
|
||||
menu.sections.push(
|
||||
this.getReferenceApiMenuSection(this.packageDocuments)
|
||||
);
|
||||
} else {
|
||||
throw new Error(`Cannot find any documents`);
|
||||
}
|
||||
if (!items) throw new Error(`Cannot find any documents`);
|
||||
|
||||
menu = {
|
||||
sections: this.extractorFunctions.map((categorizer) =>
|
||||
categorizer(
|
||||
items.length === 1 && items[0].id === 'nx-cloud'
|
||||
? (items[0].itemList as MenuItem[])
|
||||
: items
|
||||
)
|
||||
),
|
||||
};
|
||||
|
||||
if (!!this.packageDocuments.length)
|
||||
menu.sections.push(
|
||||
this.getReferenceApiMenuSection(this.packageDocuments)
|
||||
);
|
||||
|
||||
this.menuCache = menu;
|
||||
|
||||
return menu;
|
||||
|
||||
@ -101,3 +101,38 @@ export function getPackageApiSection(items: MenuItem[]): MenuSection {
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
export function getBasicNxCloudSection(items: MenuItem[]): MenuSection {
|
||||
return {
|
||||
id: 'basic',
|
||||
name: 'Basic',
|
||||
hideSectionHeader: true,
|
||||
itemList: items
|
||||
.filter(
|
||||
(m) => m.id === 'intro' || m.id === 'set-up' || m.id === 'account'
|
||||
)
|
||||
.map((m) => {
|
||||
return {
|
||||
...m,
|
||||
disableCollapsible: !m.id.endsWith('tutorial'),
|
||||
};
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
export function getDeepDiveNxCloudSection(items: MenuItem[]): MenuSection {
|
||||
return {
|
||||
id: 'deep-dive',
|
||||
name: 'Deep Dive',
|
||||
itemList: items
|
||||
.filter((m) => m.id === 'private-cloud' || m.id === 'reference')
|
||||
.map((m) => ({
|
||||
...m,
|
||||
disableCollapsible: true,
|
||||
itemList: m.itemList?.map((item) => ({
|
||||
...item,
|
||||
disableCollapsible: true,
|
||||
})),
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ import { sendCustomEvent } from '@nrwl/nx-dev/feature-analytics';
|
||||
import { DocumentData } from '@nrwl/nx-dev/models-document';
|
||||
import { ReactComponentElement } from 'react';
|
||||
import ReactMarkdown from 'react-markdown';
|
||||
import raw from 'rehype-raw';
|
||||
import autolinkHeadings from 'rehype-autolink-headings';
|
||||
import slug from 'rehype-slug';
|
||||
import gfm from 'remark-gfm';
|
||||
@ -48,6 +49,7 @@ export function Content(props: ContentProps): ReactComponentElement<any> {
|
||||
remarkPlugins={[gfm]}
|
||||
rehypePlugins={[
|
||||
slug,
|
||||
raw,
|
||||
[
|
||||
autolinkHeadings,
|
||||
{
|
||||
|
||||
103
nx-dev/nx-dev-e2e/src/integration/nx-cloud-documentation.spec.ts
Normal file
103
nx-dev/nx-dev-e2e/src/integration/nx-cloud-documentation.spec.ts
Normal file
@ -0,0 +1,103 @@
|
||||
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: 'Adding Nx Cloud to an Nx Workspace',
|
||||
path: '/nx-cloud/set-up/set-up-caching',
|
||||
},
|
||||
{
|
||||
title: 'Set Up Distributed Task Execution',
|
||||
path: '/nx-cloud/set-up/set-up-dte',
|
||||
},
|
||||
{
|
||||
title: 'Recording Non-Nx Commands',
|
||||
path: '/nx-cloud/set-up/record-commands',
|
||||
},
|
||||
{
|
||||
title: 'Enable Github PR Integration',
|
||||
path: '/nx-cloud/set-up/github',
|
||||
},
|
||||
{
|
||||
title: 'Billing and Utilization',
|
||||
path: '/nx-cloud/account/billing',
|
||||
},
|
||||
{
|
||||
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: 'Getting Started with Nx Private Cloud',
|
||||
path: '/nx-cloud/private-cloud/get-started',
|
||||
},
|
||||
{
|
||||
title: 'Private Cloud GitHub PR Integration',
|
||||
path: '/nx-cloud/private-cloud/github',
|
||||
},
|
||||
{
|
||||
title: 'Nx Private Cloud and Kubernetes',
|
||||
path: '/nx-cloud/private-cloud/deploy-kubernetes',
|
||||
},
|
||||
{
|
||||
title: 'Deploying Nx Private Cloud to AWS',
|
||||
path: '/nx-cloud/private-cloud/deploy-aws',
|
||||
},
|
||||
{
|
||||
title: 'Deploying Nx Private Cloud to Azure',
|
||||
path: '/nx-cloud/private-cloud/deploy-azure',
|
||||
},
|
||||
{
|
||||
title: 'Nx Private Cloud Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-single-admin',
|
||||
},
|
||||
{
|
||||
title: 'Nx Private Cloud GitHub Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-github',
|
||||
},
|
||||
{
|
||||
title: 'Nx Private Cloud GitLab Auth',
|
||||
path: '/nx-cloud/private-cloud/auth-gitlab',
|
||||
},
|
||||
{
|
||||
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: '@nrwl/nx-cloudNx Private Cloud',
|
||||
path: '/nx-cloud/reference/release-notes',
|
||||
},
|
||||
]).forEach((page) => assertTextOnPage(page.path, page.title));
|
||||
});
|
||||
@ -2,6 +2,12 @@ import { DocumentsApi } from '@nrwl/nx-dev/data-access-documents/node-only';
|
||||
import { MenuApi } from '@nrwl/nx-dev/data-access-menu';
|
||||
import { PackagesApi } from '@nrwl/nx-dev/data-access-packages/node-only';
|
||||
import { DocumentMetadata } from '@nrwl/nx-dev/models-document';
|
||||
import {
|
||||
getBasicNxCloudSection,
|
||||
getBasicSection,
|
||||
getDeepDiveNxCloudSection,
|
||||
getDeepDiveSection,
|
||||
} from '../../data-access-menu/src/lib/menu.utils';
|
||||
|
||||
// Imports JSON directly, so they can be bundled into the app and functions.
|
||||
// Also provides some test safety.
|
||||
@ -22,7 +28,22 @@ export const nxDocumentsApi = new DocumentsApi({
|
||||
addAncestor: null,
|
||||
});
|
||||
|
||||
export const nxCloudDocumentsApi = new DocumentsApi({
|
||||
publicDocsRoot: 'nx-dev/nx-dev/public/documentation',
|
||||
documentSources: [
|
||||
documents.find((x) => x.id === 'nx-cloud-documentation'),
|
||||
].filter((x) => !!x) as DocumentMetadata[],
|
||||
addAncestor: { id: 'nx-cloud', name: 'Nx Cloud' },
|
||||
});
|
||||
|
||||
export const nxMenuApi = new MenuApi(
|
||||
nxDocumentsApi.getDocuments(),
|
||||
packagesApi.getPackageDocuments().itemList as DocumentMetadata[]
|
||||
packagesApi.getPackageDocuments().itemList as DocumentMetadata[],
|
||||
[getBasicSection, getDeepDiveSection]
|
||||
);
|
||||
|
||||
export const nxCloudMenuApi = new MenuApi(
|
||||
nxCloudDocumentsApi.getDocuments(),
|
||||
[],
|
||||
[getBasicNxCloudSection, getDeepDiveNxCloudSection]
|
||||
);
|
||||
|
||||
@ -10,7 +10,13 @@ import { Footer, Header } from '@nrwl/nx-dev/ui-common';
|
||||
import cx from 'classnames';
|
||||
import Router from 'next/router';
|
||||
import { useCallback, useEffect, useState } from 'react';
|
||||
import { nxDocumentsApi, nxMenuApi, packagesApi } from '../lib/api';
|
||||
import {
|
||||
nxCloudDocumentsApi,
|
||||
nxCloudMenuApi,
|
||||
nxDocumentsApi,
|
||||
nxMenuApi,
|
||||
packagesApi,
|
||||
} from '../lib/api';
|
||||
|
||||
interface DocumentationPageProps {
|
||||
menu: Menu;
|
||||
@ -143,7 +149,15 @@ export async function getStaticProps({
|
||||
}: {
|
||||
params: { segments: string[] };
|
||||
}) {
|
||||
const menu = nxMenuApi.getMenu();
|
||||
// Set Document and Menu apis
|
||||
let documentsApi = nxDocumentsApi;
|
||||
let menuApi = nxMenuApi;
|
||||
if (params.segments[0] === 'nx-cloud') {
|
||||
documentsApi = nxCloudDocumentsApi;
|
||||
menuApi = nxCloudMenuApi;
|
||||
}
|
||||
|
||||
const menu = menuApi.getMenu();
|
||||
|
||||
if (params.segments[0] === 'packages') {
|
||||
let pkg: PackageMetadata | null = null;
|
||||
@ -192,7 +206,7 @@ export async function getStaticProps({
|
||||
|
||||
let document: DocumentData | undefined;
|
||||
try {
|
||||
document = nxDocumentsApi.getDocument(params.segments);
|
||||
document = documentsApi.getDocument(params.segments);
|
||||
} catch (e) {
|
||||
// Do nothing
|
||||
}
|
||||
@ -221,6 +235,7 @@ export async function getStaticPaths() {
|
||||
paths: [
|
||||
...packagesApi.getStaticPackagePaths(),
|
||||
...nxDocumentsApi.getStaticDocumentPaths(),
|
||||
...nxCloudDocumentsApi.getStaticDocumentPaths(),
|
||||
],
|
||||
fallback: 'blocking',
|
||||
};
|
||||
|
||||
@ -55,6 +55,17 @@ iframe[src*='youtube'] {
|
||||
width: max-content;
|
||||
}
|
||||
|
||||
.prose iframe[src^="https://nx.app"]
|
||||
{
|
||||
border: 1px solid hsla(0, 0%, 85%, 1);
|
||||
border-radius: 0.375rem;
|
||||
box-shadow: 0 2px 6px hsla(0, 0%, 95%, 1);
|
||||
height: 80vh;
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
Code embed
|
||||
*/
|
||||
@ -173,3 +184,18 @@ iframe[src*='youtube'] {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/* Nx Cloud section */
|
||||
.nx-cloud-section {
|
||||
border-left-width: 0.25em;
|
||||
border-left-color: hsla(162, 47%, 50%, 1);
|
||||
padding-left: 1em;
|
||||
margin-left: -1.25em;
|
||||
}
|
||||
|
||||
.nx-cloud-section h2 {
|
||||
background: url('/documentation/shared/nx-cloud-logo-horizontal-white.svg')
|
||||
no-repeat left center;
|
||||
background-size: contain;
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
@ -69,7 +69,18 @@ export function Header(props: HeaderProps) {
|
||||
!!props.isDocViewer ? 'font-bold' : ''
|
||||
)}
|
||||
>
|
||||
Docs
|
||||
Nx Docs
|
||||
</a>
|
||||
</Link>
|
||||
<Link href="/nx-cloud/intro/what-is-nx-cloud">
|
||||
<a
|
||||
title="Nx Cloud documentation"
|
||||
className={cx(
|
||||
'text-green-nx-base px-3 py-2 leading-tight text-white',
|
||||
!!props.isDocViewer ? 'font-bold' : ''
|
||||
)}
|
||||
>
|
||||
Nx Cloud Docs
|
||||
</a>
|
||||
</Link>
|
||||
<Link href="/community#create-nx-plugin">
|
||||
|
||||
@ -107,6 +107,9 @@ function SidebarSectionItems({
|
||||
<ul className={cx('mb-6', collapsed ? 'hidden' : '')}>
|
||||
{(item.itemList as MenuItem[]).map((subItem, index) => {
|
||||
const isActiveLink = subItem.path === withoutAnchors(router?.asPath);
|
||||
const isNxCloudDocs = withoutAnchors(router?.asPath).startsWith(
|
||||
'/nx-cloud'
|
||||
);
|
||||
if (isActiveLink && collapsed) {
|
||||
handleCollapseToggle();
|
||||
}
|
||||
@ -122,7 +125,11 @@ function SidebarSectionItems({
|
||||
)}
|
||||
>
|
||||
{isActiveLink ? (
|
||||
<span className="bg-blue-nx-base absolute -right-2 top-0 h-full w-1 rounded-md sm:-right-4" />
|
||||
<span
|
||||
className={`${
|
||||
isNxCloudDocs ? 'bg-green-nx-base' : 'bg-blue-nx-base'
|
||||
} absolute -right-2 top-0 h-full w-1 rounded-md sm:-right-4`}
|
||||
/>
|
||||
) : null}
|
||||
<span
|
||||
className={cx('relative', {
|
||||
|
||||
@ -293,6 +293,7 @@
|
||||
"react-syntax-highlighter": "^15.4.3",
|
||||
"regenerator-runtime": "0.13.7",
|
||||
"rehype-autolink-headings": "^5.0.1",
|
||||
"rehype-raw": "^6.1.1",
|
||||
"rehype-slug": "^4.0.1",
|
||||
"remark-gfm": "^1.0.0",
|
||||
"send": "0.17.1",
|
||||
|
||||
208
yarn.lock
208
yarn.lock
@ -6258,6 +6258,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109"
|
||||
integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==
|
||||
|
||||
"@types/parse5@^6.0.0":
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb"
|
||||
integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==
|
||||
|
||||
"@types/prettier@^2.1.5":
|
||||
version "2.4.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17"
|
||||
@ -8164,6 +8169,11 @@ bail@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
|
||||
integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
|
||||
|
||||
bail@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d"
|
||||
integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||
@ -9404,6 +9414,11 @@ comma-separated-tokens@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
|
||||
integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
|
||||
|
||||
comma-separated-tokens@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98"
|
||||
integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==
|
||||
|
||||
commander@2.17.x:
|
||||
version "2.17.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||
@ -13916,6 +13931,19 @@ hash.js@^1.0.0, hash.js@^1.0.3:
|
||||
inherits "^2.0.3"
|
||||
minimalistic-assert "^1.0.1"
|
||||
|
||||
hast-to-hyperscript@^10.0.0:
|
||||
version "10.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz#3decd7cb4654bca8883f6fcbd4fb3695628c4296"
|
||||
integrity sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
property-information "^6.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
style-to-object "^0.3.0"
|
||||
unist-util-is "^5.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
|
||||
hast-to-hyperscript@^9.0.0:
|
||||
version "9.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d"
|
||||
@ -13941,6 +13969,20 @@ hast-util-from-parse5@^6.0.0:
|
||||
vfile-location "^3.2.0"
|
||||
web-namespaces "^1.0.0"
|
||||
|
||||
hast-util-from-parse5@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz#c129dd3a24dd8a867ab8a029ca47e27aa54864b7"
|
||||
integrity sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
"@types/parse5" "^6.0.0"
|
||||
"@types/unist" "^2.0.0"
|
||||
hastscript "^7.0.0"
|
||||
property-information "^6.0.0"
|
||||
vfile "^5.0.0"
|
||||
vfile-location "^4.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
|
||||
hast-util-has-property@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz#9f137565fad6082524b382c1e7d7d33ca5059f36"
|
||||
@ -13956,6 +13998,13 @@ hast-util-parse-selector@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a"
|
||||
integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==
|
||||
|
||||
hast-util-parse-selector@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz#a519e27e8b61bd5a98fad494ed06131ce68d9c3f"
|
||||
integrity sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
|
||||
hast-util-raw@6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977"
|
||||
@ -13972,6 +14021,23 @@ hast-util-raw@6.0.1:
|
||||
xtend "^4.0.0"
|
||||
zwitch "^1.0.0"
|
||||
|
||||
hast-util-raw@^7.2.0:
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.1.tgz#6e964cee098dbdd93d1b77cf180b5827d48048ab"
|
||||
integrity sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
"@types/parse5" "^6.0.0"
|
||||
hast-util-from-parse5 "^7.0.0"
|
||||
hast-util-to-parse5 "^7.0.0"
|
||||
html-void-elements "^2.0.0"
|
||||
parse5 "^6.0.0"
|
||||
unist-util-position "^4.0.0"
|
||||
unist-util-visit "^4.0.0"
|
||||
vfile "^5.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
zwitch "^2.0.0"
|
||||
|
||||
hast-util-to-parse5@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479"
|
||||
@ -13983,6 +14049,18 @@ hast-util-to-parse5@^6.0.0:
|
||||
xtend "^4.0.0"
|
||||
zwitch "^1.0.0"
|
||||
|
||||
hast-util-to-parse5@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.0.0.tgz#a39808e69005d10afeed1866029a1fb137df3f7c"
|
||||
integrity sha512-YHiS6aTaZ3N0Q3nxaY/Tj98D6kM8QX5Q8xqgg8G45zR7PvWnPGPP0vcKCgb/moIydEJ/QWczVrX0JODCVeoV7A==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
"@types/parse5" "^6.0.0"
|
||||
hast-to-hyperscript "^10.0.0"
|
||||
property-information "^6.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
zwitch "^2.0.0"
|
||||
|
||||
hast-util-to-string@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz#9b24c114866bdb9478927d7e9c36a485ac728378"
|
||||
@ -13999,6 +14077,17 @@ hastscript@^6.0.0:
|
||||
property-information "^5.0.0"
|
||||
space-separated-tokens "^1.0.0"
|
||||
|
||||
hastscript@^7.0.0:
|
||||
version "7.0.2"
|
||||
resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.0.2.tgz#d811fc040817d91923448a28156463b2e40d590a"
|
||||
integrity sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
hast-util-parse-selector "^3.0.0"
|
||||
property-information "^6.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
|
||||
hdr-histogram-js@^2.0.1:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz#0b860534655722b6e3f3e7dca7b78867cf43dcb5"
|
||||
@ -14159,6 +14248,11 @@ html-void-elements@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
|
||||
integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==
|
||||
|
||||
html-void-elements@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f"
|
||||
integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==
|
||||
|
||||
html-webpack-plugin@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
|
||||
@ -15062,6 +15156,11 @@ is-plain-obj@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
|
||||
integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
|
||||
|
||||
is-plain-obj@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.0.0.tgz#06c0999fd7574edf5a906ba5644ad0feb3a84d22"
|
||||
integrity sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==
|
||||
|
||||
is-plain-object@5.0.0, is-plain-object@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
|
||||
@ -20312,6 +20411,11 @@ property-information@^5.0.0, property-information@^5.3.0:
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
property-information@^6.0.0:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22"
|
||||
integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==
|
||||
|
||||
proto-list@~1.2.1:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
|
||||
@ -21133,6 +21237,15 @@ rehype-autolink-headings@^5.0.1:
|
||||
hast-util-heading-rank "^1.0.0"
|
||||
unist-util-visit "^2.0.0"
|
||||
|
||||
rehype-raw@^6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-6.1.1.tgz#81bbef3793bd7abacc6bf8335879d1b6c868c9d4"
|
||||
integrity sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
hast-util-raw "^7.2.0"
|
||||
unified "^10.0.0"
|
||||
|
||||
rehype-slug@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/rehype-slug/-/rehype-slug-4.0.1.tgz#313274501cffa997bd52dd57bf2da5851959747a"
|
||||
@ -22432,6 +22545,11 @@ space-separated-tokens@^1.0.0, space-separated-tokens@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
|
||||
integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
|
||||
|
||||
space-separated-tokens@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b"
|
||||
integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==
|
||||
|
||||
spdx-correct@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
|
||||
@ -23567,6 +23685,11 @@ trough@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
|
||||
integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
|
||||
|
||||
trough@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876"
|
||||
integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==
|
||||
|
||||
ts-dedent@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5"
|
||||
@ -24001,6 +24124,19 @@ unified@9.2.0:
|
||||
trough "^1.0.0"
|
||||
vfile "^4.0.0"
|
||||
|
||||
unified@^10.0.0:
|
||||
version "10.1.2"
|
||||
resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df"
|
||||
integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
bail "^2.0.0"
|
||||
extend "^3.0.0"
|
||||
is-buffer "^2.0.0"
|
||||
is-plain-obj "^4.0.0"
|
||||
trough "^2.0.0"
|
||||
vfile "^5.0.0"
|
||||
|
||||
unified@^9.0.0:
|
||||
version "9.2.2"
|
||||
resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975"
|
||||
@ -24059,11 +24195,23 @@ unist-util-is@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797"
|
||||
integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==
|
||||
|
||||
unist-util-is@^5.0.0:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236"
|
||||
integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==
|
||||
|
||||
unist-util-position@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
|
||||
integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
|
||||
|
||||
unist-util-position@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.3.tgz#5290547b014f6222dff95c48d5c3c13a88fadd07"
|
||||
integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
unist-util-remove-position@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"
|
||||
@ -24085,6 +24233,13 @@ unist-util-stringify-position@^2.0.0:
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.2"
|
||||
|
||||
unist-util-stringify-position@^3.0.0:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447"
|
||||
integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
|
||||
unist-util-visit-parents@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"
|
||||
@ -24093,6 +24248,14 @@ unist-util-visit-parents@^3.0.0:
|
||||
"@types/unist" "^2.0.0"
|
||||
unist-util-is "^4.0.0"
|
||||
|
||||
unist-util-visit-parents@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz#44bbc5d25f2411e7dfc5cecff12de43296aa8521"
|
||||
integrity sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
unist-util-is "^5.0.0"
|
||||
|
||||
unist-util-visit@2.0.3, unist-util-visit@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
|
||||
@ -24102,6 +24265,15 @@ unist-util-visit@2.0.3, unist-util-visit@^2.0.0:
|
||||
unist-util-is "^4.0.0"
|
||||
unist-util-visit-parents "^3.0.0"
|
||||
|
||||
unist-util-visit@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.0.tgz#f41e407a9e94da31594e6b1c9811c51ab0b3d8f5"
|
||||
integrity sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
unist-util-is "^5.0.0"
|
||||
unist-util-visit-parents "^5.0.0"
|
||||
|
||||
universal-user-agent@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
|
||||
@ -24449,6 +24621,14 @@ vfile-location@^3.0.0, vfile-location@^3.2.0:
|
||||
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c"
|
||||
integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==
|
||||
|
||||
vfile-location@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.0.1.tgz#06f2b9244a3565bef91f099359486a08b10d3a95"
|
||||
integrity sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
vfile "^5.0.0"
|
||||
|
||||
vfile-message@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
|
||||
@ -24457,6 +24637,14 @@ vfile-message@^2.0.0:
|
||||
"@types/unist" "^2.0.0"
|
||||
unist-util-stringify-position "^2.0.0"
|
||||
|
||||
vfile-message@^3.0.0:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d"
|
||||
integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
unist-util-stringify-position "^3.0.0"
|
||||
|
||||
vfile@^4.0.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
|
||||
@ -24467,6 +24655,16 @@ vfile@^4.0.0:
|
||||
unist-util-stringify-position "^2.0.0"
|
||||
vfile-message "^2.0.0"
|
||||
|
||||
vfile@^5.0.0:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.2.tgz#b499fbc50197ea50ad3749e9b60beb16ca5b7c54"
|
||||
integrity sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==
|
||||
dependencies:
|
||||
"@types/unist" "^2.0.0"
|
||||
is-buffer "^2.0.0"
|
||||
unist-util-stringify-position "^3.0.0"
|
||||
vfile-message "^3.0.0"
|
||||
|
||||
vm-browserify@^1.0.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||
@ -24576,6 +24774,11 @@ web-namespaces@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
|
||||
integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==
|
||||
|
||||
web-namespaces@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
|
||||
integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
|
||||
|
||||
webdriver-js-extender@2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7"
|
||||
@ -25299,3 +25502,8 @@ zwitch@^1.0.0:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
|
||||
integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
|
||||
|
||||
zwitch@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1"
|
||||
integrity sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user