├── .husky
├── .gitignore
└── pre-commit
├── deploy-k8s
├── .gitignore
├── set-namespace.sh
├── extras
│ ├── new-image.sh
│ └── new-workspace.sh
├── images
│ ├── frontend
│ │ └── Dockerfile
│ ├── base
│ │ └── Dockerfile
│ └── devops
│ │ └── Dockerfile
├── workspaces
│ ├── skyler.yaml
│ ├── maria.yaml
│ ├── jordan.yaml
│ └── ben.yaml
├── provision-workspaces.sh
├── README.md
├── init.sh
├── get-deployments.sh
└── build-images.sh
├── .gitignore
├── cli
├── .prettierignore
├── .prettierrc
├── README.md
├── src
│ ├── index.ts
│ ├── lib
│ │ └── digitalOcean.ts
│ └── deploys
│ │ └── deployDigitalOcean.ts
├── tsconfig.json
├── package.json
└── yarn.lock
├── heroku.yml
├── img
├── .DS_Store
├── logo
│ ├── coder.png
│ ├── heroku.png
│ ├── linode.png
│ ├── vultr.png
│ ├── aws-ec2.png
│ ├── railway.png
│ ├── oracle-logo.png
│ ├── digitalocean.png
│ └── azure-app-service.png
├── launch-railway.gif
├── heroku-app-create.png
├── railway-connected.png
├── code-server-aws-ec2.png
├── code-server-railway.png
├── rclone-vscode-tasks.png
├── add-script-digitalocean.png
├── modify-github-template.png
├── linode-launch-code-server.gif
├── linode-stackscripts-sidebar.png
└── digitalocean-launch-code-server.gif
├── deploy-container
├── myTool
│ └── test.sh
├── settings.json
├── rclone-tasks.json
├── entrypoint.sh
└── README.md
├── package.json
├── app.json
├── .github
└── workflows
│ └── to-dockerhub.yml
├── LICENSE.txt
├── deploy-vm
├── launch-code-server.sh
├── README.md
└── launch-code-server-linode.sh
├── Dockerfile
├── guides
├── digitalocean.md
├── linode.md
├── aws-ec2.md
├── heroku.md
└── railway.md
├── README.md
└── yarn.lock
/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/deploy-k8s/.gitignore:
--------------------------------------------------------------------------------
1 | code-server/
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | bin
3 |
--------------------------------------------------------------------------------
/cli/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | bin
3 | yarn.lock
4 |
--------------------------------------------------------------------------------
/heroku.yml:
--------------------------------------------------------------------------------
1 | build:
2 | docker:
3 | web: Dockerfile
4 |
--------------------------------------------------------------------------------
/cli/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "useTabs": false
4 | }
5 |
--------------------------------------------------------------------------------
/img/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/.DS_Store
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx lint-staged
5 |
--------------------------------------------------------------------------------
/img/logo/coder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/coder.png
--------------------------------------------------------------------------------
/img/logo/heroku.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/heroku.png
--------------------------------------------------------------------------------
/img/logo/linode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/linode.png
--------------------------------------------------------------------------------
/img/logo/vultr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/vultr.png
--------------------------------------------------------------------------------
/img/logo/aws-ec2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/aws-ec2.png
--------------------------------------------------------------------------------
/img/logo/railway.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/railway.png
--------------------------------------------------------------------------------
/img/launch-railway.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/launch-railway.gif
--------------------------------------------------------------------------------
/img/logo/oracle-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/oracle-logo.png
--------------------------------------------------------------------------------
/img/heroku-app-create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/heroku-app-create.png
--------------------------------------------------------------------------------
/img/logo/digitalocean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/digitalocean.png
--------------------------------------------------------------------------------
/img/railway-connected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/railway-connected.png
--------------------------------------------------------------------------------
/img/code-server-aws-ec2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/code-server-aws-ec2.png
--------------------------------------------------------------------------------
/img/code-server-railway.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/code-server-railway.png
--------------------------------------------------------------------------------
/img/rclone-vscode-tasks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/rclone-vscode-tasks.png
--------------------------------------------------------------------------------
/img/add-script-digitalocean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/add-script-digitalocean.png
--------------------------------------------------------------------------------
/img/logo/azure-app-service.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/logo/azure-app-service.png
--------------------------------------------------------------------------------
/img/modify-github-template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/modify-github-template.png
--------------------------------------------------------------------------------
/img/linode-launch-code-server.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/linode-launch-code-server.gif
--------------------------------------------------------------------------------
/deploy-container/myTool/test.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "This is a demo tool that could be brought into the code-server workspace"
--------------------------------------------------------------------------------
/img/linode-stackscripts-sidebar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/linode-stackscripts-sidebar.png
--------------------------------------------------------------------------------
/img/digitalocean-launch-code-server.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coder/deploy-code-server/HEAD/img/digitalocean-launch-code-server.gif
--------------------------------------------------------------------------------
/deploy-k8s/set-namespace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Pretty lame, but helpful command :)
4 | # kubens is cool too.
5 |
6 | # ex: ./set-namespace.sh dev-envs
7 |
8 | kubectl config set-context --current --namespace=$1
--------------------------------------------------------------------------------
/deploy-container/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "workbench.colorTheme": "Default Dark+",
3 | "git.postCommitCommand": "sync",
4 | "git.enableSmartCommit": true,
5 | "git.confirmSync": false,
6 | "git.autofetch": true
7 | }
8 |
--------------------------------------------------------------------------------
/deploy-k8s/extras/new-image.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # This creates a new image folder and opens it in
4 | # VS Code, if you have it installed
5 |
6 | cp -r images/frontend images/new
7 |
8 | if command -v code &> /dev/null; then
9 | code images/new/Dockerfile
10 | fi
--------------------------------------------------------------------------------
/deploy-k8s/extras/new-workspace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # This creates a new workspace file and opens it in
4 | # VS Code, if you have it installed
5 |
6 | cp workspaces/ben.yaml workspaces/new.yaml
7 |
8 | if command -v code &> /dev/null; then
9 | code workspaces/new.yaml
10 | fi
--------------------------------------------------------------------------------
/cli/README.md:
--------------------------------------------------------------------------------
1 | # dcs-cli
2 |
3 | Provision a code-server instance from your terminal.
4 |
5 | ## Development
6 |
7 | ```console
8 | git clone git@github.com:cdr/deploy-code-server.git
9 | cd deploy-code-server/cli
10 | npm install && npm run build:watch
11 |
12 | # in another session:
13 | node bin/index.js
14 | ```
15 |
--------------------------------------------------------------------------------
/deploy-k8s/images/frontend/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM bencdr/dev-env-base:latest
2 |
3 | USER root
4 |
5 | # Install Node.js
6 | ARG NODE_VERSION=14
7 | RUN curl -sL "https://deb.nodesource.com/setup_$NODE_VERSION.x" | bash -
8 | RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y nodejs
9 |
10 | # Install yarn
11 | RUN npm install -g yarn
12 |
13 | USER coder
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "cli:format": "prettier --config ./cli/.prettierrc --ignore-path ./cli/.prettierignore --write ./cli",
4 | "prepare": "husky install"
5 | },
6 | "devDependencies": {
7 | "husky": ">=6",
8 | "lint-staged": ">=10",
9 | "prettier": "^2.3.2"
10 | },
11 | "lint-staged": {
12 | "./cli/*.{js,css,md}": "yarn cli:format"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/deploy-k8s/images/base/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM codercom/code-server:3.12.0
2 |
3 | # Install Homebrew, must be as a non-root user
4 | RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
5 | ENV PATH /home/linuxbrew/.linuxbrew/bin:${PATH}
6 |
7 | USER root
8 |
9 | RUN apt-get update && \
10 | apt-get install -y python3 python3-pip
11 |
12 | USER coder
13 |
--------------------------------------------------------------------------------
/cli/src/index.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import { program } from "commander";
4 | import { deployDigitalOcean } from "./deploys/deployDigitalOcean";
5 | import packageJson from "../package.json";
6 |
7 | const main = async () => {
8 | program.version(packageJson.version).description(packageJson.description);
9 | program.parse();
10 | await deployDigitalOcean();
11 | process.exit(0);
12 | };
13 |
14 | main();
15 |
--------------------------------------------------------------------------------
/cli/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "es2017",
5 | "lib": ["es2015"],
6 | "moduleResolution": "node",
7 | "sourceMap": true,
8 | "outDir": "bin",
9 | "baseUrl": ".",
10 | "paths": {
11 | "*": ["node_modules/*", "src/types/*"]
12 | },
13 | "esModuleInterop": true,
14 | "resolveJsonModule": true
15 | },
16 | "include": ["src/**/*"]
17 | }
18 |
--------------------------------------------------------------------------------
/deploy-k8s/workspaces/skyler.yaml:
--------------------------------------------------------------------------------
1 | replicaCount: 1
2 |
3 | hostnameOverride: "skyler-dev"
4 |
5 | image:
6 | repository: bencdr/dev-env-frontend
7 | tag: "latest"
8 | pullPolicy: Always
9 |
10 | resources:
11 | limits:
12 | cpu: 4000m
13 | memory: 8000Mi
14 | requests:
15 | cpu: 1000m
16 | memory: 2000Mi
17 |
18 | persistence:
19 | enabled: true
20 | accessMode: ReadWriteOnce
21 | size: 10Gi
22 | annotations: {}
23 |
24 | volumePermissions:
25 | enabled: true
26 | securityContext:
27 | runAsUser: 0
28 |
29 | service:
30 | type: LoadBalancer
31 | port: 8082
32 |
--------------------------------------------------------------------------------
/deploy-k8s/provision-workspaces.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # This will create/update helm deployments based
4 | # on the charts in your workspaces folder.
5 |
6 | # To create a new deployment: clone a chart,
7 | # modify accordingly, and run this script.
8 |
9 | for file in workspaces/*.yaml; do
10 | basename=$(basename -- "$file")
11 | name=${basename%.*}
12 | helm upgrade --install $name-dev code-server/ci/helm-chart --values $file
13 |
14 | # restart the pods to grab the latest version
15 | # this is not needed if you version-control images
16 | kubectl rollout restart deployment $name-dev-code-server
17 | echo "---"
18 | done
--------------------------------------------------------------------------------
/deploy-k8s/README.md:
--------------------------------------------------------------------------------
1 | # deploy-k8s
2 |
3 | Some helper scripts and example images for deploying to Kubernetes. These are still a work in progress and the images do not have CI/CD set up.
4 |
5 | Note: This is a quick way to get up and running with code-server Helm charts. We recommend managing these workspaces with something other than bash scripts 😂
6 |
7 | 1. Ensure you have kubectl, helm, installed and your kube context is pointed at an active cluster.
8 | 1. Clone this repo and run `init.sh` to clone code-server
9 | 1. Build the images with `build-images.sh`.
10 | 1. Edit the examples in `workspaces/` to use your images
11 | 1. Run `provision-workspaces.sh` and then `get-deployments.sh`
--------------------------------------------------------------------------------
/deploy-k8s/init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # This will create a namespace on your cluster
4 | # and ensure you have the proper commands.
5 |
6 | # It will also clone code server so that you
7 | # can use the helmchart :)
8 |
9 | NAMESPACE=${NAMESPACE:-dev-envs}
10 |
11 | git clone https://github.com/cdr/code-server
12 | kubectl create namespace $NAMESPACE
13 |
14 | ./set-namespace.sh $NAMESPACE
15 |
16 | if ! command -v helm &> /dev/null; then
17 | echo "! Please install the helm: https://helm.sh/docs/intro/install/"
18 | exit
19 | fi
20 |
21 | if ! command -v jq &> /dev/null; then
22 | echo "! Please install the jq command: https://stedolan.github.io/jq/"
23 | exit
24 | fi
25 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "code-server-heroku",
3 | "description": "A code-server environment designed to run in your Heroku",
4 | "repository": "https://github.com/cdr/deploy-code-server",
5 | "logo": "https://avatars.githubusercontent.com/u/1375?s=200&v=4",
6 | "keywords": [
7 | "node",
8 | "express",
9 | "code-server",
10 | "cloud-development",
11 | "heroku-api"
12 | ],
13 | "env": {
14 | "GIT_REPO": {
15 | "description": "URL of a git repo to clone (optional)",
16 | "required": false
17 | },
18 | "PASSWORD": {
19 | "description": "Create a password to log in to code-server with",
20 | "required": true
21 | }
22 | },
23 | "stack": "container"
24 | }
25 |
--------------------------------------------------------------------------------
/deploy-k8s/get-deployments.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # This will look in your workspaces/ folder and
4 | # look up the helm deployments in a basic manner
5 |
6 | get_deployment() {
7 | name=$1
8 | ip=$(kubectl get svc $name-dev-code-server -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
9 | port=$(kubectl get svc $name-dev-code-server -o jsonpath='{.spec.ports[0].port}')
10 | image=$(helm get values $name-dev -o json | jq .image.repository)
11 | echo "$name (image: $image)"
12 | echo "http://$ip:$port"
13 | echo $(kubectl get secret $name-dev-code-server -o jsonpath="{.data.password}" | base64 --decode)
14 | echo "---"
15 | }
16 |
17 |
18 | for file in workspaces/*.yaml; do
19 | basename=$(basename -- "$file")
20 | name=${basename%.*}
21 | get_deployment $name
22 | done
--------------------------------------------------------------------------------
/deploy-container/rclone-tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "push_remote",
6 | "type": "shell",
7 | "command": "sh /home/coder/push_remote.sh",
8 | "presentation": {
9 | "reveal": "always"
10 | },
11 | "problemMatcher": [],
12 | "options": {
13 | "statusbar": {
14 | "label": "$(repo-push) rclone: push"
15 | }
16 | }
17 | },
18 | {
19 | "label": "pull_remote",
20 | "type": "shell",
21 | "command": "sh /home/coder/pull_remote.sh",
22 | "presentation": {
23 | "reveal": "always"
24 | },
25 | "problemMatcher": [],
26 | "options": {
27 | "statusbar": {
28 | "label": "$(repo-pull) rclone: pull"
29 | }
30 | }
31 | }
32 | ]
33 | }
--------------------------------------------------------------------------------
/.github/workflows/to-dockerhub.yml:
--------------------------------------------------------------------------------
1 | name: Publish to Docker Hub
2 | on:
3 | push:
4 | branches:
5 | - main
6 | jobs:
7 | push_to_registry:
8 | name: Push Docker image to Docker Hub
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Check out the repo
12 | uses: actions/checkout@v2
13 | - name: Login to DockerHub
14 | uses: docker/login-action@v1
15 | with:
16 | username: ${{ secrets.DOCKER_USERNAME }}
17 | password: ${{ secrets.DOCKER_PASSWORD }}
18 | - name: Build and push
19 | id: docker_build
20 | uses: docker/build-push-action@v2
21 | with:
22 | push: true
23 | tags: bencdr/code-server-deploy-container:latest
24 | - name: Image digest
25 | run: echo ${{ steps.docker_build.outputs.digest }}
26 |
--------------------------------------------------------------------------------
/cli/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@coder/deploy-code-server",
3 | "version": "0.1.0",
4 | "repository": "cdr/deploy-code-server",
5 | "homepage": "https://github.com/cdr/deploy-code-server",
6 | "description": "CLI to deploy code-server",
7 | "main": "bin/index.js",
8 | "bin": "bin/index.js",
9 | "scripts": {
10 | "build": "tsc",
11 | "build:watch": "tsc -w",
12 | "prepare": "yarn build"
13 | },
14 | "keywords": ["code-server", "coder"],
15 | "author": "coder",
16 | "publishConfig": {
17 | "access": "public"
18 | },
19 | "license": "ISC",
20 | "devDependencies": {
21 | "@types/inquirer": "^7.3.3",
22 | "@types/node": "^14.14.20",
23 | "typescript": "^4.1.3"
24 | },
25 | "dependencies": {
26 | "async-wait-until": "^2.0.7",
27 | "chalk": "^4.1.2",
28 | "commander": "^8.1.0",
29 | "got": "^11.8.2",
30 | "inquirer": "^8.1.2",
31 | "ora": "^5.4.1"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/deploy-k8s/build-images.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # This will build and push public images in the images/ folder to
4 | # DockerHub based on your Docker username with the
5 | # format: $username/dev-env-$folder:latest
6 |
7 | set -e
8 |
9 | docker_username=$(docker-credential-$(jq -r .credsStore ~/.docker/config.json) list | jq -r '. | to_entries[] | select(.key | contains("docker.io")) | last(.value)')
10 |
11 | build_and_push() {
12 | folder=$1
13 | basename=$(basename -- "$folder")
14 | name=${basename%.*}
15 | docker build $folder -t bencdr/dev-env-$name:latest
16 | docker push $docker_username/dev-env-$name:latest
17 | }
18 |
19 | build_and_push "images/base"
20 |
21 | # Build all other images in the images/ folder
22 | # note: if you have multiple base images or heirchal images
23 | # you'll want to build them in a controlled order above and
24 | # exclude them. can be comma or space seperated :)
25 | exclude="images/base"
26 |
27 | for folder in images/*; do
28 | if [[ ! "$exclude" == *"$folder"* ]]; then
29 | build_and_push $folder
30 | fi
31 | done
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Trung Tran
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/deploy-vm/launch-code-server.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # install code-server service system-wide
4 | export HOME=/root
5 | curl -fsSL https://code-server.dev/install.sh | sh
6 |
7 | # add our helper server to redirect to the proper URL for --link
8 | git clone https://github.com/bpmct/coder-cloud-redirect-server
9 | cd coder-cloud-redirect-server
10 | cp coder-cloud-redirect.service /etc/systemd/system/
11 | cp coder-cloud-redirect.py /usr/bin/
12 |
13 | # create a code-server user
14 | adduser --disabled-password --gecos "" coder
15 | echo "coder ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/coder
16 | usermod -aG sudo coder
17 |
18 | # copy ssh keys from root
19 | cp -r /root/.ssh /home/coder/.ssh
20 | chown -R coder:coder /home/coder/.ssh
21 |
22 | # configure code-server to use --link with the "coder" user
23 | mkdir -p /home/coder/.config/code-server
24 | touch /home/coder/.config/code-server/config.yaml
25 | echo "link: true" > /home/coder/.config/code-server/config.yaml
26 | chown -R coder:coder /home/coder/.config
27 |
28 | # start and enable code-server and our helper service
29 | systemctl enable --now code-server@coder
30 | systemctl enable --now coder-cloud-redirect
--------------------------------------------------------------------------------
/deploy-k8s/workspaces/maria.yaml:
--------------------------------------------------------------------------------
1 | replicaCount: 1
2 |
3 | hostnameOverride: "maria-dev"
4 |
5 | image:
6 | repository: bencdr/dev-env-frontend
7 | tag: "latest"
8 | pullPolicy: Always
9 |
10 | resources:
11 | limits:
12 | cpu: 4000m
13 | memory: 8000Mi
14 | requests:
15 | cpu: 1000m
16 | memory: 2000Mi
17 |
18 | persistence:
19 | enabled: true
20 | accessMode: ReadWriteOnce
21 | size: 10Gi
22 | annotations: {}
23 |
24 | volumePermissions:
25 | enabled: true
26 | securityContext:
27 | runAsUser: 0
28 |
29 | securityContext:
30 | enabled: true
31 | fsGroup: 1000
32 | runAsUser: 1000
33 |
34 | service:
35 | type: LoadBalancer
36 | port: 8081
37 |
38 | ingress:
39 | enabled: false
40 | #annotations:
41 | # kubernetes.io/ingress.class: nginx
42 | # kubernetes.io/tls-acme: "true"
43 | #hosts:
44 | # - host: code-server.example.loc
45 | # paths:
46 | # - /
47 |
48 | #tls:
49 | # - secretName: code-server
50 | # hosts:
51 | # - code-server.example.loc
52 |
53 | extraArgs: []
54 |
55 | nodeSelector: {}
56 |
57 | tolerations: []
58 |
59 | affinity: {}
60 |
61 | extraSecretMounts: []
62 |
63 | extraVolumeMounts: []
64 |
65 | hostPath: ""
66 |
67 | extraConfigmapMounts: []
68 |
69 | serviceAccount:
70 | create: false
71 |
--------------------------------------------------------------------------------
/deploy-k8s/workspaces/jordan.yaml:
--------------------------------------------------------------------------------
1 | replicaCount: 1
2 |
3 | hostnameOverride: "jordan-dev"
4 |
5 | image:
6 | repository: bencdr/dev-env-frontend
7 | tag: "latest"
8 | pullPolicy: Always
9 |
10 | resources:
11 | limits:
12 | cpu: 4000m
13 | memory: 8000Mi
14 | requests:
15 | cpu: 1000m
16 | memory: 2000Mi
17 |
18 | persistence:
19 | enabled: true
20 | accessMode: ReadWriteOnce
21 | size: 10Gi
22 | annotations: {}
23 |
24 | volumePermissions:
25 | enabled: true
26 | securityContext:
27 | runAsUser: 0
28 |
29 | securityContext:
30 | enabled: true
31 | fsGroup: 1000
32 | runAsUser: 1000
33 |
34 | service:
35 | type: LoadBalancer
36 | port: 8083
37 |
38 | ingress:
39 | enabled: false
40 | #annotations:
41 | # kubernetes.io/ingress.class: nginx
42 | # kubernetes.io/tls-acme: "true"
43 | #hosts:
44 | # - host: code-server.example.loc
45 | # paths:
46 | # - /
47 |
48 | #tls:
49 | # - secretName: code-server
50 | # hosts:
51 | # - code-server.example.loc
52 |
53 | extraArgs: []
54 |
55 | nodeSelector: {}
56 |
57 | tolerations: []
58 |
59 | affinity: {}
60 |
61 | extraSecretMounts: []
62 |
63 | extraVolumeMounts: []
64 |
65 | hostPath: ""
66 |
67 | extraConfigmapMounts: []
68 |
69 | serviceAccount:
70 | create: false
71 |
--------------------------------------------------------------------------------
/cli/src/lib/digitalOcean.ts:
--------------------------------------------------------------------------------
1 | import got from "got";
2 |
3 | const DIGITALOCEAN_API_URL = "https://api.digitalocean.com/v2";
4 |
5 | export type DropletV4Network = {
6 | ip_address: string;
7 | type: "private" | "public";
8 | };
9 | export type Droplet = {
10 | id: string;
11 | name: string;
12 | networks: { v4: DropletV4Network[] };
13 | status: "new" | "active";
14 | };
15 |
16 | type CreateDropletOptions = {
17 | userData: string;
18 | token: string;
19 | };
20 |
21 | export const createDroplet = async ({
22 | token,
23 | userData,
24 | }: CreateDropletOptions) => {
25 | return got
26 | .post(`${DIGITALOCEAN_API_URL}/droplets`, {
27 | json: {
28 | name: "code-server",
29 | region: "nyc3",
30 | size: "s-1vcpu-1gb",
31 | image: "ubuntu-20-10-x64",
32 | user_data: userData,
33 | },
34 | headers: {
35 | Authorization: `Bearer ${token}`,
36 | },
37 | })
38 | .json<{ droplet: Droplet }>()
39 | .then((data) => data.droplet);
40 | };
41 |
42 | type GetDropletOptions = {
43 | id: string;
44 | token: string;
45 | };
46 |
47 | export const getDroplet = async ({ token, id }: GetDropletOptions) => {
48 | return got(`${DIGITALOCEAN_API_URL}/droplets/${id}`, {
49 | headers: {
50 | Authorization: `Bearer ${token}`,
51 | },
52 | })
53 | .json<{ droplet: Droplet }>()
54 | .then((data) => data.droplet);
55 | };
56 |
--------------------------------------------------------------------------------
/deploy-k8s/images/devops/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM bencdr/dev-env-base:latest
2 |
3 | USER root
4 |
5 | RUN apt-get update
6 | RUN apt-get install -y apt-transport-https gnupg
7 |
8 | # Install kubectl
9 | RUN curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg && \
10 | echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list && \
11 | apt-get update && apt-get install -y kubectl
12 |
13 | # Install helm
14 | RUN curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
15 |
16 | # Install gcloud
17 | RUN curl -fsSLo /usr/share/keyrings/cloud.google.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg && \
18 | echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
19 | apt-get update && apt-get install -y google-cloud-sdk
20 |
21 | # Install AWS CLI
22 | RUN pip3 install awscli
23 |
24 | USER coder
25 |
26 | # Install terraform
27 | RUN brew tap hashicorp/tap && \
28 | brew install hashicorp/tap/terraform
29 |
30 | # Install kubectx
31 | RUN brew install kubectl
32 |
33 | # Install Docker
34 | RUN sudo apt-get install -y docker.io systemd systemd-sysv
35 | RUN systemctl enable docker
36 |
37 | USER coder
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # Start from the code-server Debian base image
2 | FROM codercom/code-server:4.9.0
3 |
4 | USER coder
5 |
6 | # Apply VS Code settings
7 | COPY deploy-container/settings.json .local/share/code-server/User/settings.json
8 |
9 | # Use bash shell
10 | ENV SHELL=/bin/bash
11 |
12 | # Install unzip + rclone (support for remote filesystem)
13 | RUN sudo apt-get update && sudo apt-get install unzip -y
14 | RUN curl https://rclone.org/install.sh | sudo bash
15 |
16 | # Copy rclone tasks to /tmp, to potentially be used
17 | COPY deploy-container/rclone-tasks.json /tmp/rclone-tasks.json
18 |
19 | # Fix permissions for code-server
20 | RUN sudo chown -R coder:coder /home/coder/.local
21 |
22 | # You can add custom software and dependencies for your environment below
23 | # -----------
24 |
25 | # Install a VS Code extension:
26 | # Note: we use a different marketplace than VS Code. See https://github.com/cdr/code-server/blob/main/docs/FAQ.md#differences-compared-to-vs-code
27 | # RUN code-server --install-extension esbenp.prettier-vscode
28 |
29 | # Install apt packages:
30 | # RUN sudo apt-get install -y ubuntu-make
31 |
32 | # Copy files:
33 | # COPY deploy-container/myTool /home/coder/myTool
34 |
35 | # -----------
36 |
37 | # Port
38 | ENV PORT=8080
39 |
40 | # Use our custom entrypoint script first
41 | COPY deploy-container/entrypoint.sh /usr/bin/deploy-container-entrypoint.sh
42 | ENTRYPOINT ["/usr/bin/deploy-container-entrypoint.sh"]
43 |
--------------------------------------------------------------------------------
/guides/digitalocean.md:
--------------------------------------------------------------------------------
1 | # deploying `code-server` on DigitalOcean
2 |
3 | > ⚠️ The deploy script referenced in this guide uses the code-server --link service which is now deprecated. If this solution does not work for you, we recommend following our guide to use [LetsEncrypt with Caddy](https://coder.com/docs/code-server/latest/guide#using-lets-encrypt-with-caddy) to securely connect to code-server on your VM.
4 |
5 |
6 | [DigitalOcean](https://digitalocean.com) is an developer-friendly platform with cloud servers. Here is the easiest way to launch code-server on DigitalOcean:
7 |
8 | ---
9 |
10 | 1. Log into DigitalOcean and create a new Ubuntu 20.10 droplet with any size, in any region
11 | 1. Under "Select additional options," check `User data`. This will allow you to specify a script that will run on first boot.
12 | 1. Paste in the contents of [launch-code-server.sh](../deploy-vm/launch-code-server.sh) to the textarea.
13 | 1. Create your server. Feel free to add SSH keys or other preferences.
14 | 1. Once your server starts, you can simply navigate to the IP address and get forwarded to a secure version of code-server, which will be proxied behind your GitHub account. For information on how this works, see [code-server --link](https://github.com/cdr/code-server#cloud-program-%EF%B8%8F).
15 |
16 |
17 |
18 | See our [troubleshooting guide](../deploy-vm#troubleshooting) if you are unable to connect after some time.
19 |
--------------------------------------------------------------------------------
/deploy-vm/README.md:
--------------------------------------------------------------------------------
1 | # Deploying `code-server` on a VM
2 |
3 | A simple startup script to run code-server with --link on a VM, designed to run on Ubuntu 20.10.
4 |
5 | > ⚠️ The deploy script referenced uses the code-server --link service which is now deprecated. If this solution does not work for you, we recommend following our guide to use [LetsEncrypt with Caddy](https://coder.com/docs/code-server/latest/guide#using-lets-encrypt-with-caddy) to securely connect to code-server on your VM.
6 |
7 | ## In this repo
8 |
9 | - [launch-code-server.sh](./launch-code-server.sh) - Command tested on Ubuntu machines (uses --link)
10 | - [launch-linode.sh](./launch-linode.sh) - launch-code-server.sh adapted for Linode
11 |
12 | ## Troubleshooting
13 |
14 | - Ensure you have port 80 open on your server's firewall
15 |
16 | - SSH or use the built-in console to connect to your machine
17 |
18 | 1. Check the code-server status
19 |
20 | ```console
21 | systemctl status code-server@coder
22 |
23 | # if not working:
24 | systemctl restart code-server@coder
25 | ```
26 |
27 | 1. Ensure journalctl is capturing logs
28 |
29 | ```console
30 | journalctl -u code-server@coder
31 | ```
32 |
33 | 1. Ensure the HTTP redirect server is working
34 |
35 | ```console
36 | systemctl status coder-cloud-redirect
37 |
38 | # systemctl restart coder-cloud-redirect
39 | ```
40 |
41 | ## Other scripts
42 |
43 | - [code-server, CloudFlare, and Caddy](https://github.com/alec-hs/coder-cloudflare-setup): Sets up code-server and configures CloudFlare DNS
44 |
--------------------------------------------------------------------------------
/deploy-vm/launch-code-server-linode.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # allow us to access systemd logs to see the status of --link
4 | sed -i.bak 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
5 | mkdir -p /var/log/journal
6 | systemctl force-reload systemd-journald
7 | systemctl restart systemd-journald
8 |
9 | # install code-server service system-wide
10 | export HOME=/root
11 | curl -fsSL https://code-server.dev/install.sh | sh
12 |
13 | # add our helper server to redirect to the proper URL for --link
14 | git clone https://github.com/bpmct/coder-cloud-redirect-server
15 | cd coder-cloud-redirect-server
16 | cp coder-cloud-redirect.service /etc/systemd/system/
17 | cp coder-cloud-redirect.py /usr/bin/
18 |
19 | # create a code-server user
20 | adduser --disabled-password --gecos "" coder
21 | echo "coder ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/coder
22 | usermod -aG sudo coder
23 |
24 | # copy ssh keys from root
25 | cp -r /root/.ssh /home/coder/.ssh
26 | chown -R coder:coder /home/coder/.ssh
27 |
28 | # use a more unique hostname (for Linode)
29 | sudo hostnamectl set-hostname linode-$LINODE_ID
30 | source /root/.bashrc
31 |
32 | # configure code-server to use --link with the "coder" user
33 | mkdir -p /home/coder/.config/code-server
34 | touch /home/coder/.config/code-server/config.yaml
35 | echo "link: true" > /home/coder/.config/code-server/config.yaml
36 | chown -R coder:coder /home/coder/.config
37 |
38 | # start and enable code-server and our helper service
39 | systemctl enable code-server@coder
40 | systemctl enable coder-cloud-redirect
41 | systemctl start code-server@coder && systemctl start coder-cloud-redirect
--------------------------------------------------------------------------------
/guides/linode.md:
--------------------------------------------------------------------------------
1 | # deploying `code-server` on Linode
2 |
3 | > ⚠️ The deploy script referenced in this guide uses the code-server --link service which is now deprecated. If this solution does not work for you, we recommend following our guide to use [LetsEncrypt with Caddy](https://coder.com/docs/code-server/latest/guide#using-lets-encrypt-with-caddy) to securely connect to code-server on your VM.
4 |
5 | [Linode](https://linode.com) is a developer-friendly platform with cloud servers. Here is the easiest way to launch code-server on Linode.
6 |
7 | 1. Log in to Linode and go to the "StackScripts" section in the sidebar
8 |
9 |
10 |
11 | 1. Navigate to "Community Scripts" and use `bencdr/code-server` or create your own based on [launch-code-server-linode.sh](../deploy-vm/launch-code-server-linode.sh).
12 |
13 | 1. Give your server a label and deploy with Ubuntu 20.10 and any size. Once your server starts, you can simply navigate to the IP address and get forwarded to a secure version of code-server, which will be proxied behind your GitHub account. For information on how this works, see [code-server --link](https://github.com/cdr/code-server#cloud-program-%EF%B8%8F).
14 |
15 |
16 |
17 | 1. Optional: To change the URL in the address bar from `linode-[xxxx]` to something more descriptive, you just need to change your hostname and restart code-server:
18 |
19 | ```sh
20 | sudo hostnamectl set-hostname bens-devbox
21 | sudo systemctl restart code-server@coder
22 | ```
23 |
24 | See our [troubleshooting guide](../deploy-vm#troubleshooting) if you are unable to connect after some time.
25 |
--------------------------------------------------------------------------------
/deploy-k8s/workspaces/ben.yaml:
--------------------------------------------------------------------------------
1 | replicaCount: 1
2 |
3 | hostnameOverride: "ben-dev"
4 |
5 | image:
6 | repository: bencdr/dev-env-devops
7 | tag: "latest"
8 | pullPolicy: Always
9 |
10 | resources:
11 | limits:
12 | cpu: 2000m
13 | memory: 8000Mi
14 | requests:
15 | cpu: 500m
16 | memory: 1000Mi
17 |
18 | persistence:
19 | enabled: true
20 | accessMode: ReadWriteOnce
21 | size: 10Gi
22 | annotations: {}
23 |
24 | extraContainers: |
25 | - name: docker-dind
26 | image: docker:20.10-dind
27 | imagePullPolicy: IfNotPresent
28 | resources:
29 | requests:
30 | cpu: 250m
31 | memory: 256M
32 | securityContext:
33 | privileged: true
34 | procMount: Default
35 | env:
36 | - name: DOCKER_TLS_CERTDIR
37 | value: ""
38 | - name: DOCKER_DRIVER
39 | value: "overlay2"
40 |
41 | volumePermissions:
42 | enabled: true
43 | securityContext:
44 | runAsUser: 0
45 |
46 | securityContext:
47 | enabled: true
48 | fsGroup: 1000
49 | runAsUser: 1000
50 |
51 | service:
52 | type: LoadBalancer
53 | port: 8080
54 |
55 | ingress:
56 | enabled: false
57 | #annotations:
58 | # kubernetes.io/ingress.class: nginx
59 | # kubernetes.io/tls-acme: "true"
60 | #hosts:
61 | # - host: code-server.example.loc
62 | # paths:
63 | # - /
64 |
65 | #tls:
66 | # - secretName: code-server
67 | # hosts:
68 | # - code-server.example.loc
69 |
70 | extraArgs: []
71 | extraVars:
72 | - name: DOCKER_HOST
73 | value: tcp://localhost:2375
74 |
75 | nodeSelector: {}
76 |
77 | tolerations: []
78 |
79 | affinity: {}
80 |
81 | extraSecretMounts: []
82 |
83 | extraVolumeMounts: []
84 |
85 | hostPath: ""
86 |
87 | extraConfigmapMounts: []
88 |
89 | serviceAccount:
90 | create: false
91 |
--------------------------------------------------------------------------------
/guides/aws-ec2.md:
--------------------------------------------------------------------------------
1 | # deploying `code-server` on AWS EC2
2 |
3 | > ⚠️ The deploy script referenced in this guide uses the code-server --link service which is now deprecated. If this solution does not work for you, we recommend following our guide to use [LetsEncrypt with Caddy](https://coder.com/docs/code-server/latest/guide#using-lets-encrypt-with-caddy) to securely connect to code-server on your VM.
4 |
5 | 
6 |
7 | [AWS EC2](https://aws.amazon.com/ec2/) is a popular way to manage and launch virtual machines. Here is a fast way to launch a code-server machine with AWS EC2:
8 |
9 | 1. Log into AWS and head over to the [EC2 dashboard](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2). Launch a new instance.
10 |
11 | 2. Use the "Ubuntu Server 20.04 LTS" 64-bit (x86) Quick Start.
12 |
13 | 3. Choose `t2.micro` instance type or larger.
14 |
15 | 4. Click `Next: Configure Instance Details` to add the code-server script.
16 |
17 | 5. Under `User data`, copy & paste the [launch-code-server.sh](../deploy-vm/launch-code-server.sh) script.
18 |
19 | 6. Expand your storage, if necessary under the "Add Storage" section.
20 |
21 | 7. Under "Security Groups," ensure you have rows for "SSH" (:22) and "HTTP" (:80)
22 |
23 | 8. Add any SSH keys, if necessary, and launch the instance.
24 |
25 | 9. Once your instance starts, you can simply navigate to the public IP address and get forwarded to a secure version of code-server, which will be proxied behind your GitHub account (the first one you log in with). For information on how this works, see [code-server --link](https://github.com/cdr/code-server#cloud-program-%EF%B8%8F).
26 |
27 | 10. Optional: To change the URL in the address bar from `ip-[xxxx]` to something more descriptive, you just need to change your hostname and restart code-server:
28 |
29 | ```sh
30 | sudo hostnamectl set-hostname bens-devbox
31 | sudo systemctl restart code-server@coder
32 | ```
33 |
34 | See our [troubleshooting guide](../deploy-vm#troubleshooting) if you are unable to connect after some time.
35 |
--------------------------------------------------------------------------------
/guides/heroku.md:
--------------------------------------------------------------------------------
1 | # Guide: Launching `code-server` on Heroku
2 |
3 | Heroku is a managed app hosting platform.
4 |
5 | Launch code-server on Heroku to get on-demand dev environments that turn off when you don't need them! 💵
6 |
7 | 
8 |
9 | ## Step 1: Click to deploy
10 |
11 | [](https://dashboard.heroku.com/new?template=https://github.com/cdr/deploy-code-server)
12 |
13 | ---
14 |
15 | ## Step 2: Configure & deploy your environment
16 |
17 | `App name`: The URL and you can access code-server with
18 |
19 | `PASSWORD`: A password you can use to log in
20 |
21 | `GIT_REPO`: The HTTPS URL of a git repo you'd like to use in code-server. (optional)
22 |
23 | After it has built, you can access it by pressing "View" or "Open app."
24 |
25 | ## Step 3: Create a new GitHub repo with this template
26 |
27 |
28 |
29 | Press the button in the top right of the repo, or or click to [use this template](https://github.com/bpmct/deploy-code-server/generate).
30 |
31 | ## Step 4: Set up automatic builds with this repo
32 |
33 | 1. In Heroku, navigate to `Deploy -> Deployment Method"
34 | 1. Link it with the GitHub repo you just created.
35 | 1. Open the repo in GitHub and edit the `Dockerfile`
36 | 1. Add some custom tools (like NodeJS) and commit to the main branch:
37 |
38 | ```Dockerfile
39 | # You can add custom software and dependencies for your environment here. Some examples:
40 |
41 | # RUN code-server --install-extension esbenp.prettier-vscode
42 | # RUN sudo apt-get install -y build-essential
43 | # RUN COPY myTool /home/coder/myTool
44 |
45 | # Install NodeJS
46 | RUN sudo curl -fsSL https://deb.nodesource.com/setup_15.x | sudo bash -
47 | RUN sudo apt-get install -y nodejs
48 | ```
49 |
50 | 1. Head back to Heroku and notice a new deployment has started. After it has completed, you can use these tools in your environment.
51 |
52 | 1. (Optional): [Configure rclone](https://github.com/cdr/deploy-code-server/tree/main/deploy-container#-persist-your-filesystem-with-rclone) so that you can save your VS Code config and files without commiting
53 |
54 | See the [deploy-container README](../deploy-container) for other config vars for your environment.
55 |
56 | ---
57 |
58 | To update your code-server version, modify the version number on line 2 in your Dockerfile. See the [list of tags](https://hub.docker.com/r/codercom/code-server/tags?page=1&ordering=last_updated) for the latest version.
59 |
--------------------------------------------------------------------------------
/guides/railway.md:
--------------------------------------------------------------------------------
1 | # Guide: Launching `code-server` on railway.app
2 |
3 | [Railway](https://railway.app) is a new cloud development platform! ☁️
4 |
5 | Use Railway + code-server to get a dev environment that you can access from any device.
6 |
7 | 
8 |
9 | ## Step 1: Click button to deploy
10 |
11 | [](https://railway.app/new/template?template=https%3A%2F%2Fgithub.com%2Fcoder%2Fdeploy-code-server&envs=PASSWORD%2CGIT_REPO&optionalEnvs=GIT_REPO&PASSWORDDesc=Your+password+to+log+in+to+code-server&GIT_REPODesc=A+git+repo+to+auto-clone+and+open+in+code-server+%28e.g+https%3A%2F%2Fgithub.com%2Fcoder%2Fdocs%29)
12 |
13 | ## Step 2: Configure & launch your environment
14 |
15 | You'll need to make a new repository which will contain your code-server configuration. If you push changes to this repo (to install NodeJS, for example), it will re-deploy code-server.
16 |
17 |
18 |
19 | You also need to specity a `PASSWORD` and a `GIT_REPO` to clone in your environment :)
20 |
21 | ## Step 3: Modify your environment to add additional tools
22 |
23 | 1. In Railway, go to `Deployments -> Triggers` to see your source repo.
24 |
25 |
26 |
27 | 1. Open the source repo in GitHub and edit the `Dockerfile`
28 | 1. Add some custom tools (like NodeJS) and push to the main branch:
29 |
30 | ```Dockerfile
31 | # You can add custom software and dependencies for your environment here. Some examples:
32 |
33 | # RUN code-server --install-extension esbenp.prettier-vscode
34 | # RUN sudo apt-get install -y build-essential
35 | # RUN COPY myTool /home/coder/myTool
36 |
37 | # Install NodeJS
38 | RUN sudo curl -fsSL https://deb.nodesource.com/setup_15.x | sudo bash -
39 | RUN sudo apt-get install -y nodejs
40 | ```
41 |
42 | 1. Head back to Railway and notice a new deployment was created. After it has completed, you can use these tools in your environment.
43 |
44 | 1. (Optional): [Configure rclone](https://github.com/cdr/deploy-code-server/tree/main/deploy-container#-persist-your-filesystem-with-rclone) so that you can save your VS Code config and files without commiting
45 |
46 | See the [deploy-container README](../deploy-container) for other config vars for your environment. These variables, such as your password, can be managed in the "Variables" section of your project in railway.
47 |
48 | ---
49 |
50 | To update your code-server version, modify the version number on line 2 in your Dockerfile. See the [list of tags](https://hub.docker.com/r/codercom/code-server/tags?page=1&ordering=last_updated) for the latest version.
51 |
--------------------------------------------------------------------------------
/deploy-container/entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | START_DIR="${START_DIR:-/home/coder/project}"
4 |
5 | PREFIX="deploy-code-server"
6 |
7 | mkdir -p $START_DIR
8 |
9 | # function to clone the git repo or add a user's first file if no repo was specified.
10 | project_init () {
11 | [ -z "${GIT_REPO}" ] && echo "[$PREFIX] No GIT_REPO specified" && echo "Example file. Have questions? Join us at https://community.coder.com" > $START_DIR/coder.txt || git clone $GIT_REPO $START_DIR
12 | }
13 |
14 | # add rclone config and start rclone, if supplied
15 | if [[ -z "${RCLONE_DATA}" ]]; then
16 | echo "[$PREFIX] RCLONE_DATA is not specified. Files will not persist"
17 |
18 | # start the project
19 | project_init
20 |
21 | else
22 | echo "[$PREFIX] Copying rclone config..."
23 | mkdir -p /home/coder/.config/rclone/
24 | touch /home/coder/.config/rclone/rclone.conf
25 | echo $RCLONE_DATA | base64 -d > /home/coder/.config/rclone/rclone.conf
26 |
27 | # default to true
28 | RCLONE_VSCODE_TASKS="${RCLONE_VSCODE_TASKS:-true}"
29 | RCLONE_AUTO_PUSH="${RCLONE_AUTO_PUSH:-true}"
30 | RCLONE_AUTO_PULL="${RCLONE_AUTO_PULL:-true}"
31 |
32 | if [ $RCLONE_VSCODE_TASKS = "true" ]; then
33 | # copy our tasks config to VS Code
34 | echo "[$PREFIX] Applying VS Code tasks for rclone"
35 | cp /tmp/rclone-tasks.json /home/coder/.local/share/code-server/User/tasks.json
36 | # install the extension to add to menu bar
37 | code-server --install-extension actboy168.tasks&
38 | else
39 | # user specified they don't want to apply the tasks
40 | echo "[$PREFIX] Skipping VS Code tasks for rclone"
41 | fi
42 |
43 |
44 |
45 | # Full path to the remote filesystem
46 | RCLONE_REMOTE_PATH=${RCLONE_REMOTE_NAME:-code-server-remote}:${RCLONE_DESTINATION:-code-server-files}
47 | RCLONE_SOURCE_PATH=${RCLONE_SOURCE:-$START_DIR}
48 | echo "rclone sync $RCLONE_SOURCE_PATH $RCLONE_REMOTE_PATH $RCLONE_FLAGS -vv" > /home/coder/push_remote.sh
49 | echo "rclone sync $RCLONE_REMOTE_PATH $RCLONE_SOURCE_PATH $RCLONE_FLAGS -vv" > /home/coder/pull_remote.sh
50 | chmod +x push_remote.sh pull_remote.sh
51 |
52 | if rclone ls $RCLONE_REMOTE_PATH; then
53 |
54 | if [ $RCLONE_AUTO_PULL = "true" ]; then
55 | # grab the files from the remote instead of running project_init()
56 | echo "[$PREFIX] Pulling existing files from remote..."
57 | /home/coder/pull_remote.sh&
58 | else
59 | # user specified they don't want to apply the tasks
60 | echo "[$PREFIX] Auto-pull is disabled"
61 | fi
62 |
63 | else
64 |
65 | if [ $RCLONE_AUTO_PUSH = "true" ]; then
66 | # we need to clone the git repo and sync
67 | echo "[$PREFIX] Pushing initial files to remote..."
68 | project_init
69 | /home/coder/push_remote.sh&
70 | else
71 | # user specified they don't want to apply the tasks
72 | echo "[$PREFIX] Auto-push is disabled"
73 | fi
74 |
75 | fi
76 |
77 | fi
78 |
79 | # Add dotfiles, if set
80 | if [ -n "$DOTFILES_REPO" ]; then
81 | # grab the files from the remote instead of running project_init()
82 | echo "[$PREFIX] Cloning dotfiles..."
83 | mkdir -p $HOME/dotfiles
84 | git clone $DOTFILES_REPO $HOME/dotfiles
85 |
86 | DOTFILES_SYMLINK="${RCLONE_AUTO_PULL:-true}"
87 |
88 | # symlink repo to $HOME
89 | if [ $DOTFILES_SYMLINK = "true" ]; then
90 | shopt -s dotglob
91 | ln -sf source_file $HOME/dotfiles/* $HOME
92 | fi
93 |
94 | # run install script, if it exists
95 | [ -f "$HOME/dotfiles/install.sh" ] && $HOME/dotfiles/install.sh
96 | fi
97 |
98 | echo "[$PREFIX] Starting code-server..."
99 | # Now we can run code-server with the default entrypoint
100 | /usr/bin/entrypoint.sh --bind-addr 0.0.0.0:8080 $START_DIR
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # deploy-code-server 🚀
2 |
3 | A collection of one-click buttons and scripts for deploying [code-server](https://github.com/cdr/code-server) to various cloud hosting platforms. The fastest way to get a code-server environment! ☁️
4 |
5 | | | Name | Type | Lowest-Price Plan | Deploy |
6 | | --------------------------------------------------------------------------------------------------------------- | ----------------- | ------------- | ----------------------------- | ------------------------------------------------------- |
7 | | [](https://coder.com/?utm_source=github.com/coder/deploy-code-server&utm_medium=github&utm_campaign=readme.md) | Coder | Anything | Open Source | [read the docs](https://coder.com/docs/coder-oss/latest?utm_source=github.com/coder/deploy-code-server&utm_medium=github&utm_campaign=readme.md) |
8 | | [](https://aws.amazon.com/ec2) | AWS EC2 | VM | Free Tier, 1 CPU, 1 GB RAM | [see guide](guides/aws-ec2.md) |
9 | | [](https://digitalocean.com) | DigitalOcean | VM | $5/mo, 1 CPU, 1 GB RAM | [see guide](guides/digitalocean.md) |
10 | | [](https://vultr.com) | Vultr | VM | $3.50/mo, 1 CPU, 512 MB RAM | coming soon |
11 | | [](https://linode.com) | Linode | VM | $5/mo, 1 CPU, 1 GB RAM | [see guide](guides/linode.md) |
12 | | [](https://railway.app) | Railway | Container | Free, Shared CPU, 1 GB RAM 🚀 | [see guide](guides/railway.md) |
13 | | [](https://heroku.com) | Heroku | Container | Free, 1 CPU, 512 MB RAM | [see guide](guides/heroku.md) |
14 | | [](https://azure.microsoft.com/en-us/services/app-service/) | Azure App Service | Container | Free, 1 CPU, 1 GB RAM | [see guide](https://github.com/bpmct/code-server-azure) |
15 | | [](https://www.oracle.com/cloud/) | Oracle Cloud | Terraform / OCI | Free Tier Support | [see guide](https://github.com/oracle-devrel/terraform-oci-code-server) |
16 |
17 | ---
18 |
19 | ## code-server on a VM vs. a Container
20 |
21 | - VMs are deployed once, and then can be modified to install new software
22 | - You need to save "snapshots" to use your latest images
23 | - Storage is always persistent, and you can usually add extra volumes
24 | - VMs can support many workloads, such as running Docker or Kubernetes clusters
25 | - [👀 Docs for the VM install script](deploy-vm/)
26 | - Deployed containers do not persist, and are often rebuilt
27 | - Containers can shut down when you are not using them, saving you money
28 | - All software and dependencies need to be defined in the `Dockerfile` or install script so they aren't destroyed on a rebuild. This is great if you want to have a new, clean environment every time you code
29 | - Most app platforms do not support running docker or virtual volume mounts in the container.
30 | - Storage may not be persistent. You may have to use [rclone](https://rclone.org/) to store your filesystem on a cloud service. Documented below:
31 | - [📄 Docs for code-server-deploy-container](deploy-container/)
32 |
--------------------------------------------------------------------------------
/cli/src/deploys/deployDigitalOcean.ts:
--------------------------------------------------------------------------------
1 | import inquirer from "inquirer";
2 | import got from "got";
3 | import ora from "ora";
4 | import chalk from "chalk";
5 | import {
6 | createDroplet,
7 | Droplet,
8 | DropletV4Network,
9 | getDroplet,
10 | } from "../lib/digitalOcean";
11 | import waitUntil from "async-wait-until";
12 |
13 | const getUserDataScript = async () =>
14 | got(
15 | "https://raw.githubusercontent.com/cdr/deploy-code-server/main/deploy-vm/launch-code-server.sh"
16 | ).text();
17 |
18 | const isPermissionError = (error: unknown) => {
19 | return error instanceof got.HTTPError && error.response.statusCode === 401;
20 | };
21 |
22 | const getPublicIp = (droplet: Droplet) => {
23 | const network = droplet.networks.v4.find(
24 | (network) => network.type === "public"
25 | );
26 | return network?.ip_address;
27 | };
28 |
29 | const isCodeServerLive = async (droplet: Droplet) => {
30 | try {
31 | const response = await got(`http://${getPublicIp(droplet)}`, { retry: 0 });
32 | return response.statusCode === 200;
33 | } catch {
34 | return false;
35 | }
36 | };
37 |
38 | const handleErrorLog = (error: unknown) => {
39 | if (isPermissionError(error)) {
40 | console.log(
41 | chalk.red(
42 | chalk.bold("Invalid token."),
43 | "Please, verify your token and try again."
44 | )
45 | );
46 | } else {
47 | console.log(chalk.red.bold("Something wrong happened"));
48 | console.log(
49 | chalk.red(
50 | "You may have to delete the droplet manually on your Digital Ocean dashboard."
51 | )
52 | );
53 | }
54 | };
55 |
56 | const oneMinute = 1000 * 60;
57 | const fiveMinutes = oneMinute * 5;
58 |
59 | const waitUntilBeActive = (droplet: Droplet, token: string) => {
60 | return waitUntil(
61 | async () => {
62 | const dropletInfo = await getDroplet({ token, id: droplet.id });
63 | return dropletInfo.status === "active";
64 | },
65 | { timeout: fiveMinutes, intervalBetweenAttempts: oneMinute / 2 }
66 | );
67 | };
68 |
69 | const waitUntilHasPublicIp = (droplet: Droplet, token: string) => {
70 | return waitUntil(
71 | async () => {
72 | const dropletInfo = await getDroplet({ token, id: droplet.id });
73 | const ip = getPublicIp(dropletInfo);
74 | return ip !== undefined;
75 | },
76 | { timeout: fiveMinutes, intervalBetweenAttempts: oneMinute / 2 }
77 | );
78 | };
79 |
80 | const waitUntilCodeServerIsLive = (droplet: Droplet, token: string) => {
81 | return waitUntil(
82 | async () => {
83 | const dropletInfo = await getDroplet({ token, id: droplet.id });
84 | return isCodeServerLive(dropletInfo);
85 | },
86 | { timeout: fiveMinutes * 2, intervalBetweenAttempts: oneMinute / 2 }
87 | );
88 | };
89 |
90 | export const deployDigitalOcean = async () => {
91 | let spinner: ora.Ora;
92 |
93 | console.log(
94 | chalk.blue(
95 | "You can create a token on",
96 | chalk.bold("https://cloud.digitalocean.com/account/api/tokens")
97 | )
98 | );
99 | const { token } = await inquirer.prompt([
100 | { name: "token", message: "Your Digital Ocean token:", type: "password" },
101 | ]);
102 |
103 | try {
104 | let spinner = ora("Creating droplet and installing code-server").start();
105 | let droplet = await createDroplet({
106 | userData: await getUserDataScript(),
107 | token,
108 | });
109 | spinner.stop();
110 | console.log(chalk.green("✅ Droplet created"));
111 |
112 | spinner = ora("Waiting droplet to be active").start();
113 | await waitUntilBeActive(droplet, token);
114 | spinner.stop();
115 | console.log(chalk.green("✅ Droplet active"));
116 |
117 | spinner = ora("Waiting droplet to have a public IP").start();
118 | await waitUntilHasPublicIp(droplet, token);
119 | spinner.stop();
120 | console.log(chalk.green("✅ Public IP is available"));
121 |
122 | spinner = ora(
123 | "Waiting code-server to be live. It can take up to 5 minutes."
124 | ).start();
125 | await waitUntilCodeServerIsLive(droplet, token);
126 | droplet = await getDroplet({ token, id: droplet.id });
127 | spinner.stop();
128 | console.log(
129 | chalk.green(
130 | `🚀 Your code-server is live. You can access it on`,
131 | chalk.bold(`http://${getPublicIp(droplet)}`)
132 | )
133 | );
134 | } catch (error) {
135 | spinner.stop();
136 | handleErrorLog(error);
137 | }
138 | };
139 |
--------------------------------------------------------------------------------
/deploy-container/README.md:
--------------------------------------------------------------------------------
1 | # code-server-deploy-container
2 |
3 | An container image built for deploying code-server.
4 |
5 | ## Guides
6 |
7 | - [Deploy on Railway](../guides/railway.md)
8 | - [Deploy on Heroku](../guides/heroku.md)
9 |
10 | Docker Hub: `bencdr/code-server-deploy-container`
11 |
12 | To run the container locally, you can use:
13 |
14 | ```console
15 | docker run -p 127.0.0.1:8080:8080 \
16 | -v "$PWD/project:/home/coder/project" \
17 | -u "$(id -u):$(id -g)" \
18 | -e "DOCKER_USER=$USER" \
19 | -e "PASSWORD=12345" \
20 | -it bencdr/code-server-deploy-container:latest
21 | ```
22 |
23 | ## Modifying your code-server environment
24 |
25 | To update your code-server version, modify the version number on line 2 in your Dockerfile. See the [list of tags](https://hub.docker.com/r/codercom/code-server/tags?page=1&ordering=last_updated) for the latest version.
26 |
27 | We've included some examples on how to add additional dependencies in the root-level [Dockerfile](../Dockerfile):
28 |
29 | ```Dockerfile
30 | # Install a VS Code extension:
31 | # Note: we use a different marketplace than VS Code. See https://github.com/cdr/code-server/blob/main/docs/FAQ.md#differences-compared-to-vs-code
32 | RUN code-server --install-extension esbenp.prettier-vscode
33 |
34 | # Install apt packages:
35 | RUN sudo apt-get install -y ubuntu-make
36 |
37 | # Copy files:
38 | COPY deploy-container/myTool /home/coder/myTool
39 | ```
40 |
41 | ---
42 |
43 | ## Environment variables
44 |
45 | | Variable Name | Description | Default Value |
46 | | ------------------ | -------------------------------------------------------------------------------------------------- | ------------------- |
47 | | `PASSWORD` | Password for code-server | |
48 | | `HASHED_PASSWORD` | Overrrides PASSWORD. [SHA-256 hash](https://xorbin.com/tools/sha256-hash-calculator) of password |
49 | | `USE_LINK` | Use code-server --link instead of a password (coming soon) | false |
50 | | `GIT_REPO` | A git repository to clone | |
51 | | `DOTFILES_REPO` | A [dotfiles](https://dotfiles.github.io/) repo to save preferences. Runs install.sh, if it exists. | |
52 | | `DOTFILES_SYMLINK` | Symlinks dotfiles repo to $HOME, if exits. | true |
53 | | `START_DIR` | The directory code-server opens (and clones repos in) | /home/coder/project |
54 |
55 | ---
56 |
57 | Other code-server environment variables (such as `CODE_SERVER_CONFIG` ) can also be used. See the [code-server FAQ](https://github.com/cdr/code-server/blob/main/docs/FAQ.md) for details.
58 |
59 | ## 💾 Persist your filesystem with `rclone`
60 |
61 | This image has built-in support for [rclone](https://rclone.org/) so that your files don't get lost when code-server is re-deployed.
62 |
63 | You can generate the rclone config on any machine, but it works great on the code-server environment itself, or Google Cloud Shell :)
64 |
65 | ```sh
66 | # 1. install rclone
67 | # see https://rclone.org/install/ for other install options
68 | $ curl https://rclone.org/install.sh | sudo bash
69 |
70 | # 2. create a new rclone remote with your favorite storage provider ☁️
71 | $ rclone config
72 |
73 | # 3. Encode your rclone config and copy to your clipboard
74 | $ cat $(rclone config file | sed -n 2p) | base64 --wrap=0 # Linux
75 | $ cat $(rclone config file | sed -n 2p) | base64 --b 0 # MacOS
76 | ```
77 |
78 | Now, you can add the following the environment variables in the code-server cloud app:
79 |
80 | | Environment Variable | Description | Default Value | Required |
81 | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -------- |
82 | | RCLONE_DATA | the encoded rclone config you copied in step 3 | n/a | ✅ |
83 | | RCLONE_REMOTE_NAME | the name of the remote you added in step 2.
check with `$ rclone listremotes` | code-server-remote | |
84 | | RCLONE_SOURCE | source directory to sync files in the code-server container | the project directory: `/home/coder/project` | |
85 | | RCLONE_DESTINATION | the path in the remote that rclone syncs to. change this if you have multiple code-server environments, or if you want to better organize your files. | code-server-files | |
86 | | RCLONE_VSCODE_TASKS | import push and pull shortcuts into VS Code  | true |
87 | | RCLONE_AUTO_PUSH | automatically push files on startup if the rclone remote is empty (environment -> rclone remote) | true | |
88 | | RCLONE_AUTO_PULL | automatically pull files on startup if the rclone remote is not empty (rclone -> environment remote) | true | |
89 | | RCLONE_FLAGS | additional flags to attach to the push and pull script.
type `$ rclone help flags` for a list. | | |
90 |
91 | ```sh
92 |
93 | # --- How to use ---
94 |
95 | # Terminal:
96 | $ sh /home/coder/push_remote.sh # save your uncomitted files to the remote
97 | $ sh /home/coder/pull_remote.sh # get latest files from the remote
98 |
99 | # In VS Code:
100 | # use items in bottom bar or ctrl + P, run task: push_remote or pull_remote or
101 | ```
102 |
103 | ### Popular rclone flags
104 |
105 | To avoid syncing unnecessary directories, add this to `RCLONE_FLAGS` :
106 |
107 | ```none
108 | --exclude "node_modules/**" --exclude ".git/**"
109 | ```
110 |
111 | ---
112 |
113 | ## Todo
114 |
115 | - [ ] Make `push_remote` and `pull_remote` commands in path
116 | - [ ] Impliment file watcher or auto file sync in VS Code
117 | - [ ] Attach a "push" on a git stash??
118 | - [ ] Add support for SSH / VS Code remote access
119 | - [ ] Make rclone logs visible in environment for debugging
120 |
--------------------------------------------------------------------------------
/cli/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@sindresorhus/is@^4.0.0":
6 | version "4.0.1"
7 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5"
8 | integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==
9 |
10 | "@szmarczak/http-timer@^4.0.5":
11 | version "4.0.6"
12 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
13 | integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
14 | dependencies:
15 | defer-to-connect "^2.0.0"
16 |
17 | "@types/cacheable-request@^6.0.1":
18 | version "6.0.2"
19 | resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9"
20 | integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==
21 | dependencies:
22 | "@types/http-cache-semantics" "*"
23 | "@types/keyv" "*"
24 | "@types/node" "*"
25 | "@types/responselike" "*"
26 |
27 | "@types/http-cache-semantics@*":
28 | version "4.0.1"
29 | resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
30 | integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
31 |
32 | "@types/inquirer@^7.3.3":
33 | version "7.3.3"
34 | resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-7.3.3.tgz#92e6676efb67fa6925c69a2ee638f67a822952ac"
35 | integrity sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==
36 | dependencies:
37 | "@types/through" "*"
38 | rxjs "^6.4.0"
39 |
40 | "@types/keyv@*":
41 | version "3.1.2"
42 | resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5"
43 | integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==
44 | dependencies:
45 | "@types/node" "*"
46 |
47 | "@types/node@*":
48 | version "16.7.1"
49 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.1.tgz#c6b9198178da504dfca1fd0be9b2e1002f1586f0"
50 | integrity sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A==
51 |
52 | "@types/node@^14.14.20":
53 | version "14.17.11"
54 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.11.tgz#82d266d657aec5ff01ca59f2ffaff1bb43f7bf0f"
55 | integrity sha512-n2OQ+0Bz6WEsUjrvcHD1xZ8K+Kgo4cn9/w94s1bJS690QMUWfJPW/m7CCb7gPkA1fcYwL2UpjXP/rq/Eo41m6w==
56 |
57 | "@types/responselike@*", "@types/responselike@^1.0.0":
58 | version "1.0.0"
59 | resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
60 | integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
61 | dependencies:
62 | "@types/node" "*"
63 |
64 | "@types/through@*":
65 | version "0.0.30"
66 | resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895"
67 | integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==
68 | dependencies:
69 | "@types/node" "*"
70 |
71 | ansi-escapes@^4.2.1:
72 | version "4.3.2"
73 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
74 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
75 | dependencies:
76 | type-fest "^0.21.3"
77 |
78 | ansi-regex@^5.0.0:
79 | version "5.0.0"
80 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
81 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
82 |
83 | ansi-styles@^4.1.0:
84 | version "4.3.0"
85 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
86 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
87 | dependencies:
88 | color-convert "^2.0.1"
89 |
90 | async-wait-until@^2.0.7:
91 | version "2.0.7"
92 | resolved "https://registry.yarnpkg.com/async-wait-until/-/async-wait-until-2.0.7.tgz#ed4ccfe076850105c1de555381630b9fad882f5d"
93 | integrity sha512-SjHxM2f5ev4o87gYppr8HmWPjOHw06Pg5KZvkSl6FMqa3TTHzDGIWCZx61XWjxO5ArPcZBuJYbAa809FNyx3QQ==
94 |
95 | base64-js@^1.3.1:
96 | version "1.5.1"
97 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
98 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
99 |
100 | bl@^4.1.0:
101 | version "4.1.0"
102 | resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
103 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
104 | dependencies:
105 | buffer "^5.5.0"
106 | inherits "^2.0.4"
107 | readable-stream "^3.4.0"
108 |
109 | buffer@^5.5.0:
110 | version "5.7.1"
111 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
112 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
113 | dependencies:
114 | base64-js "^1.3.1"
115 | ieee754 "^1.1.13"
116 |
117 | cacheable-lookup@^5.0.3:
118 | version "5.0.4"
119 | resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
120 | integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
121 |
122 | cacheable-request@^7.0.2:
123 | version "7.0.2"
124 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
125 | integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
126 | dependencies:
127 | clone-response "^1.0.2"
128 | get-stream "^5.1.0"
129 | http-cache-semantics "^4.0.0"
130 | keyv "^4.0.0"
131 | lowercase-keys "^2.0.0"
132 | normalize-url "^6.0.1"
133 | responselike "^2.0.0"
134 |
135 | chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
136 | version "4.1.2"
137 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
138 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
139 | dependencies:
140 | ansi-styles "^4.1.0"
141 | supports-color "^7.1.0"
142 |
143 | chardet@^0.7.0:
144 | version "0.7.0"
145 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
146 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
147 |
148 | cli-cursor@^3.1.0:
149 | version "3.1.0"
150 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
151 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
152 | dependencies:
153 | restore-cursor "^3.1.0"
154 |
155 | cli-spinners@^2.5.0:
156 | version "2.6.0"
157 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939"
158 | integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==
159 |
160 | cli-width@^3.0.0:
161 | version "3.0.0"
162 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
163 | integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
164 |
165 | clone-response@^1.0.2:
166 | version "1.0.2"
167 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
168 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
169 | dependencies:
170 | mimic-response "^1.0.0"
171 |
172 | clone@^1.0.2:
173 | version "1.0.4"
174 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
175 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
176 |
177 | color-convert@^2.0.1:
178 | version "2.0.1"
179 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
180 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
181 | dependencies:
182 | color-name "~1.1.4"
183 |
184 | color-name@~1.1.4:
185 | version "1.1.4"
186 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
187 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
188 |
189 | commander@^8.1.0:
190 | version "8.1.0"
191 | resolved "https://registry.yarnpkg.com/commander/-/commander-8.1.0.tgz#db36e3e66edf24ff591d639862c6ab2c52664362"
192 | integrity sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==
193 |
194 | decompress-response@^6.0.0:
195 | version "6.0.0"
196 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
197 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
198 | dependencies:
199 | mimic-response "^3.1.0"
200 |
201 | defaults@^1.0.3:
202 | version "1.0.3"
203 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
204 | integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
205 | dependencies:
206 | clone "^1.0.2"
207 |
208 | defer-to-connect@^2.0.0:
209 | version "2.0.1"
210 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
211 | integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
212 |
213 | emoji-regex@^8.0.0:
214 | version "8.0.0"
215 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
216 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
217 |
218 | end-of-stream@^1.1.0:
219 | version "1.4.4"
220 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
221 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
222 | dependencies:
223 | once "^1.4.0"
224 |
225 | escape-string-regexp@^1.0.5:
226 | version "1.0.5"
227 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
228 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
229 |
230 | external-editor@^3.0.3:
231 | version "3.1.0"
232 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
233 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
234 | dependencies:
235 | chardet "^0.7.0"
236 | iconv-lite "^0.4.24"
237 | tmp "^0.0.33"
238 |
239 | figures@^3.0.0:
240 | version "3.2.0"
241 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
242 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
243 | dependencies:
244 | escape-string-regexp "^1.0.5"
245 |
246 | get-stream@^5.1.0:
247 | version "5.2.0"
248 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
249 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
250 | dependencies:
251 | pump "^3.0.0"
252 |
253 | got@^11.8.2:
254 | version "11.8.5"
255 | resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046"
256 | integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==
257 | dependencies:
258 | "@sindresorhus/is" "^4.0.0"
259 | "@szmarczak/http-timer" "^4.0.5"
260 | "@types/cacheable-request" "^6.0.1"
261 | "@types/responselike" "^1.0.0"
262 | cacheable-lookup "^5.0.3"
263 | cacheable-request "^7.0.2"
264 | decompress-response "^6.0.0"
265 | http2-wrapper "^1.0.0-beta.5.2"
266 | lowercase-keys "^2.0.0"
267 | p-cancelable "^2.0.0"
268 | responselike "^2.0.0"
269 |
270 | has-flag@^4.0.0:
271 | version "4.0.0"
272 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
273 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
274 |
275 | http-cache-semantics@^4.0.0:
276 | version "4.1.0"
277 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
278 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
279 |
280 | http2-wrapper@^1.0.0-beta.5.2:
281 | version "1.0.3"
282 | resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
283 | integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
284 | dependencies:
285 | quick-lru "^5.1.1"
286 | resolve-alpn "^1.0.0"
287 |
288 | iconv-lite@^0.4.24:
289 | version "0.4.24"
290 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
291 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
292 | dependencies:
293 | safer-buffer ">= 2.1.2 < 3"
294 |
295 | ieee754@^1.1.13:
296 | version "1.2.1"
297 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
298 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
299 |
300 | inherits@^2.0.3, inherits@^2.0.4:
301 | version "2.0.4"
302 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
303 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
304 |
305 | inquirer@^8.1.2:
306 | version "8.1.2"
307 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d"
308 | integrity sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==
309 | dependencies:
310 | ansi-escapes "^4.2.1"
311 | chalk "^4.1.1"
312 | cli-cursor "^3.1.0"
313 | cli-width "^3.0.0"
314 | external-editor "^3.0.3"
315 | figures "^3.0.0"
316 | lodash "^4.17.21"
317 | mute-stream "0.0.8"
318 | ora "^5.3.0"
319 | run-async "^2.4.0"
320 | rxjs "^7.2.0"
321 | string-width "^4.1.0"
322 | strip-ansi "^6.0.0"
323 | through "^2.3.6"
324 |
325 | is-fullwidth-code-point@^3.0.0:
326 | version "3.0.0"
327 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
328 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
329 |
330 | is-interactive@^1.0.0:
331 | version "1.0.0"
332 | resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
333 | integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
334 |
335 | is-unicode-supported@^0.1.0:
336 | version "0.1.0"
337 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
338 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
339 |
340 | json-buffer@3.0.1:
341 | version "3.0.1"
342 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
343 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
344 |
345 | keyv@^4.0.0:
346 | version "4.0.3"
347 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254"
348 | integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==
349 | dependencies:
350 | json-buffer "3.0.1"
351 |
352 | lodash@^4.17.21:
353 | version "4.17.21"
354 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
355 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
356 |
357 | log-symbols@^4.1.0:
358 | version "4.1.0"
359 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
360 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
361 | dependencies:
362 | chalk "^4.1.0"
363 | is-unicode-supported "^0.1.0"
364 |
365 | lowercase-keys@^2.0.0:
366 | version "2.0.0"
367 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
368 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
369 |
370 | mimic-fn@^2.1.0:
371 | version "2.1.0"
372 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
373 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
374 |
375 | mimic-response@^1.0.0:
376 | version "1.0.1"
377 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
378 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
379 |
380 | mimic-response@^3.1.0:
381 | version "3.1.0"
382 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
383 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
384 |
385 | mute-stream@0.0.8:
386 | version "0.0.8"
387 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
388 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
389 |
390 | normalize-url@^6.0.1:
391 | version "6.1.0"
392 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
393 | integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
394 |
395 | once@^1.3.1, once@^1.4.0:
396 | version "1.4.0"
397 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
398 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
399 | dependencies:
400 | wrappy "1"
401 |
402 | onetime@^5.1.0:
403 | version "5.1.2"
404 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
405 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
406 | dependencies:
407 | mimic-fn "^2.1.0"
408 |
409 | ora@^5.3.0, ora@^5.4.1:
410 | version "5.4.1"
411 | resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
412 | integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
413 | dependencies:
414 | bl "^4.1.0"
415 | chalk "^4.1.0"
416 | cli-cursor "^3.1.0"
417 | cli-spinners "^2.5.0"
418 | is-interactive "^1.0.0"
419 | is-unicode-supported "^0.1.0"
420 | log-symbols "^4.1.0"
421 | strip-ansi "^6.0.0"
422 | wcwidth "^1.0.1"
423 |
424 | os-tmpdir@~1.0.2:
425 | version "1.0.2"
426 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
427 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
428 |
429 | p-cancelable@^2.0.0:
430 | version "2.1.1"
431 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
432 | integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
433 |
434 | pump@^3.0.0:
435 | version "3.0.0"
436 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
437 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
438 | dependencies:
439 | end-of-stream "^1.1.0"
440 | once "^1.3.1"
441 |
442 | quick-lru@^5.1.1:
443 | version "5.1.1"
444 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
445 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
446 |
447 | readable-stream@^3.4.0:
448 | version "3.6.0"
449 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
450 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
451 | dependencies:
452 | inherits "^2.0.3"
453 | string_decoder "^1.1.1"
454 | util-deprecate "^1.0.1"
455 |
456 | resolve-alpn@^1.0.0:
457 | version "1.2.0"
458 | resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.0.tgz#058bb0888d1cd4d12474e9a4b6eb17bdd5addc44"
459 | integrity sha512-e4FNQs+9cINYMO5NMFc6kOUCdohjqFPSgMuwuZAOUWqrfWsen+Yjy5qZFkV5K7VO7tFSLKcUL97olkED7sCBHA==
460 |
461 | responselike@^2.0.0:
462 | version "2.0.0"
463 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723"
464 | integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==
465 | dependencies:
466 | lowercase-keys "^2.0.0"
467 |
468 | restore-cursor@^3.1.0:
469 | version "3.1.0"
470 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
471 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
472 | dependencies:
473 | onetime "^5.1.0"
474 | signal-exit "^3.0.2"
475 |
476 | run-async@^2.4.0:
477 | version "2.4.1"
478 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
479 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
480 |
481 | rxjs@^6.4.0:
482 | version "6.6.7"
483 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
484 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
485 | dependencies:
486 | tslib "^1.9.0"
487 |
488 | rxjs@^7.2.0:
489 | version "7.3.0"
490 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6"
491 | integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==
492 | dependencies:
493 | tslib "~2.1.0"
494 |
495 | safe-buffer@~5.2.0:
496 | version "5.2.1"
497 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
498 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
499 |
500 | "safer-buffer@>= 2.1.2 < 3":
501 | version "2.1.2"
502 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
503 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
504 |
505 | signal-exit@^3.0.2:
506 | version "3.0.3"
507 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
508 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
509 |
510 | string-width@^4.1.0:
511 | version "4.2.2"
512 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
513 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
514 | dependencies:
515 | emoji-regex "^8.0.0"
516 | is-fullwidth-code-point "^3.0.0"
517 | strip-ansi "^6.0.0"
518 |
519 | string_decoder@^1.1.1:
520 | version "1.3.0"
521 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
522 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
523 | dependencies:
524 | safe-buffer "~5.2.0"
525 |
526 | strip-ansi@^6.0.0:
527 | version "6.0.0"
528 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
529 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
530 | dependencies:
531 | ansi-regex "^5.0.0"
532 |
533 | supports-color@^7.1.0:
534 | version "7.2.0"
535 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
536 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
537 | dependencies:
538 | has-flag "^4.0.0"
539 |
540 | through@^2.3.6:
541 | version "2.3.8"
542 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
543 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
544 |
545 | tmp@^0.0.33:
546 | version "0.0.33"
547 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
548 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
549 | dependencies:
550 | os-tmpdir "~1.0.2"
551 |
552 | tslib@^1.9.0:
553 | version "1.14.1"
554 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
555 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
556 |
557 | tslib@~2.1.0:
558 | version "2.1.0"
559 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
560 | integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
561 |
562 | type-fest@^0.21.3:
563 | version "0.21.3"
564 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
565 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
566 |
567 | typescript@^4.1.3:
568 | version "4.3.5"
569 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4"
570 | integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==
571 |
572 | util-deprecate@^1.0.1:
573 | version "1.0.2"
574 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
575 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
576 |
577 | wcwidth@^1.0.1:
578 | version "1.0.1"
579 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
580 | integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
581 | dependencies:
582 | defaults "^1.0.3"
583 |
584 | wrappy@1:
585 | version "1.0.2"
586 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
587 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
588 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0":
6 | version "7.14.5"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
8 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
9 | dependencies:
10 | "@babel/highlight" "^7.14.5"
11 |
12 | "@babel/helper-validator-identifier@^7.14.5":
13 | version "7.14.9"
14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"
15 | integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==
16 |
17 | "@babel/highlight@^7.14.5":
18 | version "7.14.5"
19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
20 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
21 | dependencies:
22 | "@babel/helper-validator-identifier" "^7.14.5"
23 | chalk "^2.0.0"
24 | js-tokens "^4.0.0"
25 |
26 | "@types/parse-json@^4.0.0":
27 | version "4.0.0"
28 | resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
29 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
30 |
31 | aggregate-error@^3.0.0:
32 | version "3.1.0"
33 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
34 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
35 | dependencies:
36 | clean-stack "^2.0.0"
37 | indent-string "^4.0.0"
38 |
39 | ansi-colors@^4.1.1:
40 | version "4.1.1"
41 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
42 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
43 |
44 | ansi-escapes@^4.3.0:
45 | version "4.3.2"
46 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
47 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
48 | dependencies:
49 | type-fest "^0.21.3"
50 |
51 | ansi-regex@^5.0.0:
52 | version "5.0.0"
53 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
54 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
55 |
56 | ansi-styles@^3.2.1:
57 | version "3.2.1"
58 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
59 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
60 | dependencies:
61 | color-convert "^1.9.0"
62 |
63 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
64 | version "4.3.0"
65 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
66 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
67 | dependencies:
68 | color-convert "^2.0.1"
69 |
70 | astral-regex@^2.0.0:
71 | version "2.0.0"
72 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
73 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
74 |
75 | braces@^3.0.1:
76 | version "3.0.2"
77 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
78 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
79 | dependencies:
80 | fill-range "^7.0.1"
81 |
82 | callsites@^3.0.0:
83 | version "3.1.0"
84 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
85 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
86 |
87 | chalk@^2.0.0:
88 | version "2.4.2"
89 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
90 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
91 | dependencies:
92 | ansi-styles "^3.2.1"
93 | escape-string-regexp "^1.0.5"
94 | supports-color "^5.3.0"
95 |
96 | chalk@^4.1.0, chalk@^4.1.1:
97 | version "4.1.2"
98 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
99 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
100 | dependencies:
101 | ansi-styles "^4.1.0"
102 | supports-color "^7.1.0"
103 |
104 | clean-stack@^2.0.0:
105 | version "2.2.0"
106 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
107 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
108 |
109 | cli-cursor@^3.1.0:
110 | version "3.1.0"
111 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
112 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
113 | dependencies:
114 | restore-cursor "^3.1.0"
115 |
116 | cli-truncate@^2.1.0:
117 | version "2.1.0"
118 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
119 | integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
120 | dependencies:
121 | slice-ansi "^3.0.0"
122 | string-width "^4.2.0"
123 |
124 | color-convert@^1.9.0:
125 | version "1.9.3"
126 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
127 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
128 | dependencies:
129 | color-name "1.1.3"
130 |
131 | color-convert@^2.0.1:
132 | version "2.0.1"
133 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
134 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
135 | dependencies:
136 | color-name "~1.1.4"
137 |
138 | color-name@1.1.3:
139 | version "1.1.3"
140 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
141 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
142 |
143 | color-name@~1.1.4:
144 | version "1.1.4"
145 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
146 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
147 |
148 | colorette@^1.2.2:
149 | version "1.3.0"
150 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af"
151 | integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==
152 |
153 | commander@^7.2.0:
154 | version "7.2.0"
155 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
156 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
157 |
158 | cosmiconfig@^7.0.0:
159 | version "7.0.1"
160 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
161 | integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
162 | dependencies:
163 | "@types/parse-json" "^4.0.0"
164 | import-fresh "^3.2.1"
165 | parse-json "^5.0.0"
166 | path-type "^4.0.0"
167 | yaml "^1.10.0"
168 |
169 | cross-spawn@^7.0.3:
170 | version "7.0.3"
171 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
172 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
173 | dependencies:
174 | path-key "^3.1.0"
175 | shebang-command "^2.0.0"
176 | which "^2.0.1"
177 |
178 | debug@^4.3.1:
179 | version "4.3.2"
180 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
181 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
182 | dependencies:
183 | ms "2.1.2"
184 |
185 | emoji-regex@^8.0.0:
186 | version "8.0.0"
187 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
188 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
189 |
190 | enquirer@^2.3.6:
191 | version "2.3.6"
192 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
193 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
194 | dependencies:
195 | ansi-colors "^4.1.1"
196 |
197 | error-ex@^1.3.1:
198 | version "1.3.2"
199 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
200 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
201 | dependencies:
202 | is-arrayish "^0.2.1"
203 |
204 | escape-string-regexp@^1.0.5:
205 | version "1.0.5"
206 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
207 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
208 |
209 | execa@^5.0.0:
210 | version "5.1.1"
211 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
212 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
213 | dependencies:
214 | cross-spawn "^7.0.3"
215 | get-stream "^6.0.0"
216 | human-signals "^2.1.0"
217 | is-stream "^2.0.0"
218 | merge-stream "^2.0.0"
219 | npm-run-path "^4.0.1"
220 | onetime "^5.1.2"
221 | signal-exit "^3.0.3"
222 | strip-final-newline "^2.0.0"
223 |
224 | fill-range@^7.0.1:
225 | version "7.0.1"
226 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
227 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
228 | dependencies:
229 | to-regex-range "^5.0.1"
230 |
231 | get-own-enumerable-property-symbols@^3.0.0:
232 | version "3.0.2"
233 | resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
234 | integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
235 |
236 | get-stream@^6.0.0:
237 | version "6.0.1"
238 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
239 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
240 |
241 | has-flag@^3.0.0:
242 | version "3.0.0"
243 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
244 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
245 |
246 | has-flag@^4.0.0:
247 | version "4.0.0"
248 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
249 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
250 |
251 | human-signals@^2.1.0:
252 | version "2.1.0"
253 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
254 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
255 |
256 | husky@>=6:
257 | version "7.0.1"
258 | resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.1.tgz#579f4180b5da4520263e8713cc832942b48e1f1c"
259 | integrity sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==
260 |
261 | import-fresh@^3.2.1:
262 | version "3.3.0"
263 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
264 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
265 | dependencies:
266 | parent-module "^1.0.0"
267 | resolve-from "^4.0.0"
268 |
269 | indent-string@^4.0.0:
270 | version "4.0.0"
271 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
272 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
273 |
274 | is-arrayish@^0.2.1:
275 | version "0.2.1"
276 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
277 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
278 |
279 | is-fullwidth-code-point@^3.0.0:
280 | version "3.0.0"
281 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
282 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
283 |
284 | is-number@^7.0.0:
285 | version "7.0.0"
286 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
287 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
288 |
289 | is-obj@^1.0.1:
290 | version "1.0.1"
291 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
292 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
293 |
294 | is-regexp@^1.0.0:
295 | version "1.0.0"
296 | resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
297 | integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
298 |
299 | is-stream@^2.0.0:
300 | version "2.0.1"
301 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
302 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
303 |
304 | is-unicode-supported@^0.1.0:
305 | version "0.1.0"
306 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
307 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
308 |
309 | isexe@^2.0.0:
310 | version "2.0.0"
311 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
312 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
313 |
314 | js-tokens@^4.0.0:
315 | version "4.0.0"
316 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
317 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
318 |
319 | json-parse-even-better-errors@^2.3.0:
320 | version "2.3.1"
321 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
322 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
323 |
324 | lines-and-columns@^1.1.6:
325 | version "1.1.6"
326 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
327 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
328 |
329 | lint-staged@>=10:
330 | version "11.1.2"
331 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.1.2.tgz#4dd78782ae43ee6ebf2969cad9af67a46b33cd90"
332 | integrity sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==
333 | dependencies:
334 | chalk "^4.1.1"
335 | cli-truncate "^2.1.0"
336 | commander "^7.2.0"
337 | cosmiconfig "^7.0.0"
338 | debug "^4.3.1"
339 | enquirer "^2.3.6"
340 | execa "^5.0.0"
341 | listr2 "^3.8.2"
342 | log-symbols "^4.1.0"
343 | micromatch "^4.0.4"
344 | normalize-path "^3.0.0"
345 | please-upgrade-node "^3.2.0"
346 | string-argv "0.3.1"
347 | stringify-object "^3.3.0"
348 |
349 | listr2@^3.8.2:
350 | version "3.11.0"
351 | resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.11.0.tgz#9771b02407875aa78e73d6e0ff6541bbec0aaee9"
352 | integrity sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ==
353 | dependencies:
354 | cli-truncate "^2.1.0"
355 | colorette "^1.2.2"
356 | log-update "^4.0.0"
357 | p-map "^4.0.0"
358 | rxjs "^6.6.7"
359 | through "^2.3.8"
360 | wrap-ansi "^7.0.0"
361 |
362 | log-symbols@^4.1.0:
363 | version "4.1.0"
364 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
365 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
366 | dependencies:
367 | chalk "^4.1.0"
368 | is-unicode-supported "^0.1.0"
369 |
370 | log-update@^4.0.0:
371 | version "4.0.0"
372 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
373 | integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
374 | dependencies:
375 | ansi-escapes "^4.3.0"
376 | cli-cursor "^3.1.0"
377 | slice-ansi "^4.0.0"
378 | wrap-ansi "^6.2.0"
379 |
380 | merge-stream@^2.0.0:
381 | version "2.0.0"
382 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
383 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
384 |
385 | micromatch@^4.0.4:
386 | version "4.0.4"
387 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
388 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
389 | dependencies:
390 | braces "^3.0.1"
391 | picomatch "^2.2.3"
392 |
393 | mimic-fn@^2.1.0:
394 | version "2.1.0"
395 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
396 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
397 |
398 | ms@2.1.2:
399 | version "2.1.2"
400 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
401 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
402 |
403 | normalize-path@^3.0.0:
404 | version "3.0.0"
405 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
406 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
407 |
408 | npm-run-path@^4.0.1:
409 | version "4.0.1"
410 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
411 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
412 | dependencies:
413 | path-key "^3.0.0"
414 |
415 | onetime@^5.1.0, onetime@^5.1.2:
416 | version "5.1.2"
417 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
418 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
419 | dependencies:
420 | mimic-fn "^2.1.0"
421 |
422 | p-map@^4.0.0:
423 | version "4.0.0"
424 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
425 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
426 | dependencies:
427 | aggregate-error "^3.0.0"
428 |
429 | parent-module@^1.0.0:
430 | version "1.0.1"
431 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
432 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
433 | dependencies:
434 | callsites "^3.0.0"
435 |
436 | parse-json@^5.0.0:
437 | version "5.2.0"
438 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
439 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
440 | dependencies:
441 | "@babel/code-frame" "^7.0.0"
442 | error-ex "^1.3.1"
443 | json-parse-even-better-errors "^2.3.0"
444 | lines-and-columns "^1.1.6"
445 |
446 | path-key@^3.0.0, path-key@^3.1.0:
447 | version "3.1.1"
448 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
449 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
450 |
451 | path-type@^4.0.0:
452 | version "4.0.0"
453 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
454 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
455 |
456 | picomatch@^2.2.3:
457 | version "2.3.0"
458 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
459 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
460 |
461 | please-upgrade-node@^3.2.0:
462 | version "3.2.0"
463 | resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
464 | integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
465 | dependencies:
466 | semver-compare "^1.0.0"
467 |
468 | prettier@^2.3.2:
469 | version "2.3.2"
470 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d"
471 | integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==
472 |
473 | resolve-from@^4.0.0:
474 | version "4.0.0"
475 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
476 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
477 |
478 | restore-cursor@^3.1.0:
479 | version "3.1.0"
480 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
481 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
482 | dependencies:
483 | onetime "^5.1.0"
484 | signal-exit "^3.0.2"
485 |
486 | rxjs@^6.6.7:
487 | version "6.6.7"
488 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
489 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
490 | dependencies:
491 | tslib "^1.9.0"
492 |
493 | semver-compare@^1.0.0:
494 | version "1.0.0"
495 | resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
496 | integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
497 |
498 | shebang-command@^2.0.0:
499 | version "2.0.0"
500 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
501 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
502 | dependencies:
503 | shebang-regex "^3.0.0"
504 |
505 | shebang-regex@^3.0.0:
506 | version "3.0.0"
507 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
508 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
509 |
510 | signal-exit@^3.0.2, signal-exit@^3.0.3:
511 | version "3.0.3"
512 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
513 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
514 |
515 | slice-ansi@^3.0.0:
516 | version "3.0.0"
517 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
518 | integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
519 | dependencies:
520 | ansi-styles "^4.0.0"
521 | astral-regex "^2.0.0"
522 | is-fullwidth-code-point "^3.0.0"
523 |
524 | slice-ansi@^4.0.0:
525 | version "4.0.0"
526 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
527 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
528 | dependencies:
529 | ansi-styles "^4.0.0"
530 | astral-regex "^2.0.0"
531 | is-fullwidth-code-point "^3.0.0"
532 |
533 | string-argv@0.3.1:
534 | version "0.3.1"
535 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
536 | integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
537 |
538 | string-width@^4.1.0, string-width@^4.2.0:
539 | version "4.2.2"
540 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
541 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
542 | dependencies:
543 | emoji-regex "^8.0.0"
544 | is-fullwidth-code-point "^3.0.0"
545 | strip-ansi "^6.0.0"
546 |
547 | stringify-object@^3.3.0:
548 | version "3.3.0"
549 | resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
550 | integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
551 | dependencies:
552 | get-own-enumerable-property-symbols "^3.0.0"
553 | is-obj "^1.0.1"
554 | is-regexp "^1.0.0"
555 |
556 | strip-ansi@^6.0.0:
557 | version "6.0.0"
558 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
559 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
560 | dependencies:
561 | ansi-regex "^5.0.0"
562 |
563 | strip-final-newline@^2.0.0:
564 | version "2.0.0"
565 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
566 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
567 |
568 | supports-color@^5.3.0:
569 | version "5.5.0"
570 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
571 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
572 | dependencies:
573 | has-flag "^3.0.0"
574 |
575 | supports-color@^7.1.0:
576 | version "7.2.0"
577 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
578 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
579 | dependencies:
580 | has-flag "^4.0.0"
581 |
582 | through@^2.3.8:
583 | version "2.3.8"
584 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
585 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
586 |
587 | to-regex-range@^5.0.1:
588 | version "5.0.1"
589 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
590 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
591 | dependencies:
592 | is-number "^7.0.0"
593 |
594 | tslib@^1.9.0:
595 | version "1.14.1"
596 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
597 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
598 |
599 | type-fest@^0.21.3:
600 | version "0.21.3"
601 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
602 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
603 |
604 | which@^2.0.1:
605 | version "2.0.2"
606 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
607 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
608 | dependencies:
609 | isexe "^2.0.0"
610 |
611 | wrap-ansi@^6.2.0:
612 | version "6.2.0"
613 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
614 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
615 | dependencies:
616 | ansi-styles "^4.0.0"
617 | string-width "^4.1.0"
618 | strip-ansi "^6.0.0"
619 |
620 | wrap-ansi@^7.0.0:
621 | version "7.0.0"
622 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
623 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
624 | dependencies:
625 | ansi-styles "^4.0.0"
626 | string-width "^4.1.0"
627 | strip-ansi "^6.0.0"
628 |
629 | yaml@^1.10.0:
630 | version "1.10.2"
631 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
632 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
633 |
--------------------------------------------------------------------------------