diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 72ce590b..00000000 --- a/.dockerignore +++ /dev/null @@ -1,12 +0,0 @@ -Dockerfile -build -deployment -doc -.github -.gitignore -.node-version -.travis.yml -LICENSE -README.md -node_modules -release diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index de976600..00000000 --- a/.drone.yml +++ /dev/null @@ -1,331 +0,0 @@ -kind: pipeline -type: docker -name: amd64:linux - -platform: - arch: amd64 - -steps: -- name: cache:restore - image: codercom/nbin:centos - commands: - - yum install -y libxkbfile-devel libsecret-devel - - . /opt/rh/devtoolset-6/enable - - ./scripts/cacher.sh - -- name: lint - image: node:12 - commands: - - yarn lint - -- name: test - image: codercom/nbin:centos - commands: - - yum install -y openssl - - yarn test - -- name: build - image: codercom/nbin:centos - commands: - - yum install -y libxkbfile-devel libsecret-devel - - . /opt/rh/devtoolset-6/enable - - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run' - -- name: cache:package - image: node:12 - commands: - - ./scripts/cacher.sh - when: - event: push - -- name: cache:push - image: plugins/gcs - settings: - source: cache-upload/ - target: codesrv-ci.cdr.sh - token: - from_secret: gcs-token - when: - event: push - -- name: test:build - image: codercom/nbin:centos - commands: - - yarn test:build - -- name: publish:github - image: plugins/github-release - settings: - api_key: - from_secret: github_token - files: release/*.tar.gz - draft: true - overwrite: true - title: ${DRONE_TAG} - when: - event: tag - -- name: publish:docker - image: plugins/docker - settings: - username: - from_secret: docker_user - password: - from_secret: docker_pass - repo: codercom/code-server - dockerfile: scripts/ci.dockerfile - tags: - - ${DRONE_TAG} - when: - event: tag - -- name: publish:gcs - image: plugins/gcs - settings: - source: binary-upload - target: codesrv-ci.cdr.sh/ - token: - from_secret: gcs-token - when: - event: tag - ---- -kind: pipeline -type: docker -name: amd64:alpine - -platform: - arch: amd64 - -steps: -- name: cache:restore - image: node:12-alpine - commands: - - apk add libxkbfile-dev libsecret-dev build-base git bash python - - ./scripts/cacher.sh - -- name: lint - image: node:12-alpine - commands: - - yarn lint - -- name: test - image: node:12-alpine - commands: - - apk add openssl - - yarn test - -- name: build - image: node:12-alpine - commands: - - apk add libxkbfile-dev libsecret-dev build-base git bash python - - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run' - -- name: cache:package - image: node:12-alpine - commands: - - ./scripts/cacher.sh - when: - event: push - -- name: cache:push - image: plugins/gcs - settings: - source: cache-upload/ - target: codesrv-ci.cdr.sh - token: - from_secret: gcs-token - when: - event: push - -- name: test:build - image: node:12-alpine - commands: - - yarn test:build - -- name: publish:github - image: plugins/github-release - settings: - api_key: - from_secret: github_token - files: release/*.tar.gz - draft: true - overwrite: true - title: ${DRONE_TAG} - when: - event: tag - -- name: publish:gcs - image: plugins/gcs - settings: - source: binary-upload - target: codesrv-ci.cdr.sh/ - token: - from_secret: gcs-token - when: - event: tag - ---- -kind: pipeline -type: docker -name: arm64:linux - -platform: - arch: arm64 - -steps: -- name: cache:restore - image: node:12 - commands: - - apt update && apt install -y build-essential git libsecret-1-dev libx11-dev libxkbfile-dev - - ./scripts/cacher.sh - -- name: lint - image: node:12 - commands: - - yarn lint - -- name: test - image: node:12 - commands: - - yarn test - -- name: build - image: node:12 - commands: - - apt update && apt install -y build-essential git libsecret-1-dev libx11-dev libxkbfile-dev - - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run' - -- name: cache:package - image: node:12 - commands: - - ./scripts/cacher.sh - when: - event: push - -- name: cache:push - image: plugins/gcs - settings: - source: cache-upload/ - target: codesrv-ci.cdr.sh - token: - from_secret: gcs-token - when: - event: push - -- name: test:build - image: node:12 - commands: - - yarn test:build - -- name: publish:github - image: plugins/github-release - settings: - api_key: - from_secret: github_token - files: release/*.tar.gz - draft: true - overwrite: true - title: ${DRONE_TAG} - when: - event: tag - -- name: publish:docker - image: plugins/docker - settings: - username: - from_secret: docker_user - password: - from_secret: docker_pass - repo: codercom/code-server - dockerfile: scripts/ci.dockerfile - tags: - - ${DRONE_TAG}-arm64 - when: - event: tag - -- name: publish:gcs - image: plugins/gcs - settings: - source: binary-upload - target: codesrv-ci.cdr.sh/ - token: - from_secret: gcs-token - when: - event: tag - ---- -kind: pipeline -type: docker -name: arm64:alpine - -platform: - arch: arm64 - -steps: -- name: cache:restore - image: node:12-alpine - commands: - - apk add libxkbfile-dev libsecret-dev build-base git bash python - - ./scripts/cacher.sh - -- name: lint - image: node:12-alpine - commands: - - yarn lint - -- name: test - image: node:12-alpine - commands: - - apk add openssl - - yarn test - -- name: build - image: node:12-alpine - commands: - - apk add libxkbfile-dev libsecret-dev build-base git bash python - - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run' - -- name: cache:package - image: node:12-alpine - commands: - - ./scripts/cacher.sh - when: - event: push - -- name: cache:push - image: plugins/gcs - settings: - source: cache-upload/ - target: codesrv-ci.cdr.sh - token: - from_secret: gcs-token - when: - event: push - -- name: test:build - image: node:12-alpine - commands: - - yarn test:build - -- name: publish:github - image: plugins/github-release - settings: - api_key: - from_secret: github_token - files: release/*.tar.gz - draft: true - overwrite: true - title: ${DRONE_TAG} - when: - event: tag - -- name: publish:gcs - image: plugins/gcs - settings: - source: binary-upload - target: codesrv-ci.cdr.sh/ - token: - from_secret: gcs-token - when: - event: tag diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 65705d95..00000000 --- a/.editorconfig +++ /dev/null @@ -1,6 +0,0 @@ -root = true - -[*] -indent_style = space -trim_trailing_whitespace = true -indent_size = 2 diff --git a/.eslintrc.yaml b/.eslintrc.yaml index fbb9ac0e..58112a67 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -1,7 +1,7 @@ parser: "@typescript-eslint/parser" env: browser: true - es6: true # Map, etc. + es6: true # Map, etc. mocha: true node: true diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 11fee14e..c68d7da5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1 @@ -* @code-asher @kylecarbs -Dockerfile @nhooyr +* @code-asher @nhooyr diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 50e90f1f..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Bug Report -about: Report problems and unexpected behavior. -title: '' -labels: 'bug' -assignees: '' ---- - - - - -- `code-server` version: -- OS Version: - -## Description - - - -## Steps to Reproduce - -1. -1. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/extension_bug.md b/.github/ISSUE_TEMPLATE/extension_bug.md deleted file mode 100644 index 7c30b947..00000000 --- a/.github/ISSUE_TEMPLATE/extension_bug.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Extension Bug -about: Report problems and unexpected behavior with extensions. -title: '' -labels: 'extension-specific' -assignees: '' ---- - - - -- `code-server` version: -- OS Version: -- Extension: - -## Description - - - -## Steps to Reproduce - -1. -1. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index b33f67bc..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Feature Request -about: Suggest an idea for this project. -title: '' -labels: 'feature' -assignees: '' ---- - - - - \ No newline at end of file diff --git a/.github/issue_template.md b/.github/issue_template.md new file mode 100644 index 00000000..eaafce94 --- /dev/null +++ b/.github/issue_template.md @@ -0,0 +1,4 @@ + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e056fdf5..6e29ad1b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,6 +1,4 @@ - - -### Describe in detail the problem you had and how this PR fixes it - -### Is there an open issue you can link to? - + diff --git a/.gitignore b/.gitignore index 69c3c58f..fc190e5f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,8 @@ *.tsbuildinfo .cache -binaries -*-upload build dist* -node_modules out* release -source -yarn-cache +node_modules +binaries diff --git a/.node-version b/.node-version deleted file mode 100644 index 65d83ce5..00000000 --- a/.node-version +++ /dev/null @@ -1 +0,0 @@ -12.14.0 diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 5fca0d51..00000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -scripts-prepend-node-path=true diff --git a/.prettierrc.yaml b/.prettierrc.yaml index aaaa29c7..a0634116 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -1,7 +1,4 @@ printWidth: 120 semi: false -tabWidth: 2 -singleQuote: false -trailingComma: es5 -useTabs: false +trailingComma: all arrowParens: always diff --git a/.travis.yml b/.travis.yml index d417dcc5..603b00a2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,37 +1,52 @@ -language: node_js -node_js: - - 12.14.0 -services: - - docker +language: minimal jobs: include: - - name: "MacOS build" - os: osx - script: travis_wait 60 scripts/ci.bash + - stage: Code + name: Format + script: ./ci/image/run.sh "yarn && yarn vscode && yarn fmt" + - name: Lint + script: ./ci/image/run.sh "yarn && yarn vscode && yarn lint" + - name: Test + script: ./ci/image/run.sh "yarn && yarn vscode && yarn test" -git: - depth: 3 + - stage: Release + name: Linux Release + script: + - travis_wait 60 ./ci/image/run.sh "yarn && yarn vscode && ci/release.sh" + - ./ci/release-image/push.sh + - name: Linux ARM64 Release + script: + - travis_wait 60 ./ci/image/run.sh "yarn && yarn vscode && ci/release.sh" + - ./ci/release-image/push.sh + arch: arm64 + - name: MacOS Release + os: osx + language: node_js + node_js: 12 + script: yarn && yarn vscode && travis_wait 60 ci/release.sh + - name: Docker Release + script: ./ci/release-image/push.sh + +stages: + - name: Code + - name: Release + if: env(TRAVIS_TAG) IS present deploy: - provider: releases - file_glob: true + edge: true draft: true - tag_name: "$TRAVIS_TAG" - target_commitish: "$TRAVIS_COMMIT" - name: "$TRAVIS_TAG" - skip_cleanup: true - api_key: - secure: YL/x24KjYjgYXPcJWk3FV7FGxI79Mh6gBECQEcdlf3fkLEoKFVgzHBoUNWrFPzyR4tgLyWNAgcpD9Lkme1TRWTom7UPjXcwMNyLcLa+uec7ciSAnYD9ntLTpiCuPDD1u0LtRGclSi/EHQ+F8YVq+HZJpXTsJeAmOmihma3GVbGKSZr+BRum+0YZSG4w+o4TOlYzw/4bLWS52MogZcwpjd+hemBbgXLuGU2ziKv2vEKCZFbEeA16II4x1WLI4mutDdCeh7+3aLzGLwDa49NxtsVYNjyNFF75JhCTCNA55e2YMiLz9Uq69IXe/mi5F7xUaFfhIqqLNyKBnKeEOzu3dYnc+8n3LjnQ+00PmkF05nx9kBn3UfV1kwQGh6QbyDmTtBP07rtUMyI14aeQqHjxsaVRdMnwj9Q2DjXRr8UDqESZF0rmK3pHCXS2fBhIzLE8tLVW5Heiba2pQRFMHMZW+KBE97FzcFh7is90Ait3T8enfcd/PWFPYoBejDAdjwxwOkezh5N5ZkYquEfDYuWrFi6zRFCktsruaAcA+xGtTf9oilBBzUqu8Ie+YFWH5me83xakcblJWdaW/D2rLJAJH3m6LFm8lBqyUgDX5t/etob6CpDuYHu5D1J3XINOj/+aLAcadq6qlh70PMZS3zYffUu3JlzaD2amlSHIT8b5YXFc= + tag_name: $TRAVIS_TAG + target_commitish: $TRAVIS_COMMIT + name: $TRAVIS_TAG file: - release/*.tar.gz - release/*.zip on: - repo: cdr/code-server tags: true + condition: $TRAVIS_BUILD_STAGE_NAME == Release cache: - timeout: 1000 + timeout: 600 yarn: true - directories: - - source diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 08005dbc..00000000 --- a/Dockerfile +++ /dev/null @@ -1,57 +0,0 @@ -FROM node:12.14.0 -ARG tag -ARG githubToken - -# Install VS Code's deps. These are the only two it seems we need. -RUN apt-get update && apt-get install -y \ - libxkbfile-dev \ - libsecret-1-dev - -WORKDIR /src -COPY . . - -RUN yarn \ - && DRONE_TAG="$tag" MINIFY=true STRIP_BIN_TARGET=true GITHUB_TOKEN="$githubToken" ./scripts/ci.bash \ - && rm -r /src/build \ - && rm -r /src/source - -# We deploy with Ubuntu so that devs have a familiar environment. -FROM ubuntu:18.04 - -RUN apt-get update && apt-get install -y \ - openssl \ - net-tools \ - git \ - locales \ - sudo \ - dumb-init \ - vim \ - curl \ - wget \ - && rm -rf /var/lib/apt/lists/* - -RUN locale-gen en_US.UTF-8 -# We cannot use update-locale because docker will not use the env variables -# configured in /etc/default/locale so we need to set it manually. -ENV LC_ALL=en_US.UTF-8 \ - SHELL=/bin/bash - -RUN adduser --gecos '' --disabled-password coder && \ - echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd - -USER coder -# Create first so these directories will be owned by coder instead of root -# (workdir and mounting appear to both default to root). -RUN mkdir -p /home/coder/project -RUN mkdir -p /home/coder/.local/share/code-server - -WORKDIR /home/coder/project - -# This ensures we have a volume mounted even if the user forgot to do bind -# mount. So that they do not lose their data if they delete the container. -VOLUME [ "/home/coder/project" ] - -COPY --from=0 /src/binaries/code-server /usr/local/bin/code-server -EXPOSE 8080 - -ENTRYPOINT ["dumb-init", "code-server", "--host", "0.0.0.0"] diff --git a/LICENSE b/LICENSE.txt similarity index 100% rename from LICENSE rename to LICENSE.txt diff --git a/README.md b/README.md index b2a396a5..1abcd938 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ reset VS Code then run `yarn patch:apply`. ## Security ### Authentication + By default `code-server` enables password authentication using a randomly generated password. You can set the `PASSWORD` environment variable to use your own instead or use `--auth none` to disable password authentication. @@ -82,6 +83,7 @@ Do not expose `code-server` to the open internet without some form of authentication. ### Encrypting traffic with HTTPS + If you aren't doing SSL termination elsewhere you can directly give `code-server` a certificate with `code-server --cert` followed by the path to your certificate. Additionally, you can use certificate keys with `--cert-key` diff --git a/scripts/build.ts b/ci/build.ts similarity index 98% rename from scripts/build.ts rename to ci/build.ts index 937dc8cb..f5cbbd68 100644 --- a/scripts/build.ts +++ b/ci/build.ts @@ -26,7 +26,7 @@ class Builder { this.ensureArgument("rootPath", this.rootPath) this.codeServerVersion = this.ensureArgument( "codeServerVersion", - process.env.VERSION || require(path.join(this.rootPath, "package.json")).version + process.env.VERSION || require(path.join(this.rootPath, "package.json")).version, ) } @@ -208,7 +208,7 @@ class Builder { await Promise.all([ fs.move( path.join(this.vscodeSourcePath, `out-vscode${process.env.MINIFY ? "-min" : ""}`), - path.join(vscodeBuildPath, "out") + path.join(vscodeBuildPath, "out"), ), fs.copy(path.join(this.vscodeSourcePath, ".build/extensions"), path.join(vscodeBuildPath, "extensions")), ]) @@ -225,7 +225,7 @@ class Builder { return Promise.all( ["node_modules", "package.json", "yarn.lock"].map((fileName) => { return fs.copy(path.join(sourcePath, fileName), path.join(buildPath, fileName)) - }) + }), ) }) @@ -240,17 +240,14 @@ class Builder { ...merge, }, null, - 2 - ) + 2, + ), ) }) if (process.env.MINIFY) { await this.task(`restricting ${name} to production dependencies`, async () => { await util.promisify(cp.exec)("yarn --production --ignore-scripts", { cwd: buildPath }) - if (name === "code-server") { - await util.promisify(cp.exec)("yarn postinstall", { cwd: buildPath }) - } }) } } @@ -290,7 +287,7 @@ class Builder { await fs.copyFile(path.join(this.vscodeSourcePath, "LICENSE.txt"), path.join(archivePath, "LICENSE.txt")) await fs.copyFile( path.join(this.vscodeSourcePath, "ThirdPartyNotices.txt"), - path.join(archivePath, "ThirdPartyNotices.txt") + path.join(archivePath, "ThirdPartyNotices.txt"), ) if ((await this.target()) === "darwin") { diff --git a/ci/clean.sh b/ci/clean.sh new file mode 100755 index 00000000..92637b5a --- /dev/null +++ b/ci/clean.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -euo pipefail + +main() { + git clean -xffd + git submodule foreach --recursive git clean -xffd + git submodule foreach --recursive git reset --hard +} + +main "$@" diff --git a/ci/fmt.sh b/ci/fmt.sh new file mode 100755 index 00000000..722395bc --- /dev/null +++ b/ci/fmt.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +set -euo pipefail + +main() { + shfmt -i 2 -w -s -sr $(git ls-files "*.sh") + + local prettierExts + prettierExts=( + "*.js" + "*.ts" + "*.tsx" + "*.html" + "*.json" + "*.css" + "*.md" + "*.toml" + "*.yaml" + "*.yml" + ) + prettier --write --loglevel=warn $(git ls-files "${prettierExts[@]}") + + if [[ ${CI-} && $(git ls-files --other --modified --exclude-standard) ]]; then + echo "Files need generation or are formatted incorrectly:" + git -c color.ui=always status | grep --color=no '\[31m' + echo "Please run the following locally:" + echo " yarn fmt" + exit 1 + fi +} + +main "$@" diff --git a/ci/image/Dockerfile b/ci/image/Dockerfile new file mode 100644 index 00000000..29496fc5 --- /dev/null +++ b/ci/image/Dockerfile @@ -0,0 +1,10 @@ +FROM node:12 + +RUN apt-get update && apt-get install -y \ + libxkbfile-dev \ + libx11-dev \ + libsecret-1-dev + +RUN curl -L https://github.com/mvdan/sh/releases/download/v3.0.1/shfmt_v3.0.1_linux_amd64 > /usr/local/bin/shfmt && chmod +x /usr/local/bin/shfmt + +ENTRYPOINT ["/bin/bash", "-c"] diff --git a/ci/image/run.sh b/ci/image/run.sh new file mode 100755 index 00000000..6dd3f261 --- /dev/null +++ b/ci/image/run.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -euo pipefail + +main() { + cd "$(dirname "$0")/../.." + + docker build ci/image + imageTag="$(docker build -q ci/image)" + docker run -t --rm -e CI -e GITHUB_TOKEN -v "$(yarn cache dir):/usr/local/share/.cache/yarn/v6" -v "$PWD:/repo" -w /repo "$imageTag" "$*" +} + +main "$@" diff --git a/ci/lint.sh b/ci/lint.sh new file mode 100755 index 00000000..e218d516 --- /dev/null +++ b/ci/lint.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -euo pipefail + +main() { + eslint --max-warnings=0 --fix $(git ls-files "*.ts" "*.tsx" "*.js") + stylelint --fix $(git ls-files "*.css") + tsc --noEmit +} + +main "$@" diff --git a/ci/release-image/Dockerfile b/ci/release-image/Dockerfile new file mode 100644 index 00000000..95d75587 --- /dev/null +++ b/ci/release-image/Dockerfile @@ -0,0 +1,36 @@ +FROM debian:10 + +RUN apt-get update +RUN apt-get install -y curl + +COPY release/code-server*.tar.gz /tmp +RUN cd /tmp && tar -xzf code-server*.tar.gz && \ + cp code-server*/code-server /usr/local/bin/code-server +RUN rm -rf /tmp/* + +# https://wiki.debian.org/Locale#Manually +RUN apt-get install -y locales +RUN sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen +RUN locale-gen +ENV LANG=en_US.UTF-8 + +RUN chsh -s /bin/bash +ENV SHELL=/bin/bash + +RUN apt-get install -y dumb-init sudo +RUN apt-get install -y man procps vim nano htop ssh git + +RUN adduser --gecos '' --disabled-password coder && \ + echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd + +RUN curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.4/fixuid-0.4-linux-amd64.tar.gz | tar -C /usr/local/bin -xzf - && \ + chown root:root /usr/local/bin/fixuid && \ + chmod 4755 /usr/local/bin/fixuid && \ + mkdir -p /etc/fixuid && \ + printf "user: coder\ngroup: coder\n" > /etc/fixuid/config.yml + +RUN rm -rf /var/lib/apt/lists/* +EXPOSE 8080 +USER coder +WORKDIR /home/coder +ENTRYPOINT ["dumb-init", "fixuid", "-q", "code-server", "--host", "0.0.0.0"] diff --git a/ci/release-image/push.sh b/ci/release-image/push.sh new file mode 100755 index 00000000..88924612 --- /dev/null +++ b/ci/release-image/push.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -euo pipefail + +main() { + cd "$(dirname "$0")/../.." + + if [[ ${CI:-} ]]; then + echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + fi + + imageTag="codercom/code-server:$VERSION" + latest="codercom/code-server:latest" + if [[ $TRAVIS_CPU_ARCH == "arm64" ]]; then + imageTag+="-arm64" + latest="codercom/code-server:arm64" + fi + docker build -t "$imageTag" -t "$latest" -f ./ci/release-image/Dockerfile + docker push codercom/code-server +} + +main "$@" diff --git a/scripts/ci.bash b/ci/release.sh similarity index 66% rename from scripts/ci.bash rename to ci/release.sh index c288a10a..152e8861 100755 --- a/scripts/ci.bash +++ b/ci/release.sh @@ -7,43 +7,40 @@ set -euo pipefail function main() { cd "$(dirname "${0}")/.." - local code_server_version=${VERSION:-${TRAVIS_TAG:-${DRONE_TAG:-}}} - if [[ -z $code_server_version ]] ; then + local code_server_version=${VERSION:-${TRAVIS_TAG:-}} + if [[ -z $code_server_version ]]; then code_server_version=$(grep version ./package.json | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[:space:]') fi export VERSION=$code_server_version - YARN_CACHE_FOLDER="$(pwd)/yarn-cache" - export YARN_CACHE_FOLDER - - # Always minify and package on tags since that's when releases are pushed. - if [[ -n ${DRONE_TAG:-} || -n ${TRAVIS_TAG:-} ]] ; then + # Always minify and package on CI since that's when releases are pushed. + if [[ ${CI:-} ]]; then export MINIFY="true" export PACKAGE="true" fi yarn build yarn binary - if [[ -n ${PACKAGE:-} ]] ; then + if [[ -n ${PACKAGE:-} ]]; then yarn package fi cd binaries - if [[ -n ${STRIP_BIN_TARGET:-} ]] ; then + if [[ -n ${STRIP_BIN_TARGET:-} ]]; then # In this case provide plainly named binaries. - for binary in code-server* ; do + for binary in code-server*; do echo "Moving $binary to code-server" mv "$binary" code-server done - elif [[ -n ${DRONE_TAG:-} || -n ${TRAVIS_TAG:-} ]] ; then + elif [[ -n ${DRONE_TAG:-} || -n ${TRAVIS_TAG:-} ]]; then # Prepare directory for uploading binaries on release. - for binary in code-server* ; do + for binary in code-server*; do mkdir -p "../binary-upload" local prefix="code-server-$code_server_version-" local target="${binary#$prefix}" - if [[ $target == "linux-x86_64" ]] ; then + if [[ $target == "linux-x86_64" ]]; then echo "Copying $binary to ../binary-upload/latest-linux" cp "$binary" "../binary-upload/latest-linux" fi diff --git a/ci/tsconfig.json b/ci/tsconfig.json new file mode 100644 index 00000000..5197ce27 --- /dev/null +++ b/ci/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig.json", + "include": ["./**/*.ts"] +} diff --git a/scripts/vscode.patch b/ci/vscode.patch similarity index 100% rename from scripts/vscode.patch rename to ci/vscode.patch diff --git a/ci/vscode.sh b/ci/vscode.sh new file mode 100755 index 00000000..ffacd812 --- /dev/null +++ b/ci/vscode.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail + +# 1. Ensures VS Code is cloned. +# 2. Patches it. +# 3. Installs it. +main() { + cd "$(dirname "$0")/.." + + git submodule update --init + + # If the patch fails to apply, then it's likely already applied + yarn vscode:patch &> /dev/null || true + + # Install VS Code dependencies. + (cd lib/vscode && yarn) +} + +main "$@" diff --git a/doc/assets/cros.png b/doc/assets/cros.png deleted file mode 100644 index 64d94c23..00000000 Binary files a/doc/assets/cros.png and /dev/null differ diff --git a/doc/assets/droplet.svg b/doc/assets/droplet.svg deleted file mode 100644 index ecbb3f24..00000000 --- a/doc/assets/droplet.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - do-btn-blue-ghost - Created with Sketch. - - - - - - - - - - - - - - Create a Droplet - - - - - diff --git a/doc/assets/ide.gif b/doc/assets/ide.gif deleted file mode 100644 index c8183c1e..00000000 Binary files a/doc/assets/ide.gif and /dev/null differ diff --git a/doc/assets/release.gif b/doc/assets/release.gif deleted file mode 100644 index b8ad4997..00000000 Binary files a/doc/assets/release.gif and /dev/null differ diff --git a/doc/cros-install.md b/doc/cros-install.md deleted file mode 100644 index 0c12b6db..00000000 --- a/doc/cros-install.md +++ /dev/null @@ -1,75 +0,0 @@ -# Installing code-server in your ChromiumOS/ChromeOS/CloudReady machine - -This guide will show you how to install code-server into your CrOS machine. - -## Using Crostini - -One of the easier ways to run code-server is via -[Crostini](https://www.aboutchromebooks.com/tag/project-crostini/), the Linux -apps support feature in CrOS. Make sure you have enough RAM, HDD space and your -CPU has VT-x/ AMD-V support. If your chromebook has this, then you are -qualified to use Crostini. - -If you are running R69, you might want to enable this on -[Chrome Flags](chrome://flags/#enable-experimental-crostini-ui). -If you run R72, however, this is already enabled for you. - -After checking your prerequisites, follow the steps in [the self-host install guide](index.md) -on installing code-server. Once done, make sure code-server works by running -it. After running it, simply go to `penguin.linux.test:8080` to access -code-server. Now you should be greeted with this screen. If you did, -congratulations, you have installed code-server in your Chromebook! - -![code-server on Chromebook](assets/cros.png) - -Alternatively, if you ran code-server in another container and you need the IP -for that specific container, simply go to Termina's shell via `crosh` and type -`vsh termina`. - -```bash -Loading extra module: /usr/share/crosh/dev.d/50-crosh.sh -Welcome to crosh, the Chrome OS developer shell. - -If you got here by mistake, don't panic! Just close this tab and carry on. - -Type 'help' for a list of commands. - -If you want to customize the look/behavior, you can use the options page. -Load it by using the Ctrl+Shift+P keyboard shortcut. - -crosh> vsh termina -(termina) chronos@localhost ~ $ -``` -While in termina, run `lxc list`. It should output the list of running containers. - -```bash -(termina) chronos@localhost ~ $ lxc list -+---------|---------|-----------------------|------|------------|-----------+ -| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | -+---------|---------|-----------------------|------|------------|-----------+ -| penguin | RUNNING | 100.115.92.199 (eth0) | | PERSISTENT | 0 | -+---------|---------|-----------------------|------|------------|-----------+ -(termina) chronos@localhost ~ $ -``` - -For this example, we show the default `penguin` container, which is exposed on -`eth0` at 100.115.92.199. Simply enter the IP of the container where the -code-server runs to Chrome. - -## Using Crouton - -[Crouton](https://github.com/dnschneid/crouton) is one of the old ways to get a -running full Linux via `chroot` on a Chromebook. To use crouton, enable -developer mode and go to `crosh`. This time, run `shell`, which should drop you -to `bash`. - -Make sure you downloaded `crouton`, if so, go ahead and run it under -`~/Downloads`. After installing your chroot container via crouton, go ahead and -enter `enter-chroot` to enter your container. - -Follow the instructions set in [the self-host install guide](index.md) to -install code-server. After that is done, run `code-server` and verify it works -by going to `localhost:8080`. - -> At this point in writing, `localhost` seems to work in this method. However, -> the author is not sure if it applies still to newer Chromebooks. diff --git a/doc/deploy.md b/doc/deploy.md deleted file mode 100644 index f2505e50..00000000 --- a/doc/deploy.md +++ /dev/null @@ -1,73 +0,0 @@ -# Set up instance -## EC2 on AWS -- Click **Launch Instance** from your [EC2 dashboard](https://console.aws.amazon.com/ec2/v2/home). -- Select the Ubuntu Server 18.04 LTS (HVM), SSD Volume Type -- Select an appropriate instance size (we recommend t2.medium/large, depending - on team size and number of repositories/languages enabled), then - **Next: Configure Instance Details**. -- Select **Next: ...** until you get to the **Configure Security Group** page, - then add a **Custom TCP Rule** rule with port range set to `8080` and source - set to "Anywhere". - > Rules with source of 0.0.0.0/0 allow all IP addresses to access your - > instance. We recommend setting [security group rules](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html?icmpid=docs_ec2_console) - > to allow access from known IP addresses only. -- Click **Launch**. -- You will be prompted to create a key pair. -- From the dropdown choose "create a new pair", give the key pair a name. -- Click **Download Key Pair** and store the file in a safe place. -- Click **Launch Instances**. -- Head to your [EC2 dashboard](https://console.aws.amazon.com/ec2/v2/home) - and choose instances from the left panel. -- In the description of your EC2 instance copy the public DNS (iPv4) address - using the copy to clipboard button. -- Open a terminal on your computer and SSH into your instance: - ``` - ssh -i ${path to key pair} ubuntu@${public address} - ``` - -## DigitalOcean -[Open your DigitalOcean dashboard](https://cloud.digitalocean.com/droplets/new) -to create a new droplet - -- **Choose an image -** Select the **Distributions** tab and then choose Ubuntu. -- **Choose a size -** We recommend at least 4GB RAM and 2 CPU, more depending - on team size and number of repositories/languages enabled. -- Launch your instance. -- Open a terminal on your computer and SSH into your instance: - ``` - ssh root@${instance ip} - ``` - -## Google Cloud -> Pre-requisite: Set up the [Google Cloud SDK](https://cloud.google.com/sdk/docs/) -> on your local machine - -- [Open your Google Cloud console](https://console.cloud.google.com/compute/instances) - to create a new VM instance and click **Create Instance**. -- Choose an appropriate machine type (we recommend 2 vCPU and 7.5 GB RAM, more - depending on team size and number of repositories/languages enabled). -- Choose Ubuntu 16.04 LTS as your boot disk. -- Expand the "Management, security, disks, networking, sole tenancy" section, - go to the "Networking" tab, then under network tags add "code-server". -- Create your VM, and **take note** of its public IP address. -- Visit "VPC network" in the console and go to "Firewall rules". Create a new - firewall rule called "http-8080". Under "Target tags" add "code-server", and - under "Protocols and ports" tick "Specified protocols and ports" and "tcp". - Beside "tcp", add "8080", then create the rule. -- Open a terminal on your computer and SSH into your Google Cloud VM: - ``` - gcloud compute ssh --zone ${region} ${instance name} - ``` -# Run code-server -- Download the latest code-server release from the - [releases page](https://github.com/cdr/code-server/releases/latest) - to the instance, extract the file, then run the code-server binary: - ``` - wget https://github.com/cdr/code-server/releases/download/{version}/code-server{version}-linux-x64.tar.gz - tar -xvzf code-server{version}-linux-x64.tar.gz - cd code-server{version}-linux-x64 - ./code-server - ``` -- Open your browser and visit http://$public_ip:8080/ where `$public_ip` is - your instance's public IP address. -- For long-term use, set up a systemd service to run code-server. diff --git a/doc/examples/fail2ban.conf b/doc/examples/fail2ban.conf deleted file mode 100644 index 7968ce0b..00000000 --- a/doc/examples/fail2ban.conf +++ /dev/null @@ -1,15 +0,0 @@ -# Fail2Ban filter for code-server - -[Definition] - -failregex = ^Failed login attempt\s+{\"remoteAddress\":\"\" - -# Use this instead for proxies (ensure the proxy is configured to send the -# X-Forwarded-For header). -# failregex = ^Failed login attempt\s+{\"xForwardedFor\":\"\" - -ignoreregex = - -datepattern = "timestamp":{EPOCH}}$ - -# Author: Dean Sheather diff --git a/doc/examples/kubernetes.aws.yaml b/doc/examples/kubernetes.aws.yaml deleted file mode 100644 index 079da4b4..00000000 --- a/doc/examples/kubernetes.aws.yaml +++ /dev/null @@ -1,73 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: code-server ---- -apiVersion: v1 -kind: Service -metadata: - name: code-server - namespace: code-server -spec: - ports: - - port: 8080 - name: https - protocol: TCP - selector: - app: code-server - type: ClusterIP ---- -kind: StorageClass -apiVersion: storage.k8s.io/v1 -metadata: - name: gp2 - annotations: - storageclass.kubernetes.io/is-default-class: "true" -provisioner: kubernetes.io/aws-ebs -parameters: - type: gp2 - fsType: ext4 ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: code-store - namespace: code-server -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 60Gi ---- -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - labels: - app: code-server - name: code-server - namespace: code-server -spec: - selector: - matchLabels: - app: code-server - replicas: 1 - template: - metadata: - labels: - app: code-server - spec: - containers: - - image: codercom/code-server:v2 - imagePullPolicy: Always - name: code-servery - ports: - - containerPort: 8080 - name: https - volumeMounts: - - name: code-server-storage - mountPath: /go/src - volumes: - - name: code-server-storage - persistentVolumeClaim: - claimName: code-store diff --git a/doc/examples/kubernetes.yaml b/doc/examples/kubernetes.yaml deleted file mode 100644 index 6259689d..00000000 --- a/doc/examples/kubernetes.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: code-server ---- -apiVersion: v1 -kind: Service -metadata: - name: code-server - namespace: code-server -spec: - ports: - - port: 8080 - name: https - protocol: TCP - selector: - app: code-server - type: ClusterIP ---- -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - labels: - app: code-server - name: code-server - namespace: code-server -spec: - selector: - matchLabels: - app: code-server - replicas: 1 - template: - metadata: - labels: - app: code-server - spec: - containers: - - image: codercom/code-server:v2 - imagePullPolicy: Always - name: code-server - ports: - - containerPort: 8080 - name: https diff --git a/doc/fail2ban.md b/doc/fail2ban.md deleted file mode 100644 index ce4b7179..00000000 --- a/doc/fail2ban.md +++ /dev/null @@ -1,35 +0,0 @@ -# Protecting code-server from bruteforce attempts -code-server outputs all failed login attempts, along with the IP address, -provided password, user agent and timestamp by default. - -When using a reverse proxy such as Nginx or Apache, the remote address may -appear to be `127.0.0.1` or a similar address so `X-Forwarded-For` should be -used instead. Ensure that you are setting this value in your reverse proxy: - -Nginx: -``` -location / { - ... - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - ... -} -``` - -Apache: -``` - - ... - SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded - ... - -``` - -It is extremely important that you ensure that your code-server instance is not -accessible from the internet (use localhost or block it in your firewall). - -## Fail2Ban -Fail2Ban allows for automatically banning and logging repeated failed -authentication attempts for many applications through regex filters. A working -filter for code-server can be found in `./examples/fail2ban.conf`. Once this -is installed and configured correctly, repeated failed login attempts should -automatically be banned from connecting to your server. diff --git a/doc/quickstart.md b/doc/quickstart.md deleted file mode 100644 index 318bbeba..00000000 --- a/doc/quickstart.md +++ /dev/null @@ -1,98 +0,0 @@ -# Quickstart Guide -1. Visit the [releases page](https://github.com/cdr/code-server/releases) and - download the latest binary for your operating system. -2. Unpack the downloaded file then run the binary. -3. In your browser navigate to `localhost:8080`. - -## Usage -Run `code-server --help` to view available options. - -### Nginx Reverse Proxy -The trailing slashes are important. - -``` -server { - listen 80; - listen [::]:80; - server_name code.example.com code.example.org; - location /some/path/ { # Or / if hosting at the root. - proxy_pass http://localhost:8080/; - proxy_set_header Host $host; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection upgrade; - proxy_set_header Accept-Encoding gzip; - } -} -``` - -### Apache Reverse Proxy -``` - - ServerName code.example.com - - RewriteEngine On - RewriteCond %{HTTP:Upgrade} =websocket [NC] - RewriteRule /(.*) ws://localhost:8080/$1 [P,L] - RewriteCond %{HTTP:Upgrade} !=websocket [NC] - RewriteRule /(.*) http://localhost:8080/$1 [P,L] - - ProxyRequests off - ProxyPass / http://localhost:8080/ nocanon - ProxyPassReverse / http://localhost:8080/ - -``` - -### Run automatically at startup - -In some cases you might need to run code-server automatically once the host starts. You may use your local init service to do so. - -#### Systemd - -```ini -[Unit] -Description=Code Server IDE -After=network.target - -[Service] -Type=simple -User= -EnvironmentFile=$HOME/.profile -WorkingDirectory=$HOME -Restart=on-failure -RestartSec=10 - -ExecStart= $(pwd) - -StandardOutput=file:/var/log/code-server-output.log -StandardError=file:/var/log/code-server-error.log - -[Install] -WantedBy=multi-user.target -``` - -#### OpenRC - -```sh -#!/sbin/openrc-run - -depend() { - after net-online - need net -} - -supervisor=supervise-daemon -name="code-server" -command="/opt/cdr/code-server" -command_args="" - -pidfile="/var/run/cdr.pid" -respawn_delay=5 - -set -o allexport -if [ -f /etc/environment ]; then source /etc/environment; fi -set +o allexport -``` - -#### Kubernetes/Docker - -Make sure you set your restart policy to always - this will ensure your container starts as the daemon starts. diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 203f96f6..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: "3" - -services: - code-server: - container_name: code-server - image: codercom/code-server - ports: - - "8080:8080" - volumes: - - "${PWD}:/home/coder/project" - - "${HOME}/.local/share/code-server:/home/coder/.local/share/code-server" - environment: - PASSWORD: ${PASSWORD} diff --git a/package.json b/package.json index 3ae61242..fb146626 100644 --- a/package.json +++ b/package.json @@ -3,19 +3,16 @@ "license": "MIT", "version": "2.1.0", "scripts": { - "i": "yarn install --ignore-scripts", - "preinstall": "./scripts/preinstall.sh", - "postinstall": "./scripts/postinstall.sh", - "patch:generate": "cd ./lib/vscode && git diff HEAD > ../../scripts/vscode.patch", - "patch:apply": "cd ./lib/vscode && git apply ../../scripts/vscode.patch", + "clean": "ci/clean.sh", + "vscode": "ci/vscode.sh", + "vscode:patch": "cd ./lib/vscode && git apply ../../ci/vscode.patch", + "vscode:diff": "cd ./lib/vscode && git diff HEAD > ../../ci/vscode.patch", "test": "mocha -r ts-node/register ./test/*.test.ts", - "test:build": "./scripts/test.sh", - "lint:js": "eslint src test scripts --ext .ts,.tsx", - "lint:css": "stylelint 'src/**/*.css'", - "lint": "./scripts/lint.sh", - "watch": "yarn runner watch", - "runner": "cd ./scripts && node --max-old-space-size=32384 -r ts-node/register ./build.ts", + "lint": "ci/lint.sh", + "fmt": "ci/fmt.sh", + "runner": "cd ./ci && NODE_OPTIONS=--max_old_space_size=32384 ts-node ./build.ts", "build": "yarn runner build", + "watch": "yarn runner watch", "binary": "yarn runner binary", "package": "yarn runner package" }, diff --git a/scripts/cacher.sh b/scripts/cacher.sh deleted file mode 100755 index 23912f62..00000000 --- a/scripts/cacher.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env sh -# cacher.sh -- Restore and rebuild cache. -# Cache paths are designed to work with multi-arch builds and are organized -# based on the branch or tag. The master branch cache is used as a fallback. -# This will download and package the cache but it will not upload it. - -set -eu - -# Try restoring from each argument in turn until we get something. -restore() { - for branch in "$@" ; do - if [ -n "$branch" ] ; then - cache_path="https://codesrv-ci.cdr.sh/cache/$branch/$tar.tar.gz" - if wget "$cache_path" ; then - tar xzvf "$tar.tar.gz" - break - fi - fi - done -} - -# We need to cache the built-in extensions and Node modules. Everything inside -# the cache-upload directory will be uploaded as-is to the code-server bucket. -package() { - mkdir -p "cache-upload/cache/$1" - tar czfv "cache-upload/cache/$1/$tar.tar.gz" node_modules yarn-cache \ - lib/vscode/.build \ - lib/vscode/node_modules -} - -main() { - cd "$(dirname "$0")/.." - - # Get the branch for this build. - branch=${DRONE_BRANCH:-${DRONE_SOURCE_BRANCH:-${DRONE_TAG:-}}} - - # The cache will be named based on the arch, platform, and libc. - arch=$DRONE_STAGE_ARCH - platform=${PLATFORM:-linux} - case $DRONE_STAGE_NAME in - *alpine*) libc=musl ;; - * ) libc=glibc ;; - esac - - tar="$platform-$arch-$libc" - - # The action is determined by the name of the step. - case $DRONE_STEP_NAME in - *restore*) - # Sub-modules must be pulled first since extracting the cache directories - # will prevent git from cloning into them. - git submodule update --init - - restore "$branch" "$DRONE_REPO_BRANCH" - - # Now make sure the pulled Node modules are up to date. - YARN_CACHE_FOLDER="$(pwd)/yarn-cache" - export YARN_CACHE_FOLDER - yarn - ;; - *rebuild*|*package*) package "$branch" ;; - *) exit 1 ;; - esac -} - -main "$@" diff --git a/scripts/ci.dockerfile b/scripts/ci.dockerfile deleted file mode 100644 index d32b51ea..00000000 --- a/scripts/ci.dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -# We deploy with Ubuntu so that devs have a familiar environment. -FROM ubuntu:18.04 - -RUN apt-get update && apt-get install -y \ - openssl \ - net-tools \ - git \ - locales \ - sudo \ - dumb-init \ - vim \ - curl \ - wget - -RUN locale-gen en_US.UTF-8 -# We cannot use update-locale because docker will not use the env variables -# configured in /etc/default/locale so we need to set it manually. -ENV LC_ALL=en_US.UTF-8 \ - SHELL=/bin/bash - -RUN adduser --gecos '' --disabled-password coder && \ - echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd - -USER coder -# Create first so these directories will be owned by coder instead of root -# (workdir and mounting appear to both default to root). -RUN mkdir -p /home/coder/project -RUN mkdir -p /home/coder/.local/share/code-server - -WORKDIR /home/coder/project - -# This ensures we have a volume mounted even if the user forgot to do bind -# mount. So that they do not lose their data if they delete the container. -VOLUME [ "/home/coder/project" ] - -COPY ./binaries/code-server* /usr/local/bin/code-server -EXPOSE 8080 - -ENTRYPOINT ["dumb-init", "code-server", "--host", "0.0.0.0"] diff --git a/scripts/code-server.sh b/scripts/code-server.sh deleted file mode 100755 index 64066fbd..00000000 --- a/scripts/code-server.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -# code-server.sh -- Run code-server with the bundled Node binary. - -main() { - cd "$(dirname "$0")" || exit 1 - ./node ./out/node/entry.js "$@" -} - -main "$@" diff --git a/scripts/lint.sh b/scripts/lint.sh deleted file mode 100755 index de9b59ea..00000000 --- a/scripts/lint.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env sh -# lint.sh -- Lint CSS and JS files. - -set -eu - -main() { - yarn lint:css "$@" - yarn lint:js "$@" -} - -main "$@" diff --git a/scripts/postinstall.sh b/scripts/postinstall.sh deleted file mode 100755 index 353f02e2..00000000 --- a/scripts/postinstall.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh -# postinstall.sh - Does nothing at the moment. - -set -eu - -main() { - cd "$(dirname "${0}")/.." -} - -main "$@" diff --git a/scripts/preinstall.sh b/scripts/preinstall.sh deleted file mode 100755 index 127311fb..00000000 --- a/scripts/preinstall.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env sh -# preinstall.sh -- Prepare VS Code. - -set -eu - -main() { - cd "$(dirname "${0}")/.." - -# Ensure submodules are cloned and up to date. - git submodule update --init - - # Try patching but don't worry too much if it fails. It's possible VS Code has - # already been patched. - yarn patch:apply || echo "Unable to patch; assuming already patched" - - # Install VS Code dependencies. - cd ./lib/vscode - yarn -} - -main "$@" diff --git a/scripts/test.sh b/scripts/test.sh deleted file mode 100755 index c6dd7e5d..00000000 --- a/scripts/test.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env sh -# test.sh -- Simple build test. - -set -eu - -main() { - cd "$(dirname "$0")/.." - - # The main goal here is to ensure that the build fully completed and the - # result looks usable. - version=$(node ./build/out/node/entry.js --version --json) - echo "Got '$version' for the version" - case $version in - "{ codeServer":*) exit 0 ;; - *) exit 1 ;; - esac -} - -main "$@" diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json deleted file mode 100644 index 93e81846..00000000 --- a/scripts/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "commonjs", - "moduleResolution": "node", - "strict": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "forceConsistentCasingInFileNames": true, - "outDir": "./out", - "declaration": true, - "experimentalDecorators": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "resolveJsonModule": true, - "sourceMap": true - }, - "include": [ - "./**/*.ts" - ] -} diff --git a/src/browser/media/manifest.json b/src/browser/media/manifest.json index 0b9a7e1d..8b2a7497 100644 --- a/src/browser/media/manifest.json +++ b/src/browser/media/manifest.json @@ -5,9 +5,11 @@ "display": "fullscreen", "background-color": "#fff", "description": "Run editors on a remote server.", - "icons": [{ - "src": "{{BASE}}/static-{{COMMIT}}/src/browser/media/code-server.png", - "sizes": "384x384", - "type": "image/png" - }] + "icons": [ + { + "src": "{{BASE}}/static-{{COMMIT}}/src/browser/media/code-server.png", + "sizes": "384x384", + "type": "image/png" + } + ] } diff --git a/src/browser/pages/app.html b/src/browser/pages/app.html index ce1b49b1..6f23348c 100644 --- a/src/browser/pages/app.html +++ b/src/browser/pages/app.html @@ -2,14 +2,21 @@ - - + + code-server — {{APP_NAME}} - + - - + + diff --git a/src/browser/pages/error.html b/src/browser/pages/error.html index 2bb44c00..6231b579 100644 --- a/src/browser/pages/error.html +++ b/src/browser/pages/error.html @@ -2,13 +2,20 @@ - - + + code-server {{ERROR_TITLE}} - + - +
@@ -18,7 +25,7 @@ {{ERROR_BODY}}
diff --git a/src/browser/pages/global.css b/src/browser/pages/global.css index 5aa52865..96ab201f 100644 --- a/src/browser/pages/global.css +++ b/src/browser/pages/global.css @@ -10,7 +10,8 @@ body { background: #272727; color: #f4f4f4; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol"; overflow: hidden; } diff --git a/src/browser/pages/home.html b/src/browser/pages/home.html index d67bb5f5..e210673b 100644 --- a/src/browser/pages/home.html +++ b/src/browser/pages/home.html @@ -2,14 +2,21 @@ - - + + code-server - + - - + +
diff --git a/src/browser/pages/login.html b/src/browser/pages/login.html index 2cbd86dd..c9b1a9be 100644 --- a/src/browser/pages/login.html +++ b/src/browser/pages/login.html @@ -2,13 +2,23 @@ - - + + code-server login - + - +
@@ -22,7 +32,8 @@
+ /> diff --git a/src/browser/pages/update.html b/src/browser/pages/update.html index 7ddefa33..55db9d08 100644 --- a/src/browser/pages/update.html +++ b/src/browser/pages/update.html @@ -2,20 +2,26 @@ - - + + code-server - + - +

Update

- {{UPDATE_STATUS}} - {{ERROR}} + {{UPDATE_STATUS}} {{ERROR}} diff --git a/src/browser/pages/vscode.html b/src/browser/pages/vscode.html index b4453957..78c88eea 100644 --- a/src/browser/pages/vscode.html +++ b/src/browser/pages/vscode.html @@ -4,28 +4,38 @@ - + - + - + - - - - + + + + - + - + - - + diff --git a/src/browser/socket.ts b/src/browser/socket.ts index 23d969f4..764f8c90 100644 --- a/src/browser/socket.ts +++ b/src/browser/socket.ts @@ -159,7 +159,7 @@ export class ReconnectingSocket { const socket = new WebSocket( `${location.protocol === "https:" ? "wss" : "ws"}://${location.host}${this.customPath || location.pathname}${ location.search ? `?${location.search}` : "" - }` + }`, ) const reject = (): void => { diff --git a/src/node/app/api.ts b/src/node/app/api.ts index f2d7aa2a..b0989bb7 100644 --- a/src/node/app/api.ts +++ b/src/node/app/api.ts @@ -68,7 +68,7 @@ export class ApiHttpProvider extends HttpProvider { route: Route, request: http.IncomingMessage, socket: net.Socket, - head: Buffer + head: Buffer, ): Promise { if (!this.authenticated(request)) { throw new Error("not authenticated") @@ -120,7 +120,7 @@ export class ApiHttpProvider extends HttpProvider { route: Route, request: http.IncomingMessage, socket: net.Socket, - head: Buffer + head: Buffer, ): Promise { const sessionId = route.requestPath.replace(/^\//, "") logger.debug("connecting session", field("sessionId", sessionId)) @@ -149,8 +149,8 @@ export class ApiHttpProvider extends HttpProvider { Buffer.from( JSON.stringify({ protocol: "TODO", - }) - ) + }), + ), ) return true diff --git a/src/node/app/app.ts b/src/node/app/app.ts index 8c65e0f7..298ba974 100644 --- a/src/node/app/app.ts +++ b/src/node/app/app.ts @@ -15,7 +15,7 @@ export class MainHttpProvider extends HttpProvider { public constructor( options: HttpProviderOptions, private readonly api: ApiHttpProvider, - private readonly update: UpdateHttpProvider + private readonly update: UpdateHttpProvider, ) { super(options) } @@ -68,7 +68,7 @@ export class MainHttpProvider extends HttpProvider { base: this.base(route), logLevel: logger.level, }, - (app && app.name) || "" + (app && app.name) || "", ) } @@ -100,11 +100,11 @@ export class MainHttpProvider extends HttpProvider { .replace(/{{APP_LIST:RUNNING}}/, this.getAppRows(recent.running)) .replace( /{{APP_LIST:EDITORS}}/, - this.getAppRows(apps.filter((app) => app.categories && app.categories.includes("Editor"))) + this.getAppRows(apps.filter((app) => app.categories && app.categories.includes("Editor"))), ) .replace( /{{APP_LIST:OTHER}}/, - this.getAppRows(apps.filter((app) => !app.categories || !app.categories.includes("Editor"))) + this.getAppRows(apps.filter((app) => !app.categories || !app.categories.includes("Editor"))), ) return response } diff --git a/src/node/app/login.ts b/src/node/app/login.ts index 1b79b4b7..1efc46d0 100644 --- a/src/node/app/login.ts +++ b/src/node/app/login.ts @@ -109,7 +109,7 @@ export class LoginHttpProvider extends HttpProvider { remoteAddress: request.connection.remoteAddress, userAgent: request.headers["user-agent"], timestamp: Math.floor(new Date().getTime() / 1000), - }) + }), ) throw new Error("Incorrect password") diff --git a/src/node/app/vscode.ts b/src/node/app/vscode.ts index b3fafff5..243f701d 100644 --- a/src/node/app/vscode.ts +++ b/src/node/app/vscode.ts @@ -96,7 +96,7 @@ export class VscodeHttpProvider extends HttpProvider { "Upgrade: websocket", "Connection: Upgrade", `Sec-WebSocket-Accept: ${reply}`, - ].join("\r\n") + "\r\n\r\n" + ].join("\r\n") + "\r\n\r\n", ) const vscode = await this._vscode @@ -140,7 +140,7 @@ export class VscodeHttpProvider extends HttpProvider { const response = await this.getUtf8Resource(this.vsRootPath, route.requestPath) response.content = response.content.replace( /{{COMMIT}}/g, - this.workbenchOptions ? this.workbenchOptions.commit : "" + this.workbenchOptions ? this.workbenchOptions.commit : "", ) response.cache = true return response @@ -180,7 +180,7 @@ export class VscodeHttpProvider extends HttpProvider { lastVisited, this.args._ && this.args._.length > 0 ? { url: this.args._[0] } : undefined, ], - remoteAuthority + remoteAuthority, ) const [response, options] = await Promise.all([ await this.getUtf8Resource(this.rootPath, "src/browser/pages/vscode.html"), @@ -223,7 +223,7 @@ export class VscodeHttpProvider extends HttpProvider { */ private async getFirstValidPath( startPaths: Array<{ url?: string | string[]; workspace?: boolean } | undefined>, - remoteAuthority: string + remoteAuthority: string, ): Promise { for (let i = 0; i < startPaths.length; ++i) { const startPath = startPaths[i] diff --git a/src/node/cli.ts b/src/node/cli.ts index a87b0666..4389c876 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -102,13 +102,13 @@ export const optionDescriptions = (): string[] => { long: k.length > prev.long ? k.length : prev.long, short: v.short && v.short.length > prev.short ? v.short.length : prev.short, }), - { short: 0, long: 0 } + { short: 0, long: 0 }, ) return entries.map( ([k, v]) => `${" ".repeat(widths.short - (v.short ? v.short.length : 0))}${v.short ? `-${v.short}` : " "} --${k}${" ".repeat( - widths.long - k.length - )} ${v.description}${typeof v.type === "object" ? ` [${Object.values(v.type).join(", ")}]` : ""}` + widths.long - k.length, + )} ${v.description}${typeof v.type === "object" ? ` [${Object.values(v.type).join(", ")}]` : ""}`, ) } diff --git a/src/node/entry.ts b/src/node/entry.ts index bfa8bc4c..3d8df7d1 100644 --- a/src/node/entry.ts +++ b/src/node/entry.ts @@ -71,7 +71,7 @@ const main = async (args: Args): Promise => { logger.info( typeof args.cert === "string" ? ` - Using provided certificate${args["cert-key"] ? " and key" : ""} for HTTPS` - : ` - Using generated certificate and key for HTTPS` + : ` - Using generated certificate and key for HTTPS`, ) } else { logger.info(" - Not serving HTTPS") diff --git a/src/node/http.ts b/src/node/http.ts index 2c51567c..4bdbea28 100644 --- a/src/node/http.ts +++ b/src/node/http.ts @@ -142,7 +142,7 @@ export abstract class HttpProvider { route: Route, request: http.IncomingMessage, socket: net.Socket, - head: Buffer + head: Buffer, ): Promise /** @@ -384,7 +384,7 @@ export class HttpServer { cert: this.options.cert && fs.readFileSync(this.options.cert), key: this.options.certKey && fs.readFileSync(this.options.certKey), }, - this.onRequest + this.onRequest, ) } else { this.server = http.createServer(this.onRequest) @@ -412,7 +412,7 @@ export class HttpServer { endpoint: string, provider: HttpProvider2, a1: A1, - a2: A2 + a2: A2, ): T // eslint-disable-next-line @typescript-eslint/no-explicit-any public registerHttpProvider(endpoint: string, provider: any, ...args: any[]): any { @@ -430,7 +430,7 @@ export class HttpServer { commit: this.options.commit, password: this.options.password, }, - ...args + ...args, ) this.providers.set(`/${endpoint}`, p) return p diff --git a/src/node/util.ts b/src/node/util.ts index e1ae65f2..16b3940d 100644 --- a/src/node/util.ts +++ b/src/node/util.ts @@ -14,7 +14,7 @@ const getXdgDataDir = (): string => { case "darwin": return path.join( process.env.XDG_DATA_HOME || path.join(os.homedir(), "Library/Application Support"), - "code-server" + "code-server", ) default: return path.join(process.env.XDG_DATA_HOME || path.join(os.homedir(), ".local/share"), "code-server") diff --git a/src/node/wrapper.ts b/src/node/wrapper.ts index 293e9d39..e8e9c573 100644 --- a/src/node/wrapper.ts +++ b/src/node/wrapper.ts @@ -76,7 +76,7 @@ export class IpcMain { `${child ? "wrapper" : "inner process"} ${process.pid} received message from ${ child ? child.pid : this.parentPid }`, - field("message", message) + field("message", message), ) if (message.type === "handshake") { target.removeListener("message", onMessage) @@ -122,7 +122,7 @@ export const ipcMain = (): IpcMain => { _ipcMain = new IpcMain( typeof process.env.CODE_SERVER_PARENT_PID !== "undefined" ? parseInt(process.env.CODE_SERVER_PARENT_PID) - : undefined + : undefined, ) } return _ipcMain diff --git a/test/cli.test.ts b/test/cli.test.ts index c069cc0a..cf2acb34 100644 --- a/test/cli.test.ts +++ b/test/cli.test.ts @@ -73,7 +73,7 @@ describe("cli", () => { "user-data-dir": path.resolve("bar"), verbose: true, version: true, - } + }, ) }) diff --git a/tsconfig.json b/tsconfig.json index 9510fea9..2c7db3ea 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,8 +20,5 @@ "rootDir": "./src", "typeRoots": ["./node_modules/@types", "./typings"] }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ] + "include": ["./src/**/*.ts", "./src/**/*.tsx"] } diff --git a/typings/httpolyglot/index.d.ts b/typings/httpolyglot/index.d.ts index 7b644a8b..176e038c 100644 --- a/typings/httpolyglot/index.d.ts +++ b/typings/httpolyglot/index.d.ts @@ -5,6 +5,6 @@ declare module "httpolyglot" { function createServer(requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void): http.Server function createServer( options: https.ServerOptions, - requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void + requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void, ): https.Server } diff --git a/yarn.lock b/yarn.lock index e426b347..24ae20e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -904,9 +904,9 @@ integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== "@types/node@*", "@types/node@^12.12.7": - version "12.12.26" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.26.tgz#213e153babac0ed169d44a6d919501e68f59dea9" - integrity sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA== + version "12.12.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.27.tgz#d7506f73160ad30fcebbcf5b8b7d2d976e649e42" + integrity sha512-odQFl/+B9idbdS0e8IxDl2ia/LP8KZLXhV3BUeI98TrZp0uoIzQPhGd+5EtzHmT0SMOIaPd7jfz6pOHLWTtl7A== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -998,39 +998,39 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^2.0.0": - version "2.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.19.0.tgz#bf743448a4633e4b52bee0c40148ba072ab3adbd" - integrity sha512-u7IcQ9qwsB6U806LupZmINRnQjC+RJyv36sV/ugaFWMHTbFm/hlLTRx3gGYJgHisxcGSTnf+I/fPDieRMhPSQQ== + version "2.19.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.19.2.tgz#e279aaae5d5c1f2547b4cff99204e1250bc7a058" + integrity sha512-HX2qOq2GOV04HNrmKnTpSIpHjfl7iwdXe3u/Nvt+/cpmdvzYvY0NHSiTkYN257jHnq4OM/yo+OsFgati+7LqJA== dependencies: - "@typescript-eslint/experimental-utils" "2.19.0" + "@typescript-eslint/experimental-utils" "2.19.2" eslint-utils "^1.4.3" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.19.0": - version "2.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.19.0.tgz#d5ca732f22c009e515ba09fcceb5f2127d841568" - integrity sha512-zwpg6zEOPbhB3+GaQfufzlMUOO6GXCNZq6skk+b2ZkZAIoBhVoanWK255BS1g5x9bMwHpLhX0Rpn5Fc3NdCZdg== +"@typescript-eslint/experimental-utils@2.19.2": + version "2.19.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.19.2.tgz#4611d44cf0f0cb460c26aa7676fc0a787281e233" + integrity sha512-B88QuwT1wMJR750YvTJBNjMZwmiPpbmKYLm1yI7PCc3x0NariqPwqaPsoJRwU9DmUi0cd9dkhz1IqEnwfD+P1A== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.19.0" + "@typescript-eslint/typescript-estree" "2.19.2" eslint-scope "^5.0.0" "@typescript-eslint/parser@^2.0.0": - version "2.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.19.0.tgz#912160d9425395d09857dcd5382352bc98be11ae" - integrity sha512-s0jZoxAWjHnuidbbN7aA+BFVXn4TCcxEVGPV8lWMxZglSs3NRnFFAlL+aIENNmzB2/1jUJuySi6GiM6uACPmpg== + version "2.19.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.19.2.tgz#21f42c0694846367e7d6a907feb08ab2f89c0879" + integrity sha512-8uwnYGKqX9wWHGPGdLB9sk9+12sjcdqEEYKGgbS8A0IvYX59h01o8os5qXUHMq2na8vpDRaV0suTLM7S8wraTA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.19.0" - "@typescript-eslint/typescript-estree" "2.19.0" + "@typescript-eslint/experimental-utils" "2.19.2" + "@typescript-eslint/typescript-estree" "2.19.2" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.19.0": - version "2.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.19.0.tgz#6bd7310b9827e04756fe712909f26956aac4b196" - integrity sha512-n6/Xa37k0jQdwpUszffi19AlNbVCR0sdvCs3DmSKMD7wBttKY31lhD2fug5kMD91B2qW4mQldaTEc1PEzvGu8w== +"@typescript-eslint/typescript-estree@2.19.2": + version "2.19.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.19.2.tgz#67485b00172f400474d243c6c0be27581a579350" + integrity sha512-Xu/qa0MDk6upQWqE4Qy2X16Xg8Vi32tQS2PR0AvnT/ZYS4YGDvtn2MStOh5y8Zy2mg4NuL06KUHlvCh95j9C6Q== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" @@ -1081,9 +1081,9 @@ acorn-walk@^6.0.1: integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn-walk@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b" - integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg== + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" + integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== acorn@^5.0.0: version "5.7.3" @@ -1173,9 +1173,9 @@ ansi-styles@^4.1.0: color-convert "^2.0.1" ansi-to-html@^0.6.4: - version "0.6.13" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.13.tgz#c72eae8b63e5ca0643aab11bfc6e6f2217425833" - integrity sha512-Ys2/umuaTlQvP9DLkaa7UzRKF2FLrfod/hNHXS9QhXCrw7seObG6ksOGmNz3UoK+adwM8L9vQfG7mvaxfJ3Jvw== + version "0.6.14" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.14.tgz#65fe6d08bba5dd9db33f44a20aec331e0010dad8" + integrity sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA== dependencies: entities "^1.1.2" @@ -1188,9 +1188,9 @@ anymatch@^2.0.0: normalize-path "^2.1.1" arg@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" - integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" @@ -1310,7 +1310,7 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^9.7.3: +autoprefixer@^9.7.4: version "9.7.4" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== @@ -1620,13 +1620,13 @@ browserify@^16.5.0: xtend "^4.0.0" browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.8.3, browserslist@^4.8.5: - version "4.8.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.6.tgz#96406f3f5f0755d272e27a66f4163ca821590a7e" - integrity sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg== + version "4.8.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" + integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== dependencies: - caniuse-lite "^1.0.30001023" - electron-to-chromium "^1.3.341" - node-releases "^1.1.47" + caniuse-lite "^1.0.30001027" + electron-to-chromium "^1.3.349" + node-releases "^1.1.49" buffer-alloc-unsafe@^1.1.0: version "1.1.0" @@ -1756,10 +1756,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001023: - version "1.0.30001024" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001024.tgz#7feb6793fd5c9d7e0d4c01c80321855592a46b73" - integrity sha512-LubRSEPpOlKlhZw9wGlLHo8ZVj6ugGU3xGUfLPneNBledSd9lIM5cCGZ9Mz/mMCJUhEt4jZpYteZNVRdJw5FRA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001027: + version "1.0.30001027" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz#283e2ef17d94889cc216a22c6f85303d78ca852d" + integrity sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg== caseless@~0.12.0: version "0.12.0" @@ -1849,9 +1849,9 @@ chokidar@^2.1.5: fsevents "^1.2.7" chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^1.1.3: version "1.1.4" @@ -2506,9 +2506,9 @@ diff@3.5.0: integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== diff@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diffie-hellman@^5.0.0: version "5.0.3" @@ -2586,12 +2586,12 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== dependencies: - is-obj "^1.0.0" + is-obj "^2.0.0" dotenv-expand@^5.1.0: version "5.1.0" @@ -2623,10 +2623,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.341: - version "1.3.344" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz#f1397a633c35e726730c24be1084cd25c3ee8148" - integrity sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw== +electron-to-chromium@^1.3.349: + version "1.3.351" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.351.tgz#78bcf8e9092013232b2fb72b9db423d96e92604c" + integrity sha512-L8zhV8k7Znp2q3wWXYDzCyfTBeGauEX0rX/FtgmnDgmvHRqwu9NVN614wOkXx9sDZmJZpNMBaEFMXTu/vbr+Kg== elliptic@^6.0.0: version "6.5.2" @@ -2685,7 +2685,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.2: +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: version "1.17.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== @@ -2702,23 +2702,6 @@ es-abstract@^1.17.0, es-abstract@^1.17.2: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" -es-abstract@^1.17.0-next.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1" - integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" - es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -2744,9 +2727,9 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.0, escodegen@^1.11.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.13.0.tgz#c7adf9bd3f3cc675bb752f202f79a720189cab29" - integrity sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw== + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -2898,9 +2881,9 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" + integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== dependencies: estraverse "^4.0.0" @@ -3421,7 +3404,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -3970,10 +3953,10 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-plain-obj@^1.1.0: version "1.1.0" @@ -4243,14 +4226,14 @@ kind-of@^5.0.0: integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -known-css-properties@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.17.0.tgz#1c535f530ee8e9e3e27bb6a718285780e1d07326" - integrity sha512-Vi3nxDGMm/z+lAaCjvAR1u+7fiv+sG6gU/iYDj5QOF8h76ytK9EW/EKfF0NeTyiGBi8Jy6Hklty/vxISrLox3w== +known-css-properties@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.18.0.tgz#d6e00b56ee1d5b0d171fd86df1583cfb012c521f" + integrity sha512-69AgJ1rQa7VvUsd2kpvVq+VeObDuo3zrj0CzM5Slmf6yduQFAI2kXPDQJR2IE/u6MSAUOJrwSzjg5vlz8qcMiw== labeled-stream-splicer@^2.0.0: version "2.0.2" @@ -4427,7 +4410,7 @@ markdown-table@^1.1.0: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== -mathml-tag-names@^2.1.1: +mathml-tag-names@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== @@ -4463,9 +4446,9 @@ mdn-data@2.0.4: integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== meow@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-6.0.0.tgz#949196fdf21d979379e3bdccb0411e60f8cffd93" - integrity sha512-x4rYsjigPBDAxY+BGuK83YLhUIqui5wYyZoqb6QJCUOs+0fiYq+i/NV4Jt8OgIfObZFxG9iTyvLDu4UTohGTFw== + version "6.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-6.0.1.tgz#f9b3f912c9aa039142cebcf74315129f4cd1ce1c" + integrity sha512-kxGTFgT/b7/oSRSQsJ0qsT5IMU+bgZ1eAdSA3kIV7onkW0QWo/hL5RbGlMfvBjHJKPE1LaPX0kdecYFiqYWjUw== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.1.1" @@ -4787,10 +4770,10 @@ node-libs-browser@^2.0.0: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^1.1.47: - version "1.1.47" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" - integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== +node-releases@^1.1.49: + version "1.1.49" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.49.tgz#67ba5a3fac2319262675ef864ed56798bb33b93e" + integrity sha512-xH8t0LS0disN0mtRCh+eByxFPie+msJUBL/lJDBuap53QGiYPa9joh83K4pCZgWJ+2L4b9h88vCVdXQ60NO2bg== dependencies: semver "^6.3.0" @@ -5061,9 +5044,9 @@ pako@^0.2.5: integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parcel-bundler@^1.12.4: version "1.12.4" @@ -5272,14 +5255,14 @@ pbkdf2@^3.0.3: sha.js "^2.4.8" pem@^1.14.2: - version "1.14.3" - resolved "https://registry.yarnpkg.com/pem/-/pem-1.14.3.tgz#347e5a5c194a5f7612b88083e45042fcc4fb4901" - integrity sha512-Q+AMVMD3fzeVvZs5PHeI+pVt0hgZY2fjhkliBW43qyONLgCXPVk1ryim43F9eupHlNGLJNT5T/NNrzhUdiC5Zg== + version "1.14.4" + resolved "https://registry.yarnpkg.com/pem/-/pem-1.14.4.tgz#a68c70c6e751ccc5b3b5bcd7af78b0aec1177ff9" + integrity sha512-v8lH3NpirgiEmbOqhx0vwQTxwi0ExsiWBGYh0jYNq7K6mQuO4gI6UEFlr6fLAdv9TPXRt6GqiwE37puQdIDS8g== dependencies: es6-promisify "^6.0.0" md5 "^2.2.1" os-tmpdir "^1.0.1" - which "^1.3.1" + which "^2.0.2" performance-now@^2.1.0: version "2.1.0" @@ -5382,7 +5365,7 @@ postcss-html@^0.36.0: dependencies: htmlparser2 "^3.10.0" -postcss-jsx@^0.36.3: +postcss-jsx@^0.36.4: version "0.36.4" resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.4.tgz#37a68f300a39e5748d547f19a747b3257240bd50" integrity sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA== @@ -5628,11 +5611,11 @@ postcss-resolve-nested-selector@^0.1.1: integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= postcss-safe-parser@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - integrity sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" + integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== dependencies: - postcss "^7.0.0" + postcss "^7.0.26" postcss-sass@^0.4.2: version "0.4.2" @@ -5649,7 +5632,7 @@ postcss-scss@^2.0.0: dependencies: postcss "^7.0.0" -postcss-selector-parser@6.0.2, postcss-selector-parser@^6.0.0: +postcss-selector-parser@6.0.2, postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -5658,12 +5641,12 @@ postcss-selector-parser@6.0.2, postcss-selector-parser@^6.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== dependencies: - dot-prop "^4.1.1" + dot-prop "^5.2.0" indexes-of "^1.0.1" uniq "^1.0.1" @@ -5807,7 +5790,7 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -psl@^1.1.24, psl@^1.1.28: +psl@^1.1.28: version "1.7.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== @@ -5837,7 +5820,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1: +punycode@^1.2.4, punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -5967,19 +5950,10 @@ readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.3, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.1, readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.0.6: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606" - integrity sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA== +readable-stream@^3.0.1, readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -6088,9 +6062,9 @@ regjsparser@^0.1.4: jsesc "~0.5.0" regjsparser@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" - integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== + version "0.6.3" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" + integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== dependencies: jsesc "~0.5.0" @@ -6181,9 +6155,9 @@ request-promise-native@^1.0.5: tough-cookie "^2.3.3" request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -6192,7 +6166,7 @@ request@^2.88.0: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -6202,7 +6176,7 @@ request@^2.88.0: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" @@ -6241,17 +6215,10 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.4, resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2: - version "1.15.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== - dependencies: - path-parse "^1.0.6" - -resolve@^1.4.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" - integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== +resolve@^1.1.4, resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.4.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" @@ -6888,11 +6855,11 @@ stylelint-config-standard@^19.0.0: stylelint-config-recommended "^3.0.0" stylelint@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.0.0.tgz#532007f7154c1a5ed14245d857a5884316f5111f" - integrity sha512-6sjgOJbM3iLhnUtmRO0J1vvxie9VnhIZX/2fCehjylv9Gl9u0ytehGCTm9Lhw2p1F8yaNZn5UprvhCB8C3g/Tg== + version "13.2.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.2.0.tgz#b6f5b67b9a9a51f1fd105ab916952456d93826b4" + integrity sha512-isf31yjkm0DQesx+Yk1b/WQpFkf1MicwaAVR22Hprx9HRFGhhEkWdrVCyrkK6HFymL0rhzynG97Tu53q/WCsAg== dependencies: - autoprefixer "^9.7.3" + autoprefixer "^9.7.4" balanced-match "^1.0.0" chalk "^3.0.0" cosmiconfig "^6.0.0" @@ -6907,17 +6874,17 @@ stylelint@^13.0.0: ignore "^5.1.4" import-lazy "^4.0.0" imurmurhash "^0.1.4" - known-css-properties "^0.17.0" + known-css-properties "^0.18.0" leven "^3.1.0" lodash "^4.17.15" log-symbols "^3.0.0" - mathml-tag-names "^2.1.1" + mathml-tag-names "^2.1.3" meow "^6.0.0" micromatch "^4.0.2" normalize-selector "^0.2.0" postcss "^7.0.26" postcss-html "^0.36.0" - postcss-jsx "^0.36.3" + postcss-jsx "^0.36.4" postcss-less "^3.1.4" postcss-markdown "^0.36.0" postcss-media-query-parser "^0.2.3" @@ -6926,7 +6893,7 @@ stylelint@^13.0.0: postcss-safe-parser "^4.0.1" postcss-sass "^0.4.2" postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" + postcss-selector-parser "^6.0.2" postcss-syntax "^0.36.2" postcss-value-parser "^4.0.2" resolve-from "^5.0.0" @@ -7193,7 +7160,7 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@^2.5.0: +tough-cookie@^2.3.3, tough-cookie@^2.5.0, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -7201,14 +7168,6 @@ tough-cookie@^2.3.3, tough-cookie@^2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -7237,15 +7196,15 @@ trough@^1.0.0: integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== ts-node@^8.4.1: - version "8.5.4" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.4.tgz#a152add11fa19c221d0b48962c210cf467262ab2" - integrity sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== + version "8.6.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" + integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== dependencies: arg "^4.1.0" diff "^4.0.1" make-error "^1.1.1" source-map-support "^0.5.6" - yn "^3.0.0" + yn "3.1.1" tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" @@ -7321,9 +7280,9 @@ umd@^3.0.0: integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== uncss@^0.17.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/uncss/-/uncss-0.17.2.tgz#fac1c2429be72108e8a47437c647d58cf9ea66f1" - integrity sha512-hu2HquwDItuGDem4YsJROdAD8SknmWtM24zwhQax6J1se8tPjV1cnwPKhtjodzBaUhaL8Zb3hlGdZ2WAUpbAOg== + version "0.17.3" + resolved "https://registry.yarnpkg.com/uncss/-/uncss-0.17.3.tgz#50fc1eb4ed573ffff763458d801cd86e4d69ea11" + integrity sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog== dependencies: commander "^2.20.0" glob "^7.1.4" @@ -7679,6 +7638,13 @@ which@1.3.1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" +which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -7844,7 +7810,7 @@ yargs@^14.0.0: y18n "^4.0.0" yargs-parser "^15.0.0" -yn@^3.0.0: +yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==